From cdda68332a453787a53589b81b70804835d679c4 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 23 Jun 2022 18:40:41 +0800 Subject: [PATCH 01/78] replace all `tcont $ pletFields` with `pletFieldsC` and all `tcont $ ptryFrom` with `ptryFromC` --- agora/Agora/AuthorityToken.hs | 10 +-- agora/Agora/Effect.hs | 6 +- agora/Agora/Effect/GovernorMutation.hs | 10 +-- agora/Agora/Effect/TreasuryWithdrawal.hs | 12 +-- agora/Agora/Governor.hs | 7 +- agora/Agora/Governor/Scripts.hs | 109 +++++++++++------------ agora/Agora/MultiSig.hs | 3 +- agora/Agora/Plutarch/Orphans.hs | 7 +- agora/Agora/Proposal.hs | 4 +- agora/Agora/Proposal/Scripts.hs | 52 ++++++----- agora/Agora/Proposal/Time.hs | 8 +- agora/Agora/Stake.hs | 2 +- agora/Agora/Stake/Scripts.hs | 26 +++--- agora/Agora/Treasury.hs | 6 +- agora/Agora/Utils.hs | 4 +- 15 files changed, 129 insertions(+), 137 deletions(-) diff --git a/agora/Agora/AuthorityToken.hs b/agora/Agora/AuthorityToken.hs index af97e96e..79b88692 100644 --- a/agora/Agora/AuthorityToken.hs +++ b/agora/Agora/AuthorityToken.hs @@ -33,7 +33,7 @@ import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import "plutarch" Plutarch.Api.V1.Value (PValue (PValue)) import Plutarch.Builtin (pforgetData) import Plutarch.Extra.List (plookup) -import Plutarch.Extra.TermCont (pguardC, pmatchC) +import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC) import PlutusLedgerApi.V1.Value (AssetClass (AssetClass)) -------------------------------------------------------------------------------- @@ -73,7 +73,7 @@ authorityTokensValidIn :: Term s (PCurrencySymbol :--> PTxOut :--> PBool) authorityTokensValidIn = phoistAcyclic $ plam $ \authorityTokenSym txOut'' -> unTermCont $ do PTxOut txOut' <- pmatchC txOut'' - txOut <- tcont $ pletFields @'["address", "value"] $ txOut' + txOut <- pletFieldsC @'["address", "value"] $ txOut' PAddress address <- pmatchC txOut.address PValue value' <- pmatchC txOut.value PMap value <- pmatchC value' @@ -112,7 +112,7 @@ singleAuthorityTokenBurned gatCs txInfo mint = unTermCont $ do let gatAmountMinted :: Term _ PInteger gatAmountMinted = psymbolValueOf # gatCs # mint - txInfoF <- tcont $ pletFields @'["inputs"] $ txInfo + txInfoF <- pletFieldsC @'["inputs"] $ txInfo pure $ foldr1 @@ -137,9 +137,9 @@ authorityTokenPolicy :: AuthorityToken -> ClosedTerm PMintingPolicy authorityTokenPolicy params = plam $ \_redeemer ctx' -> pmatch ctx' $ \(PScriptContext ctx') -> unTermCont $ do - ctx <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' PTxInfo txInfo' <- pmatchC $ pfromData ctx.txInfo - txInfo <- tcont $ pletFields @'["inputs", "mint", "outputs"] txInfo' + txInfo <- pletFieldsC @'["inputs", "mint", "outputs"] txInfo' let inputs = txInfo.inputs mintedValue = pfromData txInfo.mint AssetClass (govCs, govTn) = params.authority diff --git a/agora/Agora/Effect.hs b/agora/Agora/Effect.hs index 3a56ed02..2239d246 100644 --- a/agora/Agora/Effect.hs +++ b/agora/Agora/Effect.hs @@ -9,7 +9,7 @@ module Agora.Effect (makeEffect) where import Agora.AuthorityToken (singleAuthorityTokenBurned) import Plutarch.Api.V1 (PCurrencySymbol, PScriptPurpose (PSpending), PTxInfo, PTxOutRef, PValidator, PValue) -import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC, ptryFromC) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.TryFrom () import PlutusLedgerApi.V1.Value (CurrencySymbol) @@ -29,7 +29,7 @@ makeEffect :: ClosedTerm PValidator makeEffect gatCs' f = plam $ \datum _redeemer ctx' -> unTermCont $ do - ctx <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo' <- pletC ctx.txInfo -- convert input datum, PData, into desierable type @@ -42,7 +42,7 @@ makeEffect gatCs' f = txOutRef' <- pletC (pfield @"_0" # txOutRef) -- fetch minted values to ensure single GAT is burned - txInfo <- tcont $ pletFields @'["mint"] txInfo' + txInfo <- pletFieldsC @'["mint"] txInfo' let mint :: Term _ (PValue _ _) mint = txInfo.mint diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index 1dbd550c..4b01ebbb 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -49,7 +49,7 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (PIsDataReprInstances), ) -import Plutarch.Extra.TermCont (pguardC) +import Plutarch.Extra.TermCont (pguardC, pletFieldsC) import Plutarch.Lift (PConstantDecl, PLifted, PUnsafeLiftDecl) import PlutusLedgerApi.V1 (TxOutRef) import PlutusLedgerApi.V1.Value (AssetClass (..)) @@ -151,8 +151,8 @@ deriving via PAsData (PIsDataReprInstances PMutateGovernorDatum) instance PTryFr mutateGovernorValidator :: Governor -> ClosedTerm PValidator mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) $ \_gatCs (datum :: Term _ PMutateGovernorDatum) _ txInfo -> unTermCont $ do - datumF <- tcont $ pletFields @'["newDatum", "governorRef"] datum - txInfoF <- tcont $ pletFields @'["mint", "inputs", "outputs", "datums"] txInfo + datumF <- pletFieldsC @'["newDatum", "governorRef"] datum + txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "datums"] txInfo let mint :: Term _ (PBuiltinList _) mint = pto $ pto $ pto $ pfromData txInfoF.mint @@ -185,7 +185,7 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) ) # pfromData txInfoF.inputs - govInInfo <- tcont $ pletFields @'["outRef", "resolved"] $ inputWithGST + govInInfo <- pletFieldsC @'["outRef", "resolved"] $ inputWithGST -- The effect can only modify the governor UTXO referenced in the datum. pguardC "Can only modify the pinned governor" $ @@ -198,7 +198,7 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) let govAddress = pfield @"address" #$ govInInfo.resolved govOutput' = pfromData $ phead # pfromData txInfoF.outputs - govOutput <- tcont $ pletFields @'["address", "value", "datumHash"] govOutput' + govOutput <- pletFieldsC @'["address", "value", "datumHash"] govOutput' pguardC "No output to the governor" $ govOutput.address #== govAddress diff --git a/agora/Agora/Effect/TreasuryWithdrawal.hs b/agora/Agora/Effect/TreasuryWithdrawal.hs index 7c5da3eb..b170a4f1 100644 --- a/agora/Agora/Effect/TreasuryWithdrawal.hs +++ b/agora/Agora/Effect/TreasuryWithdrawal.hs @@ -34,7 +34,7 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (..), ) -import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import PlutusLedgerApi.V1.Credential (Credential) import PlutusLedgerApi.V1.Value (CurrencySymbol, Value) @@ -143,16 +143,16 @@ deriving via treasuryWithdrawalValidator :: forall {s :: S}. CurrencySymbol -> Term s PValidator treasuryWithdrawalValidator currSymbol = makeEffect currSymbol $ \_cs (datum' :: Term _ PTreasuryWithdrawalDatum) txOutRef' txInfo' -> unTermCont $ do - datum <- tcont $ pletFields @'["receivers", "treasuries"] datum' - txInfo <- tcont $ pletFields @'["outputs", "inputs"] txInfo' + datum <- pletFieldsC @'["receivers", "treasuries"] datum' + txInfo <- pletFieldsC @'["outputs", "inputs"] txInfo' PJust ((pfield @"resolved" #) -> txOut) <- pmatchC $ pfindTxInByTxOutRef # txOutRef' # pfromData txInfo.inputs - effInput <- tcont $ pletFields @'["address", "value"] $ txOut + effInput <- pletFieldsC @'["address", "value"] $ txOut outputValues <- pletC $ pmap # plam ( \(pfromData -> txOut') -> unTermCont $ do - txOut <- tcont $ pletFields @'["address", "value"] $ txOut' + txOut <- pletFieldsC @'["address", "value"] $ txOut' let cred = pfield @"credential" # pfromData txOut.address pure . pdata $ ptuple # cred # txOut.value ) @@ -162,7 +162,7 @@ treasuryWithdrawalValidator currSymbol = makeEffect currSymbol $ pmap # plam ( \((pfield @"resolved" #) . pfromData -> txOut') -> unTermCont $ do - txOut <- tcont $ pletFields @'["address", "value"] $ txOut' + txOut <- pletFieldsC @'["address", "value"] $ txOut' let cred = pfield @"credential" # pfromData txOut.address pure . pdata $ ptuple # cred # txOut.value ) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index b25fe4dc..9df17eaf 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -45,7 +45,7 @@ import Plutarch.DataRepr ( PIsDataReprInstances (PIsDataReprInstances), ) import Plutarch.Extra.Comonad (pextract) -import Plutarch.Extra.TermCont (pletC, pmatchC) +import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.SafeMoney (PDiscrete (..)) import PlutusLedgerApi.V1 (TxOutRef) @@ -231,9 +231,8 @@ governorDatumValid :: Term s (PGovernorDatum :--> PBool) governorDatumValid = phoistAcyclic $ plam $ \datum -> unTermCont $ do thresholds <- - tcont $ - pletFields @'["execute", "create", "vote"] $ - pfield @"proposalThresholds" # datum + pletFieldsC @'["execute", "create", "vote"] $ + pfield @"proposalThresholds" # datum PDiscrete execute' <- pmatchC thresholds.execute PDiscrete draft' <- pmatchC thresholds.create diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index b2639a8f..e617a76c 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -166,7 +166,7 @@ governorPolicy gov = let ownAssetClass = passetClass # ownSymbol # pconstant "" txInfo = pfromData $ pfield @"txInfo" # ctx' - txInfoF <- tcont $ pletFields @'["mint", "inputs", "outputs", "datums", "validRange"] txInfo + txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "datums", "validRange"] txInfo pguardC "Referenced utxo should be spent" $ pisUTXOSpent # oref # txInfoF.inputs @@ -280,11 +280,11 @@ governorPolicy gov = governorValidator :: Governor -> ClosedTerm PValidator governorValidator gov = plam $ \datum' redeemer' ctx' -> unTermCont $ do - (pfromData -> redeemer, _) <- tcont $ ptryFrom redeemer' - ctxF <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + (pfromData -> redeemer, _) <- ptryFromC redeemer' + ctxF <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo' <- pletC $ pfromData $ ctxF.txInfo - txInfoF <- tcont $ pletFields @'["mint", "inputs", "outputs", "datums", "signatories", "validRange"] txInfo' + txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "datums", "signatories", "validRange"] txInfo' PSpending (pfromData . (pfield @"_0" #) -> ownInputRef) <- pmatchC $ pfromData ctxF.purpose @@ -292,19 +292,18 @@ governorValidator gov = pletC $ mustBePJust # "Own input not found" #$ pfindTxInByTxOutRef # ownInputRef # txInfoF.inputs - ownInputF <- tcont $ pletFields @'["address", "value"] ownInput + ownInputF <- pletFieldsC @'["address", "value"] ownInput let ownAddress = pfromData $ ownInputF.address - (pfromData -> (oldGovernorDatum :: Term _ PGovernorDatum), _) <- tcont $ ptryFrom datum' + (pfromData -> (oldGovernorDatum :: Term _ PGovernorDatum), _) <- ptryFromC datum' oldGovernorDatumF <- - tcont $ - pletFields - @'[ "proposalThresholds" - , "nextProposalId" - , "proposalTimings" - , "createProposalTimeRangeMaxWidth" - ] - oldGovernorDatum + pletFieldsC + @'[ "proposalThresholds" + , "nextProposalId" + , "proposalTimings" + , "createProposalTimeRangeMaxWidth" + ] + oldGovernorDatum -- Check that GST will be returned to the governor. let ownInputGSTAmount = psymbolValueOf # pgstSymbol # ownInputF.value @@ -315,7 +314,7 @@ governorValidator gov = pguardC "Exactly one utxo should be sent to the governor" $ plength # ownOutputs #== 1 - ownOutput <- tcont $ pletFields @'["value", "datumHash"] $ phead # ownOutputs + ownOutput <- pletFieldsC @'["value", "datumHash"] $ phead # ownOutputs let ownOuputGSTAmount = psymbolValueOf # pgstSymbol # ownOutput.value pguardC "State token should stay at governor's address" $ ownOuputGSTAmount #== 1 @@ -362,7 +361,7 @@ governorValidator gov = # phoistAcyclic ( plam $ \((pfield @"resolved" #) -> txOut') -> unTermCont $ do - txOut <- tcont $ pletFields @'["address", "value"] txOut' + txOut <- pletFieldsC @'["address", "value"] txOut' pure $ txOut.address #== pdata pstakeValidatorAddress @@ -370,7 +369,7 @@ governorValidator gov = ) # pfromData txInfoF.inputs - stakeInputF <- tcont $ pletFields @'["datumHash", "value"] $ pfield @"resolved" # stakeInput + stakeInputF <- pletFieldsC @'["datumHash", "value"] $ pfield @"resolved" # stakeInput pguardC "Stake input doesn't have datum" $ pisDJust # stakeInputF.datumHash @@ -378,7 +377,7 @@ governorValidator gov = let stakeInputDatum = mustFindDatum' @PStakeDatum # stakeInputF.datumHash # txInfoF.datums stakeInputDatumF <- - tcont $ pletFields @["stakedAmount", "owner", "lockedBy"] stakeInputDatum + pletFieldsC @["stakedAmount", "owner", "lockedBy"] stakeInputDatum pguardC "Required amount of stake GTs should be presented" $ stakeInputDatumF.stakedAmount #== (pgtValueOf # stakeInputF.value) @@ -396,7 +395,7 @@ governorValidator gov = # phoistAcyclic ( plam $ \txOut' -> unTermCont $ do - txOut <- tcont $ pletFields @'["address", "value"] txOut' + txOut <- pletFieldsC @'["address", "value"] txOut' pure $ txOut.address #== pdata pproposalValidatorAddress @@ -419,10 +418,9 @@ governorValidator gov = proposalDatumValid' # proposalOutputDatum' proposalOutputDatum <- - tcont $ - pletFields - @'["effects", "cosigners", "proposalId", "votes"] - proposalOutputDatum' + pletFieldsC + @'["effects", "cosigners", "proposalId", "votes"] + proposalOutputDatum' pguardC "Proposal should have only one cosigner" $ plength # pfromData proposalOutputDatum.cosigners #== 1 @@ -464,7 +462,7 @@ governorValidator gov = # phoistAcyclic ( plam $ \txOut' -> unTermCont $ do - txOut <- tcont $ pletFields @'["address", "value"] txOut' + txOut <- pletFieldsC @'["address", "value"] txOut' pure $ txOut.address #== pdata pstakeValidatorAddress @@ -472,7 +470,7 @@ governorValidator gov = ) # pfromData txInfoF.outputs - stakeOutputF <- tcont $ pletFields @'["datumHash", "value"] $ stakeOutput + stakeOutputF <- pletFieldsC @'["datumHash", "value"] $ stakeOutput pguardC "Staked GTs should be sent back to stake validator" $ stakeInputDatumF.stakedAmount #== (pgtValueOf # stakeOutputF.value) @@ -527,36 +525,34 @@ governorValidator gov = (psymbolValueOf # ppstSymbol #$ pvalueSpent # txInfoF.inputs) #== 1 proposalInputF <- - tcont $ - pletFields @'["datumHash"] $ - pfield @"resolved" - #$ pfromData - $ mustBePJust - # "Proposal input not found" - #$ pfind - # plam - ( \((pfield @"resolved" #) -> txOut) -> unTermCont $ do - txOutF <- tcont $ pletFields @'["address", "value"] txOut - - pure $ - psymbolValueOf # ppstSymbol # txOutF.value #== 1 - #&& txOutF.address #== pdata pproposalValidatorAddress - ) - # pfromData txInfoF.inputs + pletFieldsC @'["datumHash"] $ + pfield @"resolved" + #$ pfromData + $ mustBePJust + # "Proposal input not found" + #$ pfind + # plam + ( \((pfield @"resolved" #) -> txOut) -> unTermCont $ do + txOutF <- pletFieldsC @'["address", "value"] txOut + + pure $ + psymbolValueOf # ppstSymbol # txOutF.value #== 1 + #&& txOutF.address #== pdata pproposalValidatorAddress + ) + # pfromData txInfoF.inputs proposalOutputF <- - tcont $ - pletFields @'["datumHash"] $ - mustBePJust # "Proposal output not found" - #$ pfind - # plam - ( \txOut -> unTermCont $ do - txOutF <- tcont $ pletFields @'["address", "value"] txOut - pure $ - psymbolValueOf # ppstSymbol # txOutF.value #== 1 - #&& txOutF.address #== pdata pproposalValidatorAddress - ) - # pfromData txInfoF.outputs + pletFieldsC @'["datumHash"] $ + mustBePJust # "Proposal output not found" + #$ pfind + # plam + ( \txOut -> unTermCont $ do + txOutF <- pletFieldsC @'["address", "value"] txOut + pure $ + psymbolValueOf # ppstSymbol # txOutF.value #== 1 + #&& txOutF.address #== pdata pproposalValidatorAddress + ) + # pfromData txInfoF.outputs proposalInputDatum <- pletC $ @@ -574,9 +570,8 @@ governorValidator gov = #&& proposalDatumValid' # proposalOutputDatum proposalInputDatumF <- - tcont $ - pletFields @'["proposalId", "effects", "status", "cosigners", "thresholds", "votes", "timingConfig", "startingTime"] - proposalInputDatum + pletFieldsC @'["proposalId", "effects", "status", "cosigners", "thresholds", "votes", "timingConfig", "startingTime"] + proposalInputDatum -- Check that the proposal state is advanced so that a proposal cannot be executed twice. @@ -634,7 +629,7 @@ governorValidator gov = phoistAcyclic $ plam ( \effects (pfromData -> output') -> unTermCont $ do - output <- tcont $ pletFields @'["address", "datumHash"] $ output' + output <- pletFieldsC @'["address", "datumHash"] $ output' let scriptHash = mustBePJust # "GAT receiver is not a script" diff --git a/agora/Agora/MultiSig.hs b/agora/Agora/MultiSig.hs index a454ad2d..5f34ec8f 100644 --- a/agora/Agora/MultiSig.hs +++ b/agora/Agora/MultiSig.hs @@ -25,6 +25,7 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (PIsDataReprInstances), ) +import Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift ( PConstantDecl, PLifted, @@ -123,7 +124,7 @@ pvalidatedByMultisig :: Term s (PMultiSig :--> PTxInfo :--> PBool) pvalidatedByMultisig = phoistAcyclic $ plam $ \multi' txInfo -> unTermCont $ do - multi <- tcont $ pletFields @'["keys", "minSigs"] multi' + multi <- pletFieldsC @'["keys", "minSigs"] multi' let signatories = pfield @"signatories" # txInfo pure $ pfromData multi.minSigs diff --git a/agora/Agora/Plutarch/Orphans.hs b/agora/Agora/Plutarch/Orphans.hs index e2057625..e40fb9ab 100644 --- a/agora/Agora/Plutarch/Orphans.hs +++ b/agora/Agora/Plutarch/Orphans.hs @@ -14,6 +14,7 @@ import Control.Arrow (first) import Plutarch.Api.V1 (PAddress, PCredential, PCurrencySymbol, PDatumHash, PMap, PMaybeData, PPOSIXTime, PPubKeyHash, PStakingCredential, PTokenName, PTxId, PTxOutRef, PValidatorHash, PValue) import Plutarch.Builtin (PBuiltinMap) import Plutarch.DataRepr (PIsDataReprInstances (..)) +import Plutarch.Extra.TermCont (ptryFromC) import Plutarch.Numeric.Additive (AdditiveSemigroup ((+))) import Plutarch.Reducible (Reduce, Reducible) import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom')) @@ -38,7 +39,7 @@ instance PTryFrom PData (PAsData PPubKeyHash) where type PTryFromExcess PData (PAsData PPubKeyHash) = Flip Term PPubKeyHash ptryFrom' opq = runTermCont $ do (wrapped :: Term _ (PAsData PByteString), unwrapped :: Term _ PByteString) <- - tcont $ ptryFrom @(PAsData PByteString) opq + ptryFromC @(PAsData PByteString) opq tcont $ \f -> pif (plengthBS # unwrapped #== 28) (f ()) (ptraceError "a PubKeyHash should be 28 bytes long") pure (punsafeCoerce wrapped, punsafeCoerce unwrapped) @@ -78,7 +79,7 @@ instance PTryFrom PData (PAsData PValidatorHash) where type PTryFromExcess PData (PAsData PValidatorHash) = Flip Term PValidatorHash ptryFrom' opq = runTermCont $ do (wrapped :: Term _ (PAsData PByteString), unwrapped :: Term _ PByteString) <- - tcont $ ptryFrom @(PAsData PByteString) opq + ptryFromC @(PAsData PByteString) opq tcont $ \f -> pif (plengthBS # unwrapped #== 28) (f ()) (ptraceError "a ValidatorHash should be 28 bytes long") pure (punsafeCoerce wrapped, punsafeCoerce unwrapped) @@ -87,7 +88,7 @@ instance PTryFrom PData (PAsData PDatumHash) where type PTryFromExcess PData (PAsData PDatumHash) = Flip Term PDatumHash ptryFrom' opq = runTermCont $ do (wrapped :: Term _ (PAsData PByteString), unwrapped :: Term _ PByteString) <- - tcont $ ptryFrom @(PAsData PByteString) opq + ptryFromC @(PAsData PByteString) opq tcont $ \f -> pif (plengthBS # unwrapped #== 64) (f ()) (ptraceError "a DatumHash should be 64 bytes long") pure (punsafeCoerce wrapped, punsafeCoerce unwrapped) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 3390fbfc..ed1cb6d0 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -53,7 +53,7 @@ import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprI import Plutarch.Extra.List (pnotNull) import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map.Unsorted qualified as PUM -import Plutarch.Extra.TermCont (pguardC, pletC) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), PConstantDecl, @@ -691,7 +691,7 @@ proposalDatumValid :: Proposal -> Term s (Agora.Proposal.PProposalDatum :--> PBo proposalDatumValid proposal = phoistAcyclic $ plam $ \datum' -> unTermCont $ do - datum <- tcont $ pletFields @'["effects", "cosigners", "votes"] $ datum' + datum <- pletFieldsC @'["effects", "cosigners", "votes"] $ datum' let atLeastOneNegativeResult = pany diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 6d926048..076b3253 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -95,9 +95,9 @@ proposalPolicy :: proposalPolicy (AssetClass (govCs, govTn)) = plam $ \_redeemer ctx' -> unTermCont $ do PScriptContext ctx' <- pmatchC ctx' - ctx <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' PTxInfo txInfo' <- pmatchC $ pfromData ctx.txInfo - txInfo <- tcont $ pletFields @'["inputs", "mint"] txInfo' + txInfo <- pletFieldsC @'["inputs", "mint"] txInfo' PMinting _ownSymbol <- pmatchC $ pfromData ctx.purpose let inputs = txInfo.inputs @@ -151,24 +151,23 @@ proposalValidator :: Proposal -> ClosedTerm PValidator proposalValidator proposal = plam $ \datum redeemer ctx' -> unTermCont $ do PScriptContext ctx' <- pmatchC ctx' - ctx <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo <- pletC $ pfromData ctx.txInfo PTxInfo txInfo' <- pmatchC txInfo txInfoF <- - tcont $ - pletFields - @'[ "inputs" - , "outputs" - , "mint" - , "datums" - , "signatories" - , "validRange" - ] - txInfo' + pletFieldsC + @'[ "inputs" + , "outputs" + , "mint" + , "datums" + , "signatories" + , "validRange" + ] + txInfo' PSpending ((pfield @"_0" #) -> txOutRef) <- pmatchC $ pfromData ctx.purpose PJust ((pfield @"resolved" #) -> txOut) <- pmatchC $ pfindTxInByTxOutRef # txOutRef # txInfoF.inputs - txOutF <- tcont $ pletFields @'["address", "value"] $ txOut + txOutF <- pletFieldsC @'["address", "value"] $ txOut (pfromData -> proposalDatum, _) <- ptryFromC @(PAsData PProposalDatum) datum @@ -176,18 +175,17 @@ proposalValidator proposal = ptryFromC @(PAsData PProposalRedeemer) redeemer proposalF <- - tcont $ - pletFields - @'[ "proposalId" - , "effects" - , "status" - , "cosigners" - , "thresholds" - , "votes" - , "timingConfig" - , "startingTime" - ] - proposalDatum + pletFieldsC + @'[ "proposalId" + , "effects" + , "status" + , "cosigners" + , "thresholds" + , "votes" + , "timingConfig" + , "startingTime" + ] + proposalDatum ownAddress <- pletC $ txOutF.address @@ -211,7 +209,7 @@ proposalValidator proposal = mustBePJust # "Own output should be present" #$ pfind # plam ( \input -> unTermCont $ do - inputF <- tcont $ pletFields @'["address", "value", "datumHash"] input + inputF <- pletFieldsC @'["address", "value", "datumHash"] input -- TODO: this is highly inefficient: O(n) for every output, -- Maybe we can cache the sorted datum map? diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index 1a821299..bf642e7b 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -44,7 +44,7 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (..), ) -import Plutarch.Extra.TermCont (pguardC, pmatchC) +import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), PConstantDecl, @@ -308,11 +308,11 @@ currentProposalTime :: forall (s :: S). Term s (PPOSIXTimeRange :--> PProposalTi currentProposalTime = phoistAcyclic $ plam $ \iv -> unTermCont $ do PInterval iv' <- pmatchC iv - ivf <- tcont $ pletFields @'["from", "to"] iv' + ivf <- pletFieldsC @'["from", "to"] iv' PLowerBound lb <- pmatchC ivf.from PUpperBound ub <- pmatchC ivf.to - lbf <- tcont $ pletFields @'["_0", "_1"] lb - ubf <- tcont $ pletFields @'["_0", "_1"] ub + lbf <- pletFieldsC @'["_0", "_1"] lb + ubf <- pletFieldsC @'["_0", "_1"] ub pure $ pcon $ PProposalTime diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index ab41ab4a..6ab4e63c 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -327,7 +327,7 @@ findStakeOwnedBy = phoistAcyclic $ PNothing -> pcon PNothing PJust (pfromData -> v) -> unTermCont $ do let txOut = pfield @"resolved" # pto v - txOutF <- tcont $ pletFields @'["datumHash"] $ txOut + txOutF <- pletFieldsC @'["datumHash"] $ txOut pure $ pmatch txOutF.datumHash $ \case PDNothing _ -> pcon PNothing diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index be546f85..e8b5e465 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -31,7 +31,7 @@ import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf, pvalueOf) import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisTokenSpent, ptxSignedBy, pvalueSpent) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pgeqByClass', pgeqBySymbol, psymbolValueOf) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) -import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC, ptryFromC) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.Internal (punsafeCoerce) import Plutarch.Numeric.Additive (AdditiveMonoid (zero), AdditiveSemigroup ((+))) import Plutarch.SafeMoney ( @@ -66,11 +66,11 @@ stakePolicy :: ClosedTerm PMintingPolicy stakePolicy gtClassRef = plam $ \_redeemer ctx' -> unTermCont $ do - ctx <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo <- pletC $ ctx.txInfo let _a :: Term _ PTxInfo _a = txInfo - txInfoF <- tcont $ pletFields @'["mint", "inputs", "outputs", "signatories", "datums"] txInfo + txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "signatories", "datums"] txInfo PMinting ownSymbol' <- pmatchC $ pfromData ctx.purpose ownSymbol <- pletC $ pfield @"_0" # ownSymbol' @@ -88,7 +88,7 @@ stakePolicy gtClassRef = pany # plam ( \((pfield @"resolved" #) -> txOut) -> unTermCont $ do - txOutF <- tcont $ pletFields @'["value", "datumHash"] txOut + txOutF <- pletFieldsC @'["value", "datumHash"] txOut pure $ pif (psymbolValueOf # ownSymbol # txOutF.value #== 1) @@ -116,7 +116,7 @@ stakePolicy gtClassRef = #$ pfind # plam ( \output -> unTermCont $ do - outputF <- tcont $ pletFields @'["value", "address"] output + outputF <- pletFieldsC @'["value", "address"] output pure $ pmatch (pfromData $ pfield @"credential" # outputF.address) $ \case -- Should pay to a script address @@ -129,12 +129,10 @@ stakePolicy gtClassRef = # pfromData txInfoF.outputs outputF <- - tcont $ - pletFields @'["value", "address", "datumHash"] scriptOutputWithStakeST + pletFieldsC @'["value", "address", "datumHash"] scriptOutputWithStakeST datumF <- - tcont $ - pletFields @'["owner", "stakedAmount"] $ - mustFindDatum' @PStakeDatum # outputF.datumHash # txInfoF.datums + pletFieldsC @'["owner", "stakedAmount"] $ + mustFindDatum' @PStakeDatum # outputF.datumHash # txInfoF.datums let hasExpectedStake = ptraceIfFalse "Stake ouput has expected amount of stake token" $ @@ -208,16 +206,16 @@ stakePolicy gtClassRef = stakeValidator :: Stake -> ClosedTerm PValidator stakeValidator stake = plam $ \datum redeemer ctx' -> unTermCont $ do - ctx <- tcont $ pletFields @'["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo <- pletC $ pfromData ctx.txInfo - txInfoF <- tcont $ pletFields @'["mint", "inputs", "outputs", "signatories", "datums"] txInfo + txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "signatories", "datums"] txInfo (pfromData -> stakeRedeemer, _) <- ptryFromC redeemer -- TODO: Use PTryFrom let stakeDatum' :: Term _ PStakeDatum stakeDatum' = pfromData $ punsafeCoerce datum - stakeDatum <- tcont $ pletFields @'["owner", "stakedAmount", "lockedBy"] stakeDatum' + stakeDatum <- pletFieldsC @'["owner", "stakedAmount", "lockedBy"] stakeDatum' PSpending txOutRef <- pmatchC $ pfromData ctx.purpose @@ -264,7 +262,7 @@ stakeValidator stake = mustBePJust # "Own output should be present" #$ pfind # plam ( \input -> unTermCont $ do - inputF <- tcont $ pletFields @'["address", "value"] input + inputF <- pletFieldsC @'["address", "value"] input pure $ inputF.address #== ownAddress #&& psymbolValueOf # stCurrencySymbol # inputF.value #== 1 diff --git a/agora/Agora/Treasury.hs b/agora/Agora/Treasury.hs index 85f4869b..1af783ec 100644 --- a/agora/Agora/Treasury.hs +++ b/agora/Agora/Treasury.hs @@ -20,7 +20,7 @@ import Plutarch.DataRepr ( DerivePConstantViaData (..), PIsDataReprInstances (PIsDataReprInstances), ) -import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC, ptryFromC) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl) import Plutarch.TryFrom () import PlutusLedgerApi.V1.Value (CurrencySymbol) @@ -108,7 +108,7 @@ treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do (treasuryRedeemer, _) <- ptryFromC redeemer -- plet required fields from script context. - ctx <- tcont $ pletFields @["txInfo", "purpose"] ctx' + ctx <- pletFieldsC @["txInfo", "purpose"] ctx' -- Ensure that script is for burning i.e. minting a negative amount. PMinting _ <- pmatchC ctx.purpose @@ -118,7 +118,7 @@ treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do -- Get the minted value from txInfo. txInfo' <- pletC ctx.txInfo - txInfo <- tcont $ pletFields @'["mint"] txInfo' + txInfo <- pletFieldsC @'["mint"] txInfo' let mint :: Term _ (PValue _ _) mint = txInfo.mint diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 02ef1eb6..2b24a508 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -43,7 +43,7 @@ import Plutarch.Api.V1.ScriptContext (pfindDatum) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Builtin (pforgetData) import Plutarch.Extra.List (plookupTuple) -import Plutarch.Extra.TermCont (pletC, pmatchC) +import Plutarch.Extra.TermCont (pletC, pmatchC, ptryFromC) import PlutusLedgerApi.V1 ( Address (..), Credential (..), @@ -162,7 +162,7 @@ mustFindDatum' = phoistAcyclic $ plam $ \mdh datums -> unTermCont $ do let dh = mustBePDJust # "Given TxOut dones't have a datum" # mdh dt = mustBePJust # "Datum not found in the transaction" #$ plookupTuple # dh # datums - (d, _) <- tcont $ ptryFrom $ pforgetData $ pdata dt + (d, _) <- ptryFromC $ pforgetData $ pdata dt pure $ pfromData d {- | Extract the value stored in a PMaybe container. From c1e0e01d6c9743eedfa22d39c2b2d0ad64c8a4fe Mon Sep 17 00:00:00 2001 From: Seungheon Oh Date: Mon, 27 Jun 2022 14:46:02 -0500 Subject: [PATCH 02/78] Hydra --- .github/workflows/integrate.yaml | 78 -------------------------------- flake.nix | 1 + 2 files changed, 1 insertion(+), 78 deletions(-) delete mode 100644 .github/workflows/integrate.yaml diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml deleted file mode 100644 index bea599ec..00000000 --- a/.github/workflows/integrate.yaml +++ /dev/null @@ -1,78 +0,0 @@ -on: - push: - paths: - - ".github/workflows/integrate.yaml" - - "**.hs" - - "**.nix" - - "flake.lock" - - "agora.cabal" - branches: - - main - - staging - pull_request: - paths: - - ".github/workflows/integrate.yaml" - - "**.hs" - - "**.nix" - - "flake.lock" - - "agora.cabal" -jobs: - flake: - runs-on: ubuntu-latest - strategy: - matrix: - tasks: - - agora - - formatCheck - - benchCheck - - agora-test - steps: - - uses: actions/checkout@v2.4.0 - - - uses: cachix/install-nix-action@v16 - name: Set up Nix and IOHK caches - with: - nix_path: nixpkgs=channel:nixos-unstable - extra_nix_config: | - trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= - substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/ - experimental-features = nix-command flakes - - - uses: cachix/cachix-action@v10 - with: - name: mlabs - authToken: ${{ secrets.CACHIX_KEY }} - - - run: nix build .#checks.x86_64-linux.${{ matrix.tasks }} - name: Run '${{ matrix.tasks }}' from flake.nix - - haddock: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2.4.0 - - - uses: cachix/install-nix-action@v16 - name: Set up Nix and IOHK caches - with: - nix_path: nixpkgs=channel:nixos-unstable - extra_nix_config: | - trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= - substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/ - experimental-features = nix-command flakes - - - uses: cachix/cachix-action@v10 - with: - name: mlabs - authToken: ${{ secrets.CACHIX_KEY }} - - - run: nix build .#packages.x86_64-linux.haddock - name: Run 'haddock' from flake.nix - - # This publishes the haddock result to the branch 'gh-pages', - # which is set to automatically deploy to https://liqwid-labs.github.io/agora/. - - name: Publish Documentation - uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/main' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./result/agora/html diff --git a/flake.nix b/flake.nix index 2573c319..29882363 100644 --- a/flake.nix +++ b/flake.nix @@ -249,5 +249,6 @@ touch $out ''); devShell = perSystem (system: self.flake.${system}.devShell); + hydraJobs.required = self.checks.x86_64-linux.default; }; } From 01e4222026ad1ab542fadcdb0c2812b1c547f047 Mon Sep 17 00:00:00 2001 From: Seungheon Oh Date: Mon, 27 Jun 2022 14:57:14 -0500 Subject: [PATCH 03/78] Hydra --- flake.nix | 1 - 1 file changed, 1 deletion(-) diff --git a/flake.nix b/flake.nix index 29882363..2573c319 100644 --- a/flake.nix +++ b/flake.nix @@ -249,6 +249,5 @@ touch $out ''); devShell = perSystem (system: self.flake.${system}.devShell); - hydraJobs.required = self.checks.x86_64-linux.default; }; } From 3a62b962481913efba679b95f512eabd1d6db9ca Mon Sep 17 00:00:00 2001 From: Seungheon Oh Date: Tue, 28 Jun 2022 09:06:30 -0500 Subject: [PATCH 04/78] Restore GH actions as Hydra fails --- .github/workflows/integrate.yaml | 76 ++++++++++++++++++++++++++++++++ 1 file changed, 76 insertions(+) create mode 100644 .github/workflows/integrate.yaml diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml new file mode 100644 index 00000000..47f58863 --- /dev/null +++ b/.github/workflows/integrate.yaml @@ -0,0 +1,76 @@ +on: + push: + paths: + - ".github/workflows/integrate.yaml" + - "**.hs" + - "**.nix" + - "flake.lock" + - "agora.cabal" + branches: + - main + - staging + pull_request: + paths: + - ".github/workflows/integrate.yaml" + - "**.hs" + - "**.nix" + - "flake.lock" + - "agora.cabal" +jobs: + flake: + runs-on: ubuntu-latest + strategy: + matrix: + tasks: + - agora + - formatCheck + - benchCheck + - agora-test + steps: + - uses: actions/checkout@v2.4.0 + + - uses: cachix/install-nix-action@v16 + name: Set up Nix and IOHK caches + with: + nix_path: nixpkgs=channel:nixos-unstable + extra_nix_config: | + trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= + substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/ + experimental-features = nix-command flakes + - uses: cachix/cachix-action@v10 + with: + name: mlabs + authToken: ${{ secrets.CACHIX_KEY }} + + - run: nix build .#checks.x86_64-linux.${{ matrix.tasks }} + name: Run '${{ matrix.tasks }}' from flake.nix + + haddock: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v2.4.0 + + - uses: cachix/install-nix-action@v16 + name: Set up Nix and IOHK caches + with: + nix_path: nixpkgs=channel:nixos-unstable + extra_nix_config: | + trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= + substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/ + experimental-features = nix-command flakes + - uses: cachix/cachix-action@v10 + with: + name: mlabs + authToken: ${{ secrets.CACHIX_KEY }} + + - run: nix build .#packages.x86_64-linux.haddock + name: Run 'haddock' from flake.nix + + # This publishes the haddock result to the branch 'gh-pages', + # which is set to automatically deploy to https://liqwid-labs.github.io/agora/. + - name: Publish Documentation + uses: peaceiris/actions-gh-pages@v3 + if: github.ref == 'refs/heads/main' + with: + github_token: ${{ secrets.GITHUB_TOKEN }} + publish_dir: ./result/agora/html \ No newline at end of file From e86ae1246abe138b64a9dc5e57420005878900c8 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 23 Jun 2022 18:27:24 +0800 Subject: [PATCH 05/78] bump `liqwid-plutarch-extra` --- flake.lock | 1824 ++++++++++++++++++++++++++++++++++++++++++---------- flake.nix | 2 +- 2 files changed, 1481 insertions(+), 345 deletions(-) diff --git a/flake.lock b/flake.lock index a252426c..f987a5d6 100644 --- a/flake.lock +++ b/flake.lock @@ -32,6 +32,22 @@ "type": "github" } }, + "HTTP_11": { + "flake": false, + "locked": { + "lastModified": 1451647621, + "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", + "owner": "phadej", + "repo": "HTTP", + "rev": "9bc0996d412fef1787449d841277ef663ad9a915", + "type": "github" + }, + "original": { + "owner": "phadej", + "repo": "HTTP", + "type": "github" + } + }, "HTTP_2": { "flake": false, "locked": { @@ -210,6 +226,23 @@ "type": "github" } }, + "cabal-32_11": { + "flake": false, + "locked": { + "lastModified": 1603716527, + "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", + "owner": "haskell", + "repo": "cabal", + "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.2", + "repo": "cabal", + "type": "github" + } + }, "cabal-32_2": { "flake": false, "locked": { @@ -380,6 +413,23 @@ "type": "github" } }, + "cabal-34_11": { + "flake": false, + "locked": { + "lastModified": 1640353650, + "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=", + "owner": "haskell", + "repo": "cabal", + "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.4", + "repo": "cabal", + "type": "github" + } + }, "cabal-34_2": { "flake": false, "locked": { @@ -550,6 +600,23 @@ "type": "github" } }, + "cabal-36_11": { + "flake": false, + "locked": { + "lastModified": 1641652457, + "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=", + "owner": "haskell", + "repo": "cabal", + "rev": "f27667f8ec360c475027dcaee0138c937477b070", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.6", + "repo": "cabal", + "type": "github" + } + }, "cabal-36_2": { "flake": false, "locked": { @@ -703,6 +770,22 @@ } }, "cardano-base_10": { + "flake": false, + "locked": { + "lastModified": 1652788515, + "narHash": "sha256-l0KgomRi6YhEoOlFnBYEXhnZO2+PW68rhfUrbMXjhCQ=", + "owner": "input-output-hk", + "repo": "cardano-base", + "rev": "631cb6cf1fa01ab346233b610a38b3b4cba6e6ab", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-base", + "type": "github" + } + }, + "cardano-base_11": { "flake": false, "locked": { "lastModified": 1638456794, @@ -880,6 +963,23 @@ "type": "github" } }, + "cardano-crypto_11": { + "flake": false, + "locked": { + "lastModified": 1621376239, + "narHash": "sha256-oxIOVlgm07FAEmgGRF1C2me9TXqVxQulEOcJ22zpTRs=", + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + } + }, "cardano-crypto_2": { "flake": false, "locked": { @@ -1034,6 +1134,23 @@ } }, "cardano-prelude_10": { + "flake": false, + "locked": { + "lastModified": 1653997332, + "narHash": "sha256-E+YSfUsvxdoOr7n7fz4xd7zb4z8XBRGNYOKipc2A1pw=", + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + } + }, + "cardano-prelude_11": { "flake": false, "locked": { "lastModified": 1641566029, @@ -1218,6 +1335,22 @@ "type": "github" } }, + "cardano-repo-tool_11": { + "flake": false, + "locked": { + "lastModified": 1624584417, + "narHash": "sha256-YSepT97PagR/1jTYV/Yer8a2GjFe9+tTwaTCHxuK50M=", + "owner": "input-output-hk", + "repo": "cardano-repo-tool", + "rev": "30e826ed8f00e3e154453b122a6f3d779b2f73ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-repo-tool", + "type": "github" + } + }, "cardano-repo-tool_2": { "flake": false, "locked": { @@ -1378,6 +1511,22 @@ "type": "github" } }, + "cardano-shell_11": { + "flake": false, + "locked": { + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-shell", + "type": "github" + } + }, "cardano-shell_2": { "flake": false, "locked": { @@ -1544,6 +1693,28 @@ "type": "github" } }, + "ema_10": { + "inputs": { + "flake-compat": "flake-compat_19", + "flake-utils": "flake-utils_29", + "lint-utils": "lint-utils", + "nixpkgs": "nixpkgs_49" + }, + "locked": { + "lastModified": 1650932571, + "narHash": "sha256-rdpfJ+10a1uBPtHMNoAcpDE183RzpILRpsMgxj/YJek=", + "owner": "srid", + "repo": "ema", + "rev": "05c8a2127391ee4b593fa6541bc9078eb44ad10f", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "multisite", + "repo": "ema", + "type": "github" + } + }, "ema_2": { "inputs": { "flake-compat": "flake-compat_3", @@ -1568,8 +1739,8 @@ "ema_3": { "inputs": { "flake-compat": "flake-compat_5", - "flake-utils": "flake-utils_8", - "nixpkgs": "nixpkgs_14" + "flake-utils": "flake-utils_7", + "nixpkgs": "nixpkgs_11" }, "locked": { "lastModified": 1653742730, @@ -1695,15 +1866,14 @@ "inputs": { "flake-compat": "flake-compat_17", "flake-utils": "flake-utils_26", - "lint-utils": "lint-utils", "nixpkgs": "nixpkgs_44" }, "locked": { - "lastModified": 1650932571, - "narHash": "sha256-rdpfJ+10a1uBPtHMNoAcpDE183RzpILRpsMgxj/YJek=", + "lastModified": 1653742730, + "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", "owner": "srid", "repo": "ema", - "rev": "05c8a2127391ee4b593fa6541bc9078eb44ad10f", + "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", "type": "github" }, "original": { @@ -1757,12 +1927,61 @@ "type": "github" } }, + "emanote_10": { + "inputs": { + "ema": "ema_10", + "flake-compat": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "emanote", + "ema", + "flake-compat" + ], + "flake-utils": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "emanote", + "ema", + "flake-utils" + ], + "heist": "heist_10", + "ixset-typed": "ixset-typed_10", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "emanote", + "ema", + "nixpkgs" + ], + "pandoc-link-context": "pandoc-link-context_10", + "pathtree": "pathtree", + "tailwind-haskell": "tailwind-haskell_10", + "unionmount": "unionmount" + }, + "locked": { + "lastModified": 1651699367, + "narHash": "sha256-f+whlGwxzv5Lcem+rxBgIgnkU+KcckogtWbRwZ6nM4I=", + "owner": "srid", + "repo": "emanote", + "rev": "2b6558fde2999ec22f645cb95322995b780f09f1", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "master", + "repo": "emanote", + "type": "github" + } + }, "emanote_2": { "inputs": { "ema": "ema_2", "flake-compat": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -1770,7 +1989,7 @@ ], "flake-utils": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -1780,7 +1999,7 @@ "ixset-typed": "ixset-typed_2", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -1808,14 +2027,16 @@ "inputs": { "ema": "ema_3", "flake-compat": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -1824,7 +2045,8 @@ "heist": "heist_3", "ixset-typed": "ixset-typed_3", "nixpkgs": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -1852,14 +2074,14 @@ "inputs": { "ema": "ema_4", "flake-compat": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -1868,7 +2090,7 @@ "heist": "heist_4", "ixset-typed": "ixset-typed_4", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -1896,14 +2118,14 @@ "inputs": { "ema": "ema_5", "flake-compat": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -1912,7 +2134,7 @@ "heist": "heist_5", "ixset-typed": "ixset-typed_5", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -1940,16 +2162,14 @@ "inputs": { "ema": "ema_6", "flake-compat": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -1958,8 +2178,7 @@ "heist": "heist_6", "ixset-typed": "ixset-typed_6", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -1989,7 +2208,6 @@ "flake-compat": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -1998,7 +2216,6 @@ "flake-utils": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2009,7 +2226,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2038,6 +2254,8 @@ "ema": "ema_8", "flake-compat": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2045,6 +2263,8 @@ ], "flake-utils": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2054,6 +2274,8 @@ "ixset-typed": "ixset-typed_8", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2082,7 +2304,6 @@ "ema": "ema_9", "flake-compat": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2090,7 +2311,6 @@ ], "flake-utils": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2100,23 +2320,20 @@ "ixset-typed": "ixset-typed_9", "nixpkgs": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "emanote", "ema", "nixpkgs" ], "pandoc-link-context": "pandoc-link-context_9", - "pathtree": "pathtree", - "tailwind-haskell": "tailwind-haskell_9", - "unionmount": "unionmount" + "tailwind-haskell": "tailwind-haskell_9" }, "locked": { - "lastModified": 1651699367, - "narHash": "sha256-f+whlGwxzv5Lcem+rxBgIgnkU+KcckogtWbRwZ6nM4I=", + "lastModified": 1653742875, + "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", "owner": "srid", "repo": "emanote", - "rev": "2b6558fde2999ec22f645cb95322995b780f09f1", + "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", "type": "github" }, "original": { @@ -2255,6 +2472,38 @@ } }, "flake-compat_17": { + "flake": false, + "locked": { + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_18": { + "flake": false, + "locked": { + "lastModified": 1641205782, + "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_19": { "flake": false, "locked": { "lastModified": 1648199409, @@ -2270,7 +2519,7 @@ "type": "github" } }, - "flake-compat_18": { + "flake-compat_2": { "flake": false, "locked": { "lastModified": 1641205782, @@ -2286,7 +2535,7 @@ "type": "github" } }, - "flake-compat_19": { + "flake-compat_20": { "flake": false, "locked": { "lastModified": 1641205782, @@ -2302,7 +2551,7 @@ "type": "github" } }, - "flake-compat_2": { + "flake-compat_21": { "flake": false, "locked": { "lastModified": 1641205782, @@ -2318,7 +2567,7 @@ "type": "github" } }, - "flake-compat_20": { + "flake-compat_22": { "flake": false, "locked": { "lastModified": 1627913399, @@ -2729,6 +2978,53 @@ } }, "flake-utils_26": { + "locked": { + "lastModified": 1652776076, + "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "v1.0.0", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_27": { + "locked": { + "lastModified": 1652776076, + "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "v1.0.0", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_28": { + "locked": { + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_29": { "locked": { "lastModified": 1648297722, "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", @@ -2743,7 +3039,7 @@ "type": "github" } }, - "flake-utils_27": { + "flake-utils_3": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -2758,13 +3054,13 @@ "type": "github" } }, - "flake-utils_28": { + "flake-utils_30": { "locked": { - "lastModified": 1642700792, - "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -2773,7 +3069,7 @@ "type": "github" } }, - "flake-utils_29": { + "flake-utils_31": { "locked": { "lastModified": 1642700792, "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", @@ -2788,13 +3084,13 @@ "type": "github" } }, - "flake-utils_3": { + "flake-utils_32": { "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "lastModified": 1642700792, + "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", "owner": "numtide", "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", "type": "github" }, "original": { @@ -2803,7 +3099,7 @@ "type": "github" } }, - "flake-utils_30": { + "flake-utils_33": { "locked": { "lastModified": 1631561581, "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", @@ -2818,7 +3114,7 @@ "type": "github" } }, - "flake-utils_31": { + "flake-utils_34": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -2882,15 +3178,16 @@ }, "flake-utils_7": { "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "lastModified": 1652776076, + "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", "owner": "numtide", "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", "type": "github" }, "original": { "owner": "numtide", + "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -2913,16 +3210,15 @@ }, "flake-utils_9": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -2944,6 +3240,22 @@ } }, "flat_10": { + "flake": false, + "locked": { + "lastModified": 1651403785, + "narHash": "sha256-g+jGep1IXdw4q01W67J6f6OODY91QzIlW1+Eu8pR+u0=", + "owner": "Quid2", + "repo": "flat", + "rev": "559617e058098b776b431e2a67346ad3adea2440", + "type": "github" + }, + "original": { + "owner": "Quid2", + "repo": "flat", + "type": "github" + } + }, + "flat_11": { "flake": false, "locked": { "lastModified": 1641898475, @@ -3139,6 +3451,23 @@ "type": "github" } }, + "ghc-8.6.5-iohk_11": { + "flake": false, + "locked": { + "lastModified": 1600920045, + "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=", + "owner": "input-output-hk", + "repo": "ghc", + "rev": "95713a6ecce4551240da7c96b6176f980af75cae", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "ref": "release/8.6.5-iohk", + "repo": "ghc", + "type": "github" + } + }, "ghc-8.6.5-iohk_2": { "flake": false, "locked": { @@ -3307,6 +3636,22 @@ "type": "github" } }, + "gitignore-nix_11": { + "flake": false, + "locked": { + "lastModified": 1611672876, + "narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "211907489e9f198594c0eb0ca9256a1949c9d412", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "gitignore-nix_2": { "flake": false, "locked": { @@ -3468,6 +3813,22 @@ } }, "hackage-nix_10": { + "flake": false, + "locked": { + "lastModified": 1651108473, + "narHash": "sha256-zHGCnBdwKvrcYanjf3GARTWF8V2pyJl1QNONUNZSoc0=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "dbab3b292c3400d028a2257e3acd2ac0249da774", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage-nix_11": { "flake": false, "locked": { "lastModified": 1644369434, @@ -3612,6 +3973,22 @@ } }, "hackage_10": { + "flake": false, + "locked": { + "lastModified": 1654046237, + "narHash": "sha256-FpM9zE+Q+WrvCiaZBCg5U1g0bYpiZOCxY8V3R5ydBu8=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "eeae1790b9c6a880d96e4a7214fdf0a73bdd6fc0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage_11": { "flake": false, "locked": { "lastModified": 1644887696, @@ -3921,11 +4298,11 @@ "haskell-language-server_19": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -3953,15 +4330,16 @@ "haskell-language-server_20": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -3969,16 +4347,15 @@ "haskell-language-server_21": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4035,11 +4412,11 @@ "haskell-language-server_25": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", "type": "github" }, "original": { @@ -4051,16 +4428,15 @@ "haskell-language-server_26": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4068,15 +4444,16 @@ "haskell-language-server_27": { "flake": false, "locked": { - "lastModified": 1655140576, - "narHash": "sha256-mHJuIk1ElmgPxvEUO2Y3E6T674F2tO5SS/uixf4R2fM=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8a5840a020048c74285f9997b9b02b9b04c658c6", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4084,11 +4461,11 @@ "haskell-language-server_28": { "flake": false, "locked": { - "lastModified": 1645014262, - "narHash": "sha256-f49So1teiroV+S7sbGTK4AhzUOXpoiQ26/fTjdIKkqc=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "96ea854debd92f9a54e2270b9b9a080c0ce6f3d1", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -4100,16 +4477,16 @@ "haskell-language-server_29": { "flake": false, "locked": { - "lastModified": 1643835246, - "narHash": "sha256-5LQHcQmi3mUGRgJu+X/m3jeM3kdkYjLD+KwgnxBlbeU=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "024ddc8b3904f8b8e8fe67ba6b9ebd8a4bd7ce76", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.6.1.1", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4131,6 +4508,55 @@ "type": "github" } }, + "haskell-language-server_30": { + "flake": false, + "locked": { + "lastModified": 1655140576, + "narHash": "sha256-mHJuIk1ElmgPxvEUO2Y3E6T674F2tO5SS/uixf4R2fM=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "8a5840a020048c74285f9997b9b02b9b04c658c6", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_31": { + "flake": false, + "locked": { + "lastModified": 1645014262, + "narHash": "sha256-f49So1teiroV+S7sbGTK4AhzUOXpoiQ26/fTjdIKkqc=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "96ea854debd92f9a54e2270b9b9a080c0ce6f3d1", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_32": { + "flake": false, + "locked": { + "lastModified": 1643835246, + "narHash": "sha256-5LQHcQmi3mUGRgJu+X/m3jeM3kdkYjLD+KwgnxBlbeU=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "024ddc8b3904f8b8e8fe67ba6b9ebd8a4bd7ce76", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "1.6.1.1", + "repo": "haskell-language-server", + "type": "github" + } + }, "haskell-language-server_4": { "flake": false, "locked": { @@ -4183,11 +4609,11 @@ "haskell-language-server_7": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", "type": "github" }, "original": { @@ -4199,16 +4625,15 @@ "haskell-language-server_8": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4216,15 +4641,16 @@ "haskell-language-server_9": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4296,17 +4722,44 @@ "type": "github" } }, + "haskell-nix-extra-hackage_10": { + "inputs": { + "haskell-nix": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-safe-money", + "plutarch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1653405678, + "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "type": "github" + } + }, "haskell-nix-extra-hackage_2": { "inputs": { "haskell-nix": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix" ], "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "nixpkgs" ] @@ -4328,10 +4781,14 @@ "haskell-nix-extra-hackage_3": { "inputs": { "haskell-nix": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -4353,12 +4810,10 @@ "haskell-nix-extra-hackage_4": { "inputs": { "haskell-nix": [ - "plutarch-context-builder", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-context-builder", "plutarch", "nixpkgs" ] @@ -4380,12 +4835,12 @@ "haskell-nix-extra-hackage_5": { "inputs": { "haskell-nix": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "nixpkgs" ] @@ -4407,12 +4862,12 @@ "haskell-nix-extra-hackage_6": { "inputs": { "haskell-nix": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "nixpkgs" ] @@ -4434,14 +4889,12 @@ "haskell-nix-extra-hackage_7": { "inputs": { "haskell-nix": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -4465,14 +4918,12 @@ "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -4495,11 +4946,15 @@ "inputs": { "haskell-nix": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -4548,7 +5003,7 @@ "hydra": "hydra_6", "nix-tools": "nix-tools_6", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4604,8 +5059,7 @@ "hydra": "hydra_7", "nix-tools": "nix-tools_7", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4663,7 +5117,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4720,6 +5173,8 @@ "nix-tools": "nix-tools_9", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4768,14 +5223,14 @@ "cabal-34": "cabal-34_10", "cabal-36": "cabal-36_10", "cardano-shell": "cardano-shell_10", - "flake-utils": "flake-utils_31", + "flake-utils": "flake-utils_28", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_10", "hackage": "hackage_10", "hpc-coveralls": "hpc-coveralls_10", + "hydra": "hydra_10", "nix-tools": "nix-tools_10", "nixpkgs": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4788,16 +5243,15 @@ "stackage": "stackage_10" }, "locked": { - "lastModified": 1644944726, - "narHash": "sha256-jJWdP/3Ne1y1akC3m9rSO5ItRoBc4UTdVQZBCuPmmrM=", - "owner": "L-as", + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "45c583b5580c130487eb5a342679f0bdbc2b23fc", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", "type": "github" }, "original": { - "owner": "L-as", - "ref": "master", + "owner": "input-output-hk", "repo": "haskell.nix", "type": "github" } @@ -4819,6 +5273,63 @@ } }, "haskell-nix_20": { + "flake": false, + "locked": { + "lastModified": 1651151636, + "narHash": "sha256-WdMP9IMB5kByT0zimDuCYZF/dinRB104H8iDTG/c1Eo=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "f707aa2e75c0d33473166abc61c0b43ac6e107c0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_21": { + "inputs": { + "HTTP": "HTTP_11", + "cabal-32": "cabal-32_11", + "cabal-34": "cabal-34_11", + "cabal-36": "cabal-36_11", + "cardano-shell": "cardano-shell_11", + "flake-utils": "flake-utils_34", + "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_11", + "hackage": "hackage_11", + "hpc-coveralls": "hpc-coveralls_11", + "nix-tools": "nix-tools_11", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-2003": "nixpkgs-2003_11", + "nixpkgs-2105": "nixpkgs-2105_11", + "nixpkgs-2111": "nixpkgs-2111_22", + "nixpkgs-unstable": "nixpkgs-unstable_11", + "old-ghc-nix": "old-ghc-nix_11", + "stackage": "stackage_11" + }, + "locked": { + "lastModified": 1644944726, + "narHash": "sha256-jJWdP/3Ne1y1akC3m9rSO5ItRoBc4UTdVQZBCuPmmrM=", + "owner": "L-as", + "repo": "haskell.nix", + "rev": "45c583b5580c130487eb5a342679f0bdbc2b23fc", + "type": "github" + }, + "original": { + "owner": "L-as", + "ref": "master", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_22": { "flake": false, "locked": { "lastModified": 1629380841, @@ -4849,7 +5360,7 @@ "nix-tools": "nix-tools_2", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4898,13 +5409,15 @@ "cabal-34": "cabal-34_3", "cabal-36": "cabal-36_3", "cardano-shell": "cardano-shell_3", - "flake-utils": "flake-utils_7", + "flake-utils": "flake-utils_9", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_3", "hackage": "hackage_3", "hpc-coveralls": "hpc-coveralls_3", "hydra": "hydra_3", "nix-tools": "nix-tools_3", "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -4960,7 +5473,6 @@ "hydra": "hydra_4", "nix-tools": "nix-tools_4", "nixpkgs": [ - "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5016,7 +5528,7 @@ "hydra": "hydra_5", "nix-tools": "nix-tools_5", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5059,6 +5571,23 @@ "type": "github" } }, + "heist_10": { + "flake": false, + "locked": { + "lastModified": 1649279862, + "narHash": "sha256-YPD7Qv1ZcXM4uAlsZ2P/2CKen4H2OY3VHHGluYFVulg=", + "owner": "srid", + "repo": "heist", + "rev": "085c7ab88b73079de27c8def27d67f03853fde05", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "emanote-release--ghc9", + "repo": "heist", + "type": "github" + } + }, "heist_2": { "flake": false, "locked": { @@ -5181,16 +5710,16 @@ "heist_9": { "flake": false, "locked": { - "lastModified": 1649279862, - "narHash": "sha256-YPD7Qv1ZcXM4uAlsZ2P/2CKen4H2OY3VHHGluYFVulg=", + "lastModified": 1653169917, + "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", "owner": "srid", "repo": "heist", - "rev": "085c7ab88b73079de27c8def27d67f03853fde05", + "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", "type": "github" }, "original": { "owner": "srid", - "ref": "emanote-release--ghc9", + "ref": "emanote", "repo": "heist", "type": "github" } @@ -5215,7 +5744,25 @@ }, "hercules-ci-effects_10": { "inputs": { - "nixpkgs": "nixpkgs_48" + "nixpkgs": "nixpkgs_47" + }, + "locked": { + "lastModified": 1653841712, + "narHash": "sha256-XBF4i1MuIRAEbFpj3Z3fVaYxzNEsYapyENtw3vG+q1I=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "e14d2131b7c81acca3904b584ac45fb72da64dd2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_11": { + "inputs": { + "nixpkgs": "nixpkgs_53" }, "locked": { "lastModified": 1647711660, @@ -5251,7 +5798,7 @@ }, "hercules-ci-effects_3": { "inputs": { - "nixpkgs": "nixpkgs_12" + "nixpkgs": "nixpkgs_14" }, "locked": { "lastModified": 1653841712, @@ -5407,7 +5954,7 @@ "type": "github" } }, - "hpc-coveralls_2": { + "hpc-coveralls_11": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5423,7 +5970,7 @@ "type": "github" } }, - "hpc-coveralls_3": { + "hpc-coveralls_2": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5439,7 +5986,7 @@ "type": "github" } }, - "hpc-coveralls_4": { + "hpc-coveralls_3": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5455,7 +6002,7 @@ "type": "github" } }, - "hpc-coveralls_5": { + "hpc-coveralls_4": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5471,7 +6018,7 @@ "type": "github" } }, - "hpc-coveralls_6": { + "hpc-coveralls_5": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5487,7 +6034,7 @@ "type": "github" } }, - "hpc-coveralls_7": { + "hpc-coveralls_6": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5503,7 +6050,7 @@ "type": "github" } }, - "hpc-coveralls_8": { + "hpc-coveralls_7": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5519,7 +6066,23 @@ "type": "github" } }, - "hpc-coveralls_9": { + "hpc-coveralls_8": { + "flake": false, + "locked": { + "lastModified": 1607498076, + "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", + "type": "github" + }, + "original": { + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "type": "github" + } + }, + "hpc-coveralls_9": { "flake": false, "locked": { "lastModified": 1607498076, @@ -5626,12 +6189,37 @@ "type": "indirect" } }, + "hydra_10": { + "inputs": { + "nix": "nix_10", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix", + "hydra", + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1646878427, + "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "owner": "NixOS", + "repo": "hydra", + "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", + "type": "github" + }, + "original": { + "id": "hydra", + "type": "indirect" + } + }, "hydra_2": { "inputs": { "nix": "nix_2", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "hydra", @@ -5656,6 +6244,8 @@ "inputs": { "nix": "nix_3", "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -5680,7 +6270,6 @@ "inputs": { "nix": "nix_4", "nixpkgs": [ - "plutarch-context-builder", "plutarch", "haskell-nix", "hydra", @@ -5705,7 +6294,7 @@ "inputs": { "nix": "nix_5", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "hydra", @@ -5730,7 +6319,7 @@ "inputs": { "nix": "nix_6", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "hydra", @@ -5755,8 +6344,7 @@ "inputs": { "nix": "nix_7", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -5783,7 +6371,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -5809,6 +6396,8 @@ "nix": "nix_9", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -5992,11 +6581,11 @@ "iohk-nix_19": { "flake": false, "locked": { - "lastModified": 1643251385, - "narHash": "sha256-Czbd69lg0ARSZfC18V6h+gtPMioWDAEVPbiHgL2x9LM=", + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", "owner": "input-output-hk", "repo": "iohk-nix", - "rev": "9d6ee3dcb3482f791e40ed991ad6fc649b343ad4", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", "type": "github" }, "original": { @@ -6037,6 +6626,38 @@ "type": "github" } }, + "iohk-nix_21": { + "flake": false, + "locked": { + "lastModified": 1643251385, + "narHash": "sha256-Czbd69lg0ARSZfC18V6h+gtPMioWDAEVPbiHgL2x9LM=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "9d6ee3dcb3482f791e40ed991ad6fc649b343ad4", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_22": { + "flake": false, + "locked": { + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, "iohk-nix_3": { "flake": false, "locked": { @@ -6165,6 +6786,22 @@ "type": "github" } }, + "ixset-typed_10": { + "flake": false, + "locked": { + "lastModified": 1639657838, + "narHash": "sha256-pI2dzJfkR10CHDEX6TV2E01pqcGkj7kheROw05MRTR8=", + "owner": "well-typed", + "repo": "ixset-typed", + "rev": "6cf16f77ae173311742623e5f0b308a21b337aa7", + "type": "github" + }, + "original": { + "owner": "well-typed", + "repo": "ixset-typed", + "type": "github" + } + }, "ixset-typed_2": { "flake": false, "locked": { @@ -6280,11 +6917,11 @@ "ixset-typed_9": { "flake": false, "locked": { - "lastModified": 1639657838, - "narHash": "sha256-pI2dzJfkR10CHDEX6TV2E01pqcGkj7kheROw05MRTR8=", + "lastModified": 1652177108, + "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", "owner": "well-typed", "repo": "ixset-typed", - "rev": "6cf16f77ae173311742623e5f0b308a21b337aa7", + "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", "type": "github" }, "original": { @@ -6295,7 +6932,7 @@ }, "lint-utils": { "inputs": { - "flake-utils": "flake-utils_27", + "flake-utils": "flake-utils_30", "nixpkgs": [ "plutarch-safe-money", "plutarch-numeric", @@ -6336,26 +6973,27 @@ "nixpkgs-2111": "nixpkgs-2111", "nixpkgs-latest": "nixpkgs-latest", "plutarch": "plutarch", + "plutarch-numeric": "plutarch-numeric", "plutarch-quickcheck": "plutarch-quickcheck" }, "locked": { - "lastModified": 1655824848, - "narHash": "sha256-ZpQ/d+wIO18uE+h6cysPHNpog1f7Qlfy6ul1FSnm2Ek=", + "lastModified": 1656396683, + "narHash": "sha256-Elk16j7kZcO9U9phqrY915rTEqkPchDZ9QydH+VmiC8=", "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "620072d639afd91c84e7347b35df4dfe247546a4", + "rev": "6bcd6068593b00adc4a1afd59b127398ea37d770", "type": "github" }, "original": { "owner": "Liqwid-Labs", - "ref": "main", "repo": "liqwid-plutarch-extra", + "rev": "6bcd6068593b00adc4a1afd59b127398ea37d770", "type": "github" } }, "liqwid-plutarch-extra_2": { "inputs": { - "haskell-language-server": "haskell-language-server_19", + "haskell-language-server": "haskell-language-server_22", "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -6368,9 +7006,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_13", - "nixpkgs-latest": "nixpkgs-latest_13", - "plutarch": "plutarch_7", + "nixpkgs-2111": "nixpkgs-2111_15", + "nixpkgs-latest": "nixpkgs-latest_15", + "plutarch": "plutarch_8", "plutarch-quickcheck": "plutarch-quickcheck_3" }, "locked": { @@ -6404,6 +7042,22 @@ "type": "github" } }, + "lowdown-src_10": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, "lowdown-src_2": { "flake": false, "locked": { @@ -6570,6 +7224,22 @@ } }, "nix-tools_10": { + "flake": false, + "locked": { + "lastModified": 1649424170, + "narHash": "sha256-XgKXWispvv5RCvZzPb+p7e6Hy3LMuRjafKMl7kXzxGw=", + "owner": "input-output-hk", + "repo": "nix-tools", + "rev": "e109c94016e3b6e0db7ed413c793e2d4bdb24aa7", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "nix-tools", + "type": "github" + } + }, + "nix-tools_11": { "flake": false, "locked": { "lastModified": 1644395812, @@ -6713,6 +7383,27 @@ "type": "github" } }, + "nix_10": { + "inputs": { + "lowdown-src": "lowdown-src_10", + "nixpkgs": "nixpkgs_46", + "nixpkgs-regression": "nixpkgs-regression_10" + }, + "locked": { + "lastModified": 1643066034, + "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "owner": "NixOS", + "repo": "nix", + "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, "nix_2": { "inputs": { "lowdown-src": "lowdown-src_2", @@ -6737,7 +7428,7 @@ "nix_3": { "inputs": { "lowdown-src": "lowdown-src_3", - "nixpkgs": "nixpkgs_11", + "nixpkgs": "nixpkgs_13", "nixpkgs-regression": "nixpkgs-regression_3" }, "locked": { @@ -6929,6 +7620,22 @@ "type": "github" } }, + "nixpkgs-2003_11": { + "locked": { + "lastModified": 1620055814, + "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-20.03-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2003_2": { "locked": { "lastModified": 1620055814, @@ -7074,6 +7781,22 @@ } }, "nixpkgs-2105_10": { + "locked": { + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.05-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2105_11": { "locked": { "lastModified": 1642244250, "narHash": "sha256-vWpUEqQdVP4srj+/YLJRTN9vjpTs4je0cdWKXPbDItc=", @@ -7251,11 +7974,11 @@ }, "nixpkgs-2111_11": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1653319070, + "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", "type": "github" }, "original": { @@ -7283,11 +8006,11 @@ }, "nixpkgs-2111_13": { "locked": { - "lastModified": 1654115789, - "narHash": "sha256-k9Qr8dLrmgEn+xIVbneJdQgCYG8FbbqOrTVaExUrLFI=", + "lastModified": 1652364845, + "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bce6d15455f8c15c9ef511368947e7ef789c5316", + "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", "type": "github" }, "original": { @@ -7315,11 +8038,11 @@ }, "nixpkgs-2111_15": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1654115789, + "narHash": "sha256-k9Qr8dLrmgEn+xIVbneJdQgCYG8FbbqOrTVaExUrLFI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "bce6d15455f8c15c9ef511368947e7ef789c5316", "type": "github" }, "original": { @@ -7347,11 +8070,11 @@ }, "nixpkgs-2111_17": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1652364845, + "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", "type": "github" }, "original": { @@ -7411,11 +8134,11 @@ }, "nixpkgs-2111_20": { "locked": { - "lastModified": 1644510859, - "narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=", + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", "type": "github" }, "original": { @@ -7425,13 +8148,13 @@ "type": "github" } }, - "nixpkgs-2111_3": { + "nixpkgs-2111_21": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1653319070, + "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", "type": "github" }, "original": { @@ -7441,13 +8164,13 @@ "type": "github" } }, - "nixpkgs-2111_4": { + "nixpkgs-2111_22": { "locked": { - "lastModified": 1648744337, - "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "lastModified": 1644510859, + "narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3", "type": "github" }, "original": { @@ -7457,13 +8180,13 @@ "type": "github" } }, - "nixpkgs-2111_5": { + "nixpkgs-2111_3": { "locked": { - "lastModified": 1655415671, - "narHash": "sha256-WD7HxxW1m8D/fkV1QlCYlZvnE5gQdg7ckq3myI4gPtE=", + "lastModified": 1653319070, + "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f96729212602f15a6a226d2f27f5de70492ad095", + "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", "type": "github" }, "original": { @@ -7473,7 +8196,7 @@ "type": "github" } }, - "nixpkgs-2111_6": { + "nixpkgs-2111_4": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -7489,13 +8212,45 @@ "type": "github" } }, - "nixpkgs-2111_7": { + "nixpkgs-2111_5": { "locked": { - "lastModified": 1652298859, - "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", + "lastModified": 1652364845, + "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "051448e41537c3463ae776d46115d01afb6c498d", + "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_6": { + "locked": { + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_7": { + "locked": { + "lastModified": 1655415671, + "narHash": "sha256-WD7HxxW1m8D/fkV1QlCYlZvnE5gQdg7ckq3myI4gPtE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f96729212602f15a6a226d2f27f5de70492ad095", "type": "github" }, "original": { @@ -7523,11 +8278,11 @@ }, "nixpkgs-2111_9": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1652298859, + "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "051448e41537c3463ae776d46115d01afb6c498d", "type": "github" }, "original": { @@ -7729,6 +8484,38 @@ "type": "github" } }, + "nixpkgs-latest_20": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, + "nixpkgs-latest_21": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, "nixpkgs-latest_3": { "locked": { "lastModified": 1653918805, @@ -7856,6 +8643,21 @@ "type": "indirect" } }, + "nixpkgs-regression_10": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, "nixpkgs-regression_2": { "locked": { "lastModified": 1643052045, @@ -7993,6 +8795,22 @@ } }, "nixpkgs-unstable_10": { + "locked": { + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable_11": { "locked": { "lastModified": 1644486793, "narHash": "sha256-EeijR4guVHgVv+JpOX3cQO+1XdrkJfGmiJ9XVsVU530=", @@ -8155,80 +8973,80 @@ }, "nixpkgs_11": { "locked": { - "lastModified": 1632864508, - "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", - "owner": "NixOS", + "lastModified": 1652885393, + "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", "type": "github" }, "original": { - "id": "nixpkgs", - "ref": "nixos-21.05-small", - "type": "indirect" + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_12": { "locked": { - "lastModified": 1647297614, - "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "lastModified": 1653117584, + "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, "nixpkgs_13": { - "flake": false, "locked": { - "lastModified": 1645493675, - "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" } }, "nixpkgs_14": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_15": { + "flake": false, "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_16": { @@ -8715,6 +9533,84 @@ } }, "nixpkgs_44": { + "locked": { + "lastModified": 1652885393, + "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_45": { + "locked": { + "lastModified": 1653117584, + "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_46": { + "locked": { + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" + } + }, + "nixpkgs_47": { + "locked": { + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_48": { + "flake": false, + "locked": { + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_49": { "locked": { "lastModified": 1650882267, "narHash": "sha256-BFKiz8srATQIBuFEN2HgS2EHisK29EjZ/HV34wSr2lU=", @@ -8730,7 +9626,24 @@ "type": "github" } }, - "nixpkgs_45": { + "nixpkgs_5": { + "flake": false, + "locked": { + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_50": { "locked": { "lastModified": 1647350163, "narHash": "sha256-OcMI+PFEHTONthXuEQNddt16Ml7qGvanL3x8QOl2Aao=", @@ -8746,7 +9659,7 @@ "type": "github" } }, - "nixpkgs_46": { + "nixpkgs_51": { "locked": { "lastModified": 1649456639, "narHash": "sha256-rZCjaEAZgOtT9kYTBigksof64SqKAXOuoHhlzHvfl0E=", @@ -8762,7 +9675,7 @@ "type": "github" } }, - "nixpkgs_47": { + "nixpkgs_52": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -8776,7 +9689,7 @@ "type": "indirect" } }, - "nixpkgs_48": { + "nixpkgs_53": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -8792,7 +9705,7 @@ "type": "github" } }, - "nixpkgs_49": { + "nixpkgs_54": { "flake": false, "locked": { "lastModified": 1628785280, @@ -8809,23 +9722,6 @@ "type": "github" } }, - "nixpkgs_5": { - "flake": false, - "locked": { - "lastModified": 1645493675, - "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "74b10859829153d5c5d50f7c77b86763759e8654", - "type": "github" - }, - "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_6": { "locked": { "lastModified": 1652885393, @@ -8921,6 +9817,23 @@ "type": "github" } }, + "old-ghc-nix_11": { + "flake": false, + "locked": { + "lastModified": 1631092763, + "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", + "owner": "angerman", + "repo": "old-ghc-nix", + "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", + "type": "github" + }, + "original": { + "owner": "angerman", + "ref": "master", + "repo": "old-ghc-nix", + "type": "github" + } + }, "old-ghc-nix_2": { "flake": false, "locked": { @@ -9074,6 +9987,23 @@ "type": "github" } }, + "pandoc-link-context_10": { + "flake": false, + "locked": { + "lastModified": 1650932770, + "narHash": "sha256-/WzE4O23B1OcL3WF8Saz5TRQj0tGH7FtbgRLRson2Mc=", + "owner": "srid", + "repo": "pandoc-link-context", + "rev": "85bd204339aafd309b8a3dd99ebffa6a50776cb6", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "master", + "repo": "pandoc-link-context", + "type": "github" + } + }, "pandoc-link-context_2": { "flake": false, "locked": { @@ -9196,11 +10126,11 @@ "pandoc-link-context_9": { "flake": false, "locked": { - "lastModified": 1650932770, - "narHash": "sha256-/WzE4O23B1OcL3WF8Saz5TRQj0tGH7FtbgRLRson2Mc=", + "lastModified": 1653170888, + "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", "owner": "srid", "repo": "pandoc-link-context", - "rev": "85bd204339aafd309b8a3dd99ebffa6a50776cb6", + "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", "type": "github" }, "original": { @@ -9212,9 +10142,9 @@ }, "pathtree": { "inputs": { - "flake-compat": "flake-compat_18", - "flake-utils": "flake-utils_28", - "nixpkgs": "nixpkgs_45" + "flake-compat": "flake-compat_20", + "flake-utils": "flake-utils_31", + "nixpkgs": "nixpkgs_50" }, "locked": { "lastModified": 1649011952, @@ -9270,7 +10200,7 @@ }, "plutarch-context-builder": { "inputs": { - "haskell-language-server": "haskell-language-server_9", + "haskell-language-server": "haskell-language-server_12", "haskell-nix": [ "plutarch-context-builder", "plutarch", @@ -9281,9 +10211,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_7", - "nixpkgs-latest": "nixpkgs-latest_7", - "plutarch": "plutarch_4" + "nixpkgs-2111": "nixpkgs-2111_9", + "nixpkgs-latest": "nixpkgs-latest_9", + "plutarch": "plutarch_5" }, "locked": { "lastModified": 1655751255, @@ -9302,20 +10232,53 @@ }, "plutarch-numeric": { "inputs": { - "haskell-language-server": "haskell-language-server_12", + "haskell-language-server": "haskell-language-server_4", "haskell-nix": [ + "liqwid-plutarch-extra", "plutarch-numeric", "plutarch", "haskell-nix" ], "nixpkgs": [ + "liqwid-plutarch-extra", "plutarch-numeric", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_9", - "nixpkgs-latest": "nixpkgs-latest_9", - "plutarch": "plutarch_5" + "nixpkgs-2111": "nixpkgs-2111_3", + "nixpkgs-latest": "nixpkgs-latest_3", + "plutarch": "plutarch_2" + }, + "locked": { + "lastModified": 1655733533, + "narHash": "sha256-HRSJUEQYYwr0HvYn6GwLmyYY7TXwZcYPAW0U8t6nmok=", + "owner": "liqwid-labs", + "repo": "plutarch-numeric", + "rev": "ce2d39dc366d9453b0f5df328bbb78f11e3b2ed6", + "type": "github" + }, + "original": { + "owner": "liqwid-labs", + "repo": "plutarch-numeric", + "type": "github" + } + }, + "plutarch-numeric_2": { + "inputs": { + "haskell-language-server": "haskell-language-server_15", + "haskell-nix": [ + "plutarch-numeric", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-numeric", + "plutarch", + "nixpkgs" + ], + "nixpkgs-2111": "nixpkgs-2111_11", + "nixpkgs-latest": "nixpkgs-latest_11", + "plutarch": "plutarch_6" }, "locked": { "lastModified": 1655733533, @@ -9332,9 +10295,9 @@ "type": "github" } }, - "plutarch-numeric_2": { + "plutarch-numeric_3": { "inputs": { - "haskell-language-server": "haskell-language-server_27", + "haskell-language-server": "haskell-language-server_30", "haskell-nix": [ "plutarch-safe-money", "plutarch-numeric", @@ -9347,9 +10310,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_19", - "nixpkgs-latest": "nixpkgs-latest_19", - "plutarch": "plutarch_10" + "nixpkgs-2111": "nixpkgs-2111_21", + "nixpkgs-latest": "nixpkgs-latest_21", + "plutarch": "plutarch_11" }, "locked": { "lastModified": 1654950823, @@ -9368,7 +10331,7 @@ }, "plutarch-quickcheck": { "inputs": { - "haskell-language-server": "haskell-language-server_4", + "haskell-language-server": "haskell-language-server_7", "haskell-nix": [ "liqwid-plutarch-extra", "plutarch-quickcheck", @@ -9381,9 +10344,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_3", - "nixpkgs-latest": "nixpkgs-latest_3", - "plutarch": "plutarch_2" + "nixpkgs-2111": "nixpkgs-2111_5", + "nixpkgs-latest": "nixpkgs-latest_5", + "plutarch": "plutarch_3" }, "locked": { "lastModified": 1655113586, @@ -9402,7 +10365,7 @@ }, "plutarch-quickcheck_2": { "inputs": { - "haskell-language-server": "haskell-language-server_15", + "haskell-language-server": "haskell-language-server_18", "haskell-nix": [ "plutarch-quickcheck", "plutarch", @@ -9413,9 +10376,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_11", - "nixpkgs-latest": "nixpkgs-latest_11", - "plutarch": "plutarch_6" + "nixpkgs-2111": "nixpkgs-2111_13", + "nixpkgs-latest": "nixpkgs-latest_13", + "plutarch": "plutarch_7" }, "locked": { "lastModified": 1655307888, @@ -9434,7 +10397,7 @@ }, "plutarch-quickcheck_3": { "inputs": { - "haskell-language-server": "haskell-language-server_22", + "haskell-language-server": "haskell-language-server_25", "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -9449,9 +10412,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_15", - "nixpkgs-latest": "nixpkgs-latest_15", - "plutarch": "plutarch_8" + "nixpkgs-2111": "nixpkgs-2111_17", + "nixpkgs-latest": "nixpkgs-latest_17", + "plutarch": "plutarch_9" }, "locked": { "lastModified": 1655113586, @@ -9470,7 +10433,7 @@ }, "plutarch-safe-money": { "inputs": { - "haskell-language-server": "haskell-language-server_18", + "haskell-language-server": "haskell-language-server_21", "haskell-nix": [ "plutarch-safe-money", "plutarch", @@ -9482,10 +10445,10 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_17", - "nixpkgs-latest": "nixpkgs-latest_17", - "plutarch": "plutarch_9", - "plutarch-numeric": "plutarch-numeric_2" + "nixpkgs-2111": "nixpkgs-2111_19", + "nixpkgs-latest": "nixpkgs-latest_19", + "plutarch": "plutarch_10", + "plutarch-numeric": "plutarch-numeric_3" }, "locked": { "lastModified": 1655471113, @@ -9504,22 +10467,60 @@ }, "plutarch_10": { "inputs": { - "Shrinker": "Shrinker", "cardano-base": "cardano-base_10", "cardano-crypto": "cardano-crypto_10", "cardano-prelude": "cardano-prelude_10", - "cryptonite": "cryptonite", "emanote": "emanote_9", "flat": "flat_10", - "foundation": "foundation", "haskell-language-server": "haskell-language-server_28", "haskell-nix": "haskell-nix_19", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_10", "hercules-ci-effects": "hercules-ci-effects_10", + "iohk-nix": "iohk-nix_19", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-latest": "nixpkgs-latest_20", + "plutus": "plutus_10", + "protolude": "protolude_10", + "secp256k1-haskell": "secp256k1-haskell_10" + }, + "locked": { + "lastModified": 1654108284, + "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", + "owner": "Liqwid-Labs", + "repo": "plutarch", + "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "ref": "staging", + "repo": "plutarch", + "type": "github" + } + }, + "plutarch_11": { + "inputs": { + "Shrinker": "Shrinker", + "cardano-base": "cardano-base_11", + "cardano-crypto": "cardano-crypto_11", + "cardano-prelude": "cardano-prelude_11", + "cryptonite": "cryptonite", + "emanote": "emanote_10", + "flat": "flat_11", + "foundation": "foundation", + "haskell-language-server": "haskell-language-server_31", + "haskell-nix": "haskell-nix_21", + "hercules-ci-effects": "hercules-ci-effects_11", "hs-memory": "hs-memory", "hspec": "hspec", "hspec-golden": "hspec-golden", "hspec-hedgehog": "hspec-hedgehog", - "iohk-nix": "iohk-nix_19", + "iohk-nix": "iohk-nix_21", "nixpkgs": [ "plutarch-safe-money", "plutarch-numeric", @@ -9527,8 +10528,8 @@ "haskell-nix", "nixpkgs-unstable" ], - "plutus": "plutus_10", - "protolude": "protolude_10", + "plutus": "plutus_11", + "protolude": "protolude_11", "sized-functors": "sized-functors", "th-extras": "th-extras" }, @@ -9561,7 +10562,7 @@ "iohk-nix": "iohk-nix_3", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9591,18 +10592,16 @@ "cardano-base": "cardano-base_3", "cardano-crypto": "cardano-crypto_3", "cardano-prelude": "cardano-prelude_3", - "emanote": [ - "plutarch", - "haskell-nix", - "nixpkgs-unstable" - ], + "emanote": "emanote_3", "flat": "flat_3", - "haskell-language-server": "haskell-language-server_7", + "haskell-language-server": "haskell-language-server_8", "haskell-nix": "haskell-nix_5", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_3", "hercules-ci-effects": "hercules-ci-effects_3", "iohk-nix": "iohk-nix_5", "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9615,15 +10614,15 @@ "locked": { "lastModified": 1654108284, "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "liqwid-labs", + "owner": "Liqwid-Labs", "repo": "plutarch", "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" }, "original": { - "owner": "liqwid-labs", + "owner": "Liqwid-Labs", + "ref": "staging", "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" } }, @@ -9632,7 +10631,11 @@ "cardano-base": "cardano-base_4", "cardano-crypto": "cardano-crypto_4", "cardano-prelude": "cardano-prelude_4", - "emanote": "emanote_3", + "emanote": [ + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_4", "haskell-language-server": "haskell-language-server_10", "haskell-nix": "haskell-nix_7", @@ -9640,7 +10643,6 @@ "hercules-ci-effects": "hercules-ci-effects_4", "iohk-nix": "iohk-nix_7", "nixpkgs": [ - "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9653,15 +10655,15 @@ "locked": { "lastModified": 1654108284, "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", + "owner": "liqwid-labs", "repo": "plutarch", "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" }, "original": { - "owner": "Liqwid-Labs", - "ref": "staging", + "owner": "liqwid-labs", "repo": "plutarch", + "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" } }, @@ -9678,7 +10680,7 @@ "hercules-ci-effects": "hercules-ci-effects_5", "iohk-nix": "iohk-nix_9", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9716,7 +10718,7 @@ "hercules-ci-effects": "hercules-ci-effects_6", "iohk-nix": "iohk-nix_11", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9748,14 +10750,13 @@ "cardano-prelude": "cardano-prelude_7", "emanote": "emanote_6", "flat": "flat_7", - "haskell-language-server": "haskell-language-server_20", + "haskell-language-server": "haskell-language-server_19", "haskell-nix": "haskell-nix_13", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_7", "hercules-ci-effects": "hercules-ci-effects_7", "iohk-nix": "iohk-nix_13", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9795,7 +10796,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9827,13 +10827,15 @@ "cardano-prelude": "cardano-prelude_9", "emanote": "emanote_8", "flat": "flat_9", - "haskell-language-server": "haskell-language-server_25", + "haskell-language-server": "haskell-language-server_26", "haskell-nix": "haskell-nix_17", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_9", "hercules-ci-effects": "hercules-ci-effects_9", "iohk-nix": "iohk-nix_17", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -9892,9 +10894,35 @@ "haskell-language-server": "haskell-language-server_29", "haskell-nix": "haskell-nix_20", "iohk-nix": "iohk-nix_20", - "nixpkgs": "nixpkgs_49", + "nixpkgs": "nixpkgs_48", "pre-commit-hooks-nix": "pre-commit-hooks-nix_10", - "sphinxcontrib-haddock": "sphinxcontrib-haddock_10", + "sphinxcontrib-haddock": "sphinxcontrib-haddock_10" + }, + "locked": { + "lastModified": 1653669501, + "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "owner": "input-output-hk", + "repo": "plutus", + "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "plutus", + "type": "github" + } + }, + "plutus_11": { + "inputs": { + "cardano-repo-tool": "cardano-repo-tool_11", + "gitignore-nix": "gitignore-nix_11", + "hackage-nix": "hackage-nix_11", + "haskell-language-server": "haskell-language-server_32", + "haskell-nix": "haskell-nix_22", + "iohk-nix": "iohk-nix_22", + "nixpkgs": "nixpkgs_54", + "pre-commit-hooks-nix": "pre-commit-hooks-nix_11", + "sphinxcontrib-haddock": "sphinxcontrib-haddock_11", "stackage-nix": "stackage-nix" }, "locked": { @@ -9943,10 +10971,10 @@ "cardano-repo-tool": "cardano-repo-tool_3", "gitignore-nix": "gitignore-nix_3", "hackage-nix": "hackage-nix_3", - "haskell-language-server": "haskell-language-server_8", + "haskell-language-server": "haskell-language-server_9", "haskell-nix": "haskell-nix_6", "iohk-nix": "iohk-nix_6", - "nixpkgs": "nixpkgs_13", + "nixpkgs": "nixpkgs_15", "pre-commit-hooks-nix": "pre-commit-hooks-nix_3", "sphinxcontrib-haddock": "sphinxcontrib-haddock_3" }, @@ -10047,7 +11075,7 @@ "cardano-repo-tool": "cardano-repo-tool_7", "gitignore-nix": "gitignore-nix_7", "hackage-nix": "hackage-nix_7", - "haskell-language-server": "haskell-language-server_21", + "haskell-language-server": "haskell-language-server_20", "haskell-nix": "haskell-nix_14", "iohk-nix": "iohk-nix_14", "nixpkgs": "nixpkgs_33", @@ -10099,7 +11127,7 @@ "cardano-repo-tool": "cardano-repo-tool_9", "gitignore-nix": "gitignore-nix_9", "hackage-nix": "hackage-nix_9", - "haskell-language-server": "haskell-language-server_26", + "haskell-language-server": "haskell-language-server_27", "haskell-nix": "haskell-nix_18", "iohk-nix": "iohk-nix_18", "nixpkgs": "nixpkgs_43", @@ -10152,6 +11180,22 @@ "type": "github" } }, + "pre-commit-hooks-nix_11": { + "flake": false, + "locked": { + "lastModified": 1624971177, + "narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix_2": { "flake": false, "locked": { @@ -10297,6 +11341,22 @@ } }, "protolude_10": { + "flake": false, + "locked": { + "lastModified": 1647139352, + "narHash": "sha256-JyHAQfTTUswP8MeGEZibx/2/v01Q7cU5mNpnmDazh24=", + "owner": "protolude", + "repo": "protolude", + "rev": "3e249724fd0ead27370c8c297b1ecd38f92cbd5b", + "type": "github" + }, + "original": { + "owner": "protolude", + "repo": "protolude", + "type": "github" + } + }, + "protolude_11": { "flake": false, "locked": { "lastModified": 1637276813, @@ -10452,11 +11512,11 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_5", - "nixpkgs-latest": "nixpkgs-latest_5", - "plutarch": "plutarch_3", + "nixpkgs-2111": "nixpkgs-2111_7", + "nixpkgs-latest": "nixpkgs-latest_7", + "plutarch": "plutarch_4", "plutarch-context-builder": "plutarch-context-builder", - "plutarch-numeric": "plutarch-numeric", + "plutarch-numeric": "plutarch-numeric_2", "plutarch-quickcheck": "plutarch-quickcheck_2", "plutarch-safe-money": "plutarch-safe-money" } @@ -10477,6 +11537,22 @@ "type": "github" } }, + "secp256k1-haskell_10": { + "flake": false, + "locked": { + "lastModified": 1650290419, + "narHash": "sha256-XrjiqCC7cNTFib78gdMPGNettAkwAxQlbC/n+/mRFt4=", + "owner": "haskoin", + "repo": "secp256k1-haskell", + "rev": "3df963ab6ae14ec122691a97af09a7331511a387", + "type": "github" + }, + "original": { + "owner": "haskoin", + "repo": "secp256k1-haskell", + "type": "github" + } + }, "secp256k1-haskell_2": { "flake": false, "locked": { @@ -10654,6 +11730,22 @@ "type": "github" } }, + "sphinxcontrib-haddock_11": { + "flake": false, + "locked": { + "lastModified": 1594136664, + "narHash": "sha256-O9YT3iCUBHP3CEF88VDLLCO2HSP3HqkNA2q2939RnVY=", + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "rev": "f3956b3256962b2d27d5a4e96edb7951acf5de34", + "type": "github" + }, + "original": { + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "type": "github" + } + }, "sphinxcontrib-haddock_2": { "flake": false, "locked": { @@ -10815,6 +11907,22 @@ } }, "stackage_10": { + "flake": false, + "locked": { + "lastModified": 1654046327, + "narHash": "sha256-IxX46Dh4OZpF3k7KPMa3tZSScYYGqFxXpCnMc0QRkuQ=", + "owner": "input-output-hk", + "repo": "stackage.nix", + "rev": "cc1d778723fcd431f9b2ed632a50c610c3e38b54", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "stackage.nix", + "type": "github" + } + }, + "stackage_11": { "flake": false, "locked": { "lastModified": 1644887829, @@ -10985,11 +12093,32 @@ "type": "github" } }, + "tailwind-haskell_10": { + "inputs": { + "flake-compat": "flake-compat_21", + "flake-utils": "flake-utils_32", + "nixpkgs": "nixpkgs_51" + }, + "locked": { + "lastModified": 1649519562, + "narHash": "sha256-IVZ4D7JkSCn0sjeTw5b0s2TTIU+g4hk78u1znXY4JjQ=", + "owner": "srid", + "repo": "tailwind-haskell", + "rev": "f5bfc15da3ee6e74a077579fb10269bb450fa5cb", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "master", + "repo": "tailwind-haskell", + "type": "github" + } + }, "tailwind-haskell_2": { "inputs": { "ema": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema" @@ -11016,14 +12145,15 @@ "tailwind-haskell_3": { "inputs": { "ema": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema" ], "flake-compat": "flake-compat_6", - "flake-utils": "flake-utils_9", - "nixpkgs": "nixpkgs_15" + "flake-utils": "flake-utils_8", + "nixpkgs": "nixpkgs_12" }, "locked": { "lastModified": 1653230344, @@ -11043,7 +12173,7 @@ "tailwind-haskell_4": { "inputs": { "ema": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema" @@ -11070,7 +12200,7 @@ "tailwind-haskell_5": { "inputs": { "ema": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema" @@ -11097,8 +12227,7 @@ "tailwind-haskell_6": { "inputs": { "ema": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema" @@ -11127,7 +12256,6 @@ "ema": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema" @@ -11155,6 +12283,8 @@ "inputs": { "ema": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema" @@ -11180,16 +12310,22 @@ }, "tailwind-haskell_9": { "inputs": { - "flake-compat": "flake-compat_19", - "flake-utils": "flake-utils_29", - "nixpkgs": "nixpkgs_46" + "ema": [ + "plutarch-safe-money", + "plutarch", + "emanote", + "ema" + ], + "flake-compat": "flake-compat_18", + "flake-utils": "flake-utils_27", + "nixpkgs": "nixpkgs_45" }, "locked": { - "lastModified": 1649519562, - "narHash": "sha256-IVZ4D7JkSCn0sjeTw5b0s2TTIU+g4hk78u1znXY4JjQ=", + "lastModified": 1653230344, + "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", "owner": "srid", "repo": "tailwind-haskell", - "rev": "f5bfc15da3ee6e74a077579fb10269bb450fa5cb", + "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", "type": "github" }, "original": { @@ -11218,9 +12354,9 @@ }, "unionmount": { "inputs": { - "flake-compat": "flake-compat_20", - "flake-utils": "flake-utils_30", - "nixpkgs": "nixpkgs_47" + "flake-compat": "flake-compat_22", + "flake-utils": "flake-utils_33", + "nixpkgs": "nixpkgs_52" }, "locked": { "lastModified": 1649012450, diff --git a/flake.nix b/flake.nix index 2573c319..15ef8987 100644 --- a/flake.nix +++ b/flake.nix @@ -17,7 +17,7 @@ "plutarch/haskell-nix/nixpkgs-unstable"; inputs.liqwid-plutarch-extra.url = - "github:Liqwid-Labs/liqwid-plutarch-extra?ref=main"; + "github:Liqwid-Labs/liqwid-plutarch-extra?rev=6bcd6068593b00adc4a1afd59b127398ea37d770"; inputs.plutarch-numeric.url = "github:Liqwid-Labs/plutarch-numeric?ref=main"; inputs.plutarch-safe-money.url = From e428b504d7f261b47742ba9f9e3867c5332e8890 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 23 Jun 2022 19:24:36 +0800 Subject: [PATCH 06/78] encode some enum types as integer on chain --- agora/Agora/Governor.hs | 52 +++++++++++++++++------------ agora/Agora/Governor/Scripts.hs | 29 ++++++++-------- agora/Agora/Proposal.hs | 43 ++++++++++++++---------- agora/Agora/Proposal/Scripts.hs | 26 ++++++++------- agora/Agora/Treasury.hs | 59 +++++++++++++++++---------------- bench.csv | 48 +++++++++++++-------------- 6 files changed, 140 insertions(+), 117 deletions(-) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 9df17eaf..6a6771c8 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -45,6 +45,11 @@ import Plutarch.DataRepr ( PIsDataReprInstances (PIsDataReprInstances), ) import Plutarch.Extra.Comonad (pextract) +import Plutarch.Extra.IsData ( + DerivePConstantViaEnum (..), + EnumIsData (..), + ) +import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.SafeMoney (PDiscrete (..)) @@ -92,15 +97,27 @@ data GovernorRedeemer MintGATs | -- | Allows effects to mutate the parameters. MutateGovernor - deriving stock (Show, GHC.Generic) - --- | @since 0.1.0 -PlutusTx.makeIsDataIndexed - ''GovernorRedeemer - [ ('CreateProposal, 0) - , ('MintGATs, 1) - , ('MutateGovernor, 2) - ] + deriving stock + ( -- | @since 0.1.0 + Show + , -- | @since 0.1.0 + GHC.Generic + , -- | @since 0.2.0 + Enum + , -- | @since 0.2.0 + Bounded + ) + deriving anyclass + ( -- | @since 0.2.0 + Generic + ) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + ) + via (EnumIsData GovernorRedeemer) {- | Parameters for creating Governor scripts. @@ -172,10 +189,8 @@ deriving via PAsData (PIsDataReprInstances PGovernorDatum) instance PTryFrom PDa @since 0.1.0 -} -data PGovernorRedeemer (s :: S) - = PCreateProposal (Term s (PDataRecord '[])) - | PMintGATs (Term s (PDataRecord '[])) - | PMutateGovernor (Term s (PDataRecord '[])) +newtype PGovernorRedeemer (s :: S) + = PGovernorRedeemer (Term s PInteger) deriving stock ( -- | @since 0.1.0 GHC.Generic @@ -184,26 +199,19 @@ data PGovernorRedeemer (s :: S) ( -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.1.0 - PIsDataRepr - ) deriving ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData ) - via PIsDataReprInstances PGovernorRedeemer + via (DerivePNewtype' PGovernorRedeemer) -- | @since 0.1.0 instance PUnsafeLiftDecl PGovernorRedeemer where type PLifted PGovernorRedeemer = GovernorRedeemer -- | @since 0.1.0 -deriving via (DerivePConstantViaData GovernorRedeemer PGovernorRedeemer) instance (PConstantDecl GovernorRedeemer) - --- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PGovernorRedeemer) instance PTryFrom PData (PAsData PGovernorRedeemer) +deriving via (DerivePConstantViaEnum GovernorRedeemer PGovernorRedeemer) instance (PConstantDecl GovernorRedeemer) -------------------------------------------------------------------------------- diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index e617a76c..2b5533e4 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -39,18 +39,17 @@ import Agora.AuthorityToken ( ) import Agora.Governor ( Governor (gstOutRef, gtClassRef, maximumCosigners), + GovernorRedeemer (..), PGovernorDatum (PGovernorDatum), - PGovernorRedeemer (PCreateProposal, PMintGATs, PMutateGovernor), governorDatumValid, pgetNextProposalId, ) import Agora.Proposal ( PProposalDatum (..), PProposalId (..), - PProposalStatus (PFinished), PResultTag, Proposal (..), - ProposalStatus (Draft, Locked), + ProposalStatus (Draft, Finished, Locked), pemptyVotesFor, pneutralOption, proposalDatumValid, @@ -105,20 +104,20 @@ import Plutarch.Api.V1.AssetClass ( passetClass, passetClassValueOf, ) +import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, ptxSignedBy, pvalueSpent) +import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) +import Plutarch.Extra.IsData (pmatchEnumFromData) import Plutarch.Extra.Map ( pkeys, plookup, plookup', ) +import Plutarch.Extra.Maybe (pisDJust) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.SafeMoney (PDiscrete (..), pvalueDiscrete') -import Plutarch.TryFrom () -------------------------------------------------------------------------------- -import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, ptxSignedBy, pvalueSpent) -import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) -import Plutarch.Extra.Maybe (pisDJust) -import Plutarch.Extra.TermCont import PlutusLedgerApi.V1 ( CurrencySymbol (..), MintingPolicy, @@ -280,7 +279,6 @@ governorPolicy gov = governorValidator :: Governor -> ClosedTerm PValidator governorValidator gov = plam $ \datum' redeemer' ctx' -> unTermCont $ do - (pfromData -> redeemer, _) <- ptryFromC redeemer' ctxF <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo' <- pletC $ pfromData $ ctxF.txInfo @@ -330,8 +328,8 @@ governorValidator gov = pguardC "New datum is not valid" $ governorDatumValid # newGovernorDatum pure $ - pmatch redeemer $ \case - PCreateProposal _ -> unTermCont $ do + pmatchEnumFromData redeemer' $ \case + Just CreateProposal -> unTermCont $ do -- Check that the transaction advances proposal id. let expectedNextProposalId = pgetNextProposalId # oldGovernorDatumF.nextProposalId @@ -516,7 +514,7 @@ governorValidator gov = -------------------------------------------------------------------------- - PMintGATs _ -> unTermCont $ do + Just MintGATs -> unTermCont $ do pguardC "Governor state should not be changed" $ newGovernorDatum #== oldGovernorDatum -- Filter out proposal inputs and ouputs using PST and the address of proposal validator. @@ -583,7 +581,7 @@ governorValidator gov = PProposalDatum ( #proposalId .= proposalInputDatumF.proposalId .& #effects .= proposalInputDatumF.effects - .& #status .= pdata (pcon $ PFinished pdnil) + .& #status .= pconstantData Finished .& #cosigners .= proposalInputDatumF.cosigners .& #thresholds .= proposalInputDatumF.thresholds .& #votes .= proposalInputDatumF.votes @@ -667,9 +665,12 @@ governorValidator gov = -------------------------------------------------------------------------- - PMutateGovernor _ -> unTermCont $ do + Just MutateGovernor -> unTermCont $ do -- Check that a GAT is burnt. pure $ popaque $ singleAuthorityTokenBurned patSymbol ctxF.txInfo txInfoF.mint + + -------------------------------------------------------------------------- + Nothing -> ptraceError "Unknown redeemer" where -- Get th amount of governance tokens in a value. pgtValueOf :: Term s (PValue _ _ :--> PDiscrete GTTag) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index b777c7f5..bf539f60 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -51,9 +51,14 @@ import Plutarch.Api.V1 ( PValidatorHash, ) import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) +import Plutarch.Extra.IsData ( + DerivePConstantViaEnum (..), + EnumIsData (..), + ) import Plutarch.Extra.List (pnotNull) import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map.Unsorted qualified as PUM +import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), @@ -173,10 +178,24 @@ data ProposalStatus Show , -- | @since 0.1.0 GHC.Generic + , -- | @since 0.2.0 + Enum + , -- | @since 0.2.0 + Bounded ) - --- | @since 0.1.0 -PlutusTx.makeIsDataIndexed ''ProposalStatus [('Draft, 0), ('VotingReady, 1), ('Locked, 2), ('Finished, 3)] + deriving anyclass + ( -- | @since 0.2.0 + Generic + ) + deriving + ( -- | @since 0.1.0 + PlutusTx.FromData + , -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.UnsafeFromData + ) + via (EnumIsData ProposalStatus) {- | The threshold values for various state transitions to happen. This data is stored centrally (in the 'Agora.Governor.Governor') and copied over @@ -433,13 +452,7 @@ deriving via @since 0.1.0 -} -data PProposalStatus (s :: S) - = -- TODO: 'PProposalStatus' ought te be encoded as 'PInteger'. - -- e.g. like Tilde used 'pmatchEnum'. - PDraft (Term s (PDataRecord '[])) - | PVotingReady (Term s (PDataRecord '[])) - | PLocked (Term s (PDataRecord '[])) - | PFinished (Term s (PDataRecord '[])) +newtype PProposalStatus (s :: S) = PProposalStatus (Term s PInteger) deriving stock ( -- | @since 0.1.0 GHC.Generic @@ -448,10 +461,6 @@ data PProposalStatus (s :: S) ( -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.1.0 - PIsDataRepr - ) deriving ( -- | @since 0.1.0 PlutusType @@ -460,16 +469,16 @@ data PProposalStatus (s :: S) , -- | @since 0.1.0 PEq ) - via PIsDataReprInstances PProposalStatus + via (DerivePNewtype' PProposalStatus) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalStatus where type PLifted PProposalStatus = ProposalStatus -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PProposalStatus) instance PTryFrom PData (PAsData PProposalStatus) +deriving via PAsData (DerivePNewtype' PProposalStatus) instance PTryFrom PData (PAsData PProposalStatus) -- | @since 0.1.0 -deriving via (DerivePConstantViaData ProposalStatus PProposalStatus) instance (PConstantDecl ProposalStatus) +deriving via (DerivePConstantViaEnum ProposalStatus PProposalStatus) instance (PConstantDecl ProposalStatus) {- | Plutarch-level version of 'ProposalThresholds'. diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 24a41eaa..c15aefb2 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -13,7 +13,6 @@ module Agora.Proposal.Scripts ( import Agora.Proposal ( PProposalDatum (PProposalDatum), PProposalRedeemer (..), - PProposalStatus (..), PProposalVotes (PProposalVotes), Proposal (governorSTAssetClass, stakeSTAssetClass), ProposalStatus (..), @@ -55,6 +54,7 @@ import Plutarch.Api.V1.ScriptContext ( ) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Extra.Comonad (pextract) +import Plutarch.Extra.IsData (pmatchEnum) import Plutarch.Extra.List (pisUniqBy) import Plutarch.Extra.Map (plookup, pupdate) import Plutarch.Extra.Maybe (pisJust) @@ -510,19 +510,21 @@ proposalValidator proposal = inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + proposalStatus <- pletC $ pto $ pfromData proposalF.status + -- Check the timings. let isFinished = proposalF.status #== pconstantData Finished - notTooLate = pmatch (pfromData proposalF.status) $ \case - PDraft _ -> inDraftPeriod + notTooLate = pmatchEnum proposalStatus $ \case + Draft -> inDraftPeriod -- Can only advance after the voting period is over. - PVotingReady _ -> inLockedPeriod - PLocked _ -> inExecutionPeriod + VotingReady -> inLockedPeriod + Locked -> inExecutionPeriod _ -> pconstant False - notTooEarly = pmatch (pfromData proposalF.status) $ \case - PVotingReady _ -> pnot # inVotingPeriod - PLocked _ -> pnot # inLockedPeriod + notTooEarly = pmatchEnum (pto $ pfromData proposalF.status) $ \case + VotingReady -> pnot # inVotingPeriod + Locked -> pnot # inLockedPeriod _ -> pconstant True pguardC "Cannot advance ahead of time" notTooEarly @@ -534,8 +536,8 @@ proposalValidator proposal = pif notTooLate -- On time: advance to next status. - ( pmatch (pfromData proposalF.status) $ \case - PDraft _ -> unTermCont $ do + ( pmatchEnum proposalStatus $ \case + Draft -> unTermCont $ do -- TODO: Perform other necessary checks. -- 'Draft' -> 'VotingReady' @@ -543,7 +545,7 @@ proposalValidator proposal = proposalOutStatus #== pconstantData VotingReady pure $ popaque (pconstant ()) - PVotingReady _ -> unTermCont $ do + VotingReady -> unTermCont $ do -- 'VotingReady' -> 'Locked' pguardC "Proposal status set to Locked" $ proposalOutStatus #== pconstantData Locked @@ -554,7 +556,7 @@ proposalValidator proposal = $ pfromData thresholdsF.execute pure $ popaque (pconstant ()) - PLocked _ -> unTermCont $ do + Locked -> unTermCont $ do -- 'Locked' -> 'Finished' pguardC "Proposal status set to Finished" $ proposalOutStatus #== pconstantData Finished diff --git a/agora/Agora/Treasury.hs b/agora/Agora/Treasury.hs index 1af783ec..dd24c8dd 100644 --- a/agora/Agora/Treasury.hs +++ b/agora/Agora/Treasury.hs @@ -12,15 +12,13 @@ module Agora.Treasury (module Agora.Treasury) where import Agora.AuthorityToken (singleAuthorityTokenBurned) import GHC.Generics qualified as GHC -import Generics.SOP (Generic, I (I)) +import Generics.SOP (Generic) import Plutarch.Api.V1 (PValidator) import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting)) import "plutarch" Plutarch.Api.V1.Value (PValue) -import Plutarch.DataRepr ( - DerivePConstantViaData (..), - PIsDataReprInstances (PIsDataReprInstances), - ) -import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) +import Plutarch.Extra.IsData (DerivePConstantViaEnum (..), EnumIsData (..), pmatchEnumFromData) +import Plutarch.Extra.Other (DerivePNewtype' (..)) +import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl) import Plutarch.TryFrom () import PlutusLedgerApi.V1.Value (CurrencySymbol) @@ -40,13 +38,22 @@ data TreasuryRedeemer Show , -- | @since 0.1.0 GHC.Generic + , -- | @since 0.2.0 + Enum + , -- | @since 0.2.0 + Bounded ) - --- | @since 0.1.0 -PlutusTx.makeIsDataIndexed - ''TreasuryRedeemer - [ ('SpendTreasuryGAT, 0) - ] + deriving anyclass + ( -- | @since 0.2.0 + Generic + ) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + ) + via (EnumIsData TreasuryRedeemer) -------------------------------------------------------------------------------- @@ -56,9 +63,7 @@ PlutusTx.makeIsDataIndexed @since 0.1.0 -} newtype PTreasuryRedeemer (s :: S) - = -- | Alters treasury parameters, subject to the burning of a - -- governance authority token. - PSpendTreasuryGAT (Term s (PDataRecord '[])) + = PTreasuryRedeemer (Term s PInteger) deriving stock ( -- | @since 0.1.0 GHC.Generic @@ -66,8 +71,6 @@ newtype PTreasuryRedeemer (s :: S) deriving anyclass ( -- | @since 0.1.0 Generic - , -- | @since 0.1.0 - PIsDataRepr ) deriving ( -- | @since 0.1.0 @@ -75,13 +78,7 @@ newtype PTreasuryRedeemer (s :: S) , -- | @since 0.1.0 PIsData ) - via PIsDataReprInstances PTreasuryRedeemer - --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PTreasuryRedeemer) - instance - PTryFrom PData (PAsData PTreasuryRedeemer) + via (DerivePNewtype' PTreasuryRedeemer) -- | @since 0.1.0 instance PUnsafeLiftDecl PTreasuryRedeemer where @@ -89,7 +86,7 @@ instance PUnsafeLiftDecl PTreasuryRedeemer where -- | @since 0.1.0 deriving via - (DerivePConstantViaData TreasuryRedeemer PTreasuryRedeemer) + (DerivePConstantViaEnum TreasuryRedeemer PTreasuryRedeemer) instance (PConstantDecl TreasuryRedeemer) @@ -105,8 +102,6 @@ treasuryValidator :: CurrencySymbol -> ClosedTerm PValidator treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do - (treasuryRedeemer, _) <- ptryFromC redeemer - -- plet required fields from script context. ctx <- pletFieldsC @["txInfo", "purpose"] ctx' @@ -114,7 +109,15 @@ treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do PMinting _ <- pmatchC ctx.purpose -- Ensure redeemer type is valid. - PSpendTreasuryGAT _ <- pmatchC $ pfromData treasuryRedeemer + let redeemerValid = + pmatchEnumFromData + redeemer + ( \case + Just SpendTreasuryGAT -> pconstant True + _ -> pconstant False + ) + + pguardC "Redeemer should be SpendTreasuryGAT" redeemerValid -- Get the minted value from txInfo. txInfo' <- pletC ctx.txInfo diff --git a/bench.csv b/bench.csv index 723eb3ae..7a27393c 100644 --- a/bench.csv +++ b/bench.csv @@ -2,36 +2,36 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,90397270,249528,8807 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,87839169,243032,8733 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609 Agora/Stake/policy/stakeCreation,52241265,152127,2514 Agora/Stake/validator/stakeDepositWithdraw deposit,180880812,492023,4431 Agora/Stake/validator/stakeDepositWithdraw withdraw,180880812,492023,4419 -Agora/Proposal/policy/proposalCreation,23140177,69194,1519 -Agora/Proposal/validator/cosignature/proposal,338483402,961112,8620 -Agora/Proposal/validator/cosignature/stake,126327509,315061,4968 -Agora/Proposal/validator/voting/proposal,296656410,830692,8549 -Agora/Proposal/validator/voting/stake,121170376,320853,4942 -Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,294340341,825452,8447 -Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,306801371,861382,8456 -Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,295193386,827555,8456 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,293210540,822722,8449 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,291801629,820017,8450 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,292932607,822421,8450 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",302502183,848154,8500 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",273224492,773388,8504 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",268700821,763033,8504 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",268700821,763033,8504 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2908014422,8180225,30018 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2616129517,7383326,30287 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2464384686,6936321,30187 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2464384686,6936321,30187 +Agora/Proposal/policy/proposalCreation,23140177,69194,1517 +Agora/Proposal/validator/cosignature/proposal,339142002,963240,8640 +Agora/Proposal/validator/cosignature/stake,126327509,315061,4964 +Agora/Proposal/validator/voting/proposal,296502589,833052,8568 +Agora/Proposal/validator/voting/stake,121170376,320853,4937 +Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,291922922,820018,8473 +Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,307211397,861958,8482 +Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,295603412,828131,8482 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,291426433,819116,8475 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,292844967,822421,8476 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,293975945,824825,8476 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",303185955,850282,8520 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",273908264,775516,8524 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",269372007,765161,8524 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",269372007,765161,8524 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2908698194,8182353,29874 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2616813289,7385454,30143 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2465055872,6938449,30042 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2465055872,6938449,30042 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Treasury/Validator/Positive/Allows for effect changes,29938856,79744,1391 +Agora/Treasury/Validator/Positive/Allows for effect changes,30996258,82579,1462 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51007235,144191,2034 -Agora/Governor/validator/proposal creation,317651809,854963,9323 -Agora/Governor/validator/GATs minting,423756405,1151000,9444 -Agora/Governor/validator/mutate governor state,91544121,254987,8908 +Agora/Governor/validator/proposal creation,315830140,850201,9247 +Agora/Governor/validator/GATs minting,421359049,1145136,9364 +Agora/Governor/validator/mutate governor state,88986020,248491,8834 From f26442fb0bbe6a3ee4520f97a9d33a44d4f4fe4c Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 23 Jun 2022 22:36:49 +0800 Subject: [PATCH 07/78] apply Emily's suggestions --- agora/Agora/Treasury.hs | 14 ++++---------- bench.csv | 2 +- 2 files changed, 5 insertions(+), 11 deletions(-) diff --git a/agora/Agora/Treasury.hs b/agora/Agora/Treasury.hs index dd24c8dd..16d5a51c 100644 --- a/agora/Agora/Treasury.hs +++ b/agora/Agora/Treasury.hs @@ -16,7 +16,8 @@ import Generics.SOP (Generic) import Plutarch.Api.V1 (PValidator) import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting)) import "plutarch" Plutarch.Api.V1.Value (PValue) -import Plutarch.Extra.IsData (DerivePConstantViaEnum (..), EnumIsData (..), pmatchEnumFromData) +import Plutarch.Builtin (pforgetData) +import Plutarch.Extra.IsData (DerivePConstantViaEnum (..), EnumIsData (..)) import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl) @@ -109,15 +110,8 @@ treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do PMinting _ <- pmatchC ctx.purpose -- Ensure redeemer type is valid. - let redeemerValid = - pmatchEnumFromData - redeemer - ( \case - Just SpendTreasuryGAT -> pconstant True - _ -> pconstant False - ) - - pguardC "Redeemer should be SpendTreasuryGAT" redeemerValid + pguardC "Redeemer should be SpendTreasuryGAT" $ + redeemer #== pforgetData (pconstantData SpendTreasuryGAT) -- Get the minted value from txInfo. txInfo' <- pletC ctx.txInfo diff --git a/bench.csv b/bench.csv index 7a27393c..d41a8162 100644 --- a/bench.csv +++ b/bench.csv @@ -28,7 +28,7 @@ Agora/Proposal/validator/advancing/successfully advance to failed state: timeout "Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2465055872,6938449,30042 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Treasury/Validator/Positive/Allows for effect changes,30996258,82579,1462 +Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51007235,144191,2034 From 4d7e323e01d0c6044a932add5d5fc288fe8ffc2d Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 25 Jun 2022 16:14:42 +0800 Subject: [PATCH 08/78] efficiently encode proposal datum on chain --- agora/Agora/Proposal.hs | 39 ++++++++++++++++--------- agora/Agora/Proposal/Time.hs | 26 +++++++++++------ agora/Agora/Stake.hs | 39 ++++++++++++++++++------- bench.csv | 56 ++++++++++++++++++------------------ 4 files changed, 101 insertions(+), 59 deletions(-) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index bf539f60..55f22ba9 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -52,8 +52,10 @@ import Plutarch.Api.V1 ( ) import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) import Plutarch.Extra.IsData ( + DerivePConstantViaDataList (..), DerivePConstantViaEnum (..), EnumIsData (..), + ProductIsData (ProductIsData), ) import Plutarch.Extra.List (pnotNull) import Plutarch.Extra.Map qualified as PM @@ -223,9 +225,16 @@ data ProposalThresholds = ProposalThresholds , -- | @since 0.1.0 GHC.Generic ) - --- | @since 0.1.0 -PlutusTx.makeIsDataIndexed ''ProposalThresholds [('ProposalThresholds, 0)] + deriving anyclass (Generic) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + , -- | @since 0.1.0 + PlutusTx.UnsafeFromData + ) + via (ProductIsData ProposalThresholds) {- | Map which encodes the total tally for each result. It's important that the "shape" is consistent with the shape of 'effects'. @@ -248,8 +257,6 @@ newtype ProposalVotes = ProposalVotes PlutusTx.ToData , -- | @since 0.1.0 PlutusTx.FromData - , -- | @since 0.1.0 - PlutusTx.UnsafeFromData ) deriving stock ( -- | @since 0.1.0 @@ -300,8 +307,14 @@ data ProposalDatum = ProposalDatum , -- | @since 0.1.0 GHC.Generic ) - -PlutusTx.makeIsDataIndexed ''ProposalDatum [('ProposalDatum, 0)] + deriving anyclass (Generic) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + ) + via (ProductIsData ProposalDatum) {- | Haskell-level redeemer for Proposal scripts. @@ -515,11 +528,11 @@ newtype PProposalThresholds (s :: S) = PProposalThresholds , -- | @since 0.1.0 PDataFields ) - via (PIsDataReprInstances PProposalThresholds) + via (DerivePNewtype' PProposalThresholds) -- | @since 0.1.0 deriving via - PAsData (PIsDataReprInstances PProposalThresholds) + PAsData (DerivePNewtype' PProposalThresholds) instance PTryFrom PData (PAsData PProposalThresholds) @@ -528,7 +541,7 @@ instance PUnsafeLiftDecl PProposalThresholds where type PLifted PProposalThresho -- | @since 0.1.0 deriving via - (DerivePConstantViaData ProposalThresholds PProposalThresholds) + (DerivePConstantViaDataList ProposalThresholds PProposalThresholds) instance (PConstantDecl ProposalThresholds) @@ -637,16 +650,16 @@ newtype PProposalDatum (s :: S) = PProposalDatum , -- | @since 0.1.0 PEq ) - via (PIsDataReprInstances PProposalDatum) + via (DerivePNewtype' PProposalDatum) -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PProposalDatum) instance PTryFrom PData (PAsData PProposalDatum) +deriving via PAsData (DerivePNewtype' PProposalDatum) instance PTryFrom PData (PAsData PProposalDatum) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalDatum where type PLifted PProposalDatum = ProposalDatum -- | @since 0.1.0 -deriving via (DerivePConstantViaData ProposalDatum PProposalDatum) instance (PConstantDecl ProposalDatum) +deriving via (DerivePConstantViaDataList ProposalDatum PProposalDatum) instance (PConstantDecl ProposalDatum) {- | Plutarch-level version of 'ProposalRedeemer'. diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index bf642e7b..d74d8474 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -40,10 +40,13 @@ import Plutarch.Api.V1 ( PUpperBound (PUpperBound), ) import Plutarch.DataRepr ( - DerivePConstantViaData (..), PDataFields, - PIsDataReprInstances (..), ) +import Plutarch.Extra.IsData ( + DerivePConstantViaDataList (..), + ProductIsData (ProductIsData), + ) +import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), @@ -91,9 +94,16 @@ data ProposalTimingConfig = ProposalTimingConfig , -- | @since 0.1.0 GHC.Generic ) - --- | @since 0.1.0 -PlutusTx.makeIsDataIndexed ''ProposalTimingConfig [('ProposalTimingConfig, 0)] + deriving anyclass (Generic) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + , -- | @since 0.1.0 + PlutusTx.UnsafeFromData + ) + via (ProductIsData ProposalTimingConfig) -- | Represents the maximum width of a 'PlutusLedgerApi.V1.Time.POSIXTimeRange'. newtype MaxTimeRangeWidth = MaxTimeRangeWidth {getMaxWidth :: POSIXTime} @@ -229,10 +239,10 @@ newtype PProposalTimingConfig (s :: S) = PProposalTimingConfig , -- | @since 0.1.0 PDataFields ) - via (PIsDataReprInstances PProposalTimingConfig) + via (DerivePNewtype' PProposalTimingConfig) -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig) +deriving via PAsData (DerivePNewtype' PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalTimingConfig where @@ -240,7 +250,7 @@ instance PUnsafeLiftDecl PProposalTimingConfig where -- | @since 0.1.0 deriving via - (DerivePConstantViaData ProposalTimingConfig PProposalTimingConfig) + (DerivePConstantViaDataList ProposalTimingConfig PProposalTimingConfig) instance (PConstantDecl ProposalTimingConfig) diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 6ab4e63c..a4fded9c 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -48,7 +48,12 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (PIsDataReprInstances), ) +import Plutarch.Extra.IsData ( + DerivePConstantViaDataList (..), + ProductIsData (ProductIsData), + ) import Plutarch.Extra.List (pmapMaybe, pnotNull) +import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC) import Plutarch.Internal (punsafeCoerce) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) @@ -116,8 +121,16 @@ data ProposalLock = ProposalLock , -- | @since 0.1.0 GHC.Generic ) - -PlutusTx.makeIsDataIndexed ''ProposalLock [('ProposalLock, 0)] + deriving anyclass (Generic) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + , -- | @since 0.1.0 + PlutusTx.UnsafeFromData + ) + via (ProductIsData ProposalLock) {- | Haskell-level redeemer for Stake scripts. @@ -173,8 +186,14 @@ data StakeDatum = StakeDatum -- for the stake to be usable for deposits and withdrawals. } deriving stock (Show, GHC.Generic) - -PlutusTx.makeIsDataIndexed ''StakeDatum [('StakeDatum, 0)] + deriving anyclass (Generic) + deriving + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + ) + via (ProductIsData StakeDatum) -------------------------------------------------------------------------------- @@ -215,16 +234,16 @@ newtype PStakeDatum (s :: S) = PStakeDatum , -- | @since 0.1.0 PEq ) - via (PIsDataReprInstances PStakeDatum) + via (DerivePNewtype' PStakeDatum) -- | @since 0.1.0 instance Plutarch.Lift.PUnsafeLiftDecl PStakeDatum where type PLifted PStakeDatum = StakeDatum -- | @since 0.1.0 -deriving via (DerivePConstantViaData StakeDatum PStakeDatum) instance (Plutarch.Lift.PConstantDecl StakeDatum) +deriving via (DerivePConstantViaDataList StakeDatum PStakeDatum) instance (Plutarch.Lift.PConstantDecl StakeDatum) -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PStakeDatum) instance PTryFrom PData (PAsData PStakeDatum) +deriving via PAsData (DerivePNewtype' PStakeDatum) instance PTryFrom PData (PAsData PStakeDatum) {- | Plutarch-level redeemer for Stake scripts. @@ -285,15 +304,15 @@ newtype PProposalLock (s :: S) = PProposalLock deriving anyclass (PIsDataRepr) deriving (PlutusType, PIsData, PDataFields, PEq) - via (PIsDataReprInstances PProposalLock) + via (DerivePNewtype' PProposalLock) deriving via - PAsData (PIsDataReprInstances PProposalLock) + PAsData (DerivePNewtype' PProposalLock) instance PTryFrom PData (PAsData PProposalLock) instance Plutarch.Lift.PUnsafeLiftDecl PProposalLock where type PLifted PProposalLock = ProposalLock -deriving via (DerivePConstantViaData ProposalLock PProposalLock) instance (Plutarch.Lift.PConstantDecl ProposalLock) +deriving via (DerivePConstantViaDataList ProposalLock PProposalLock) instance (Plutarch.Lift.PConstantDecl ProposalLock) -------------------------------------------------------------------------------- diff --git a/bench.csv b/bench.csv index d41a8162..72557280 100644 --- a/bench.csv +++ b/bench.csv @@ -2,36 +2,36 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,87839169,243032,8733 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609 -Agora/Stake/policy/stakeCreation,52241265,152127,2514 -Agora/Stake/validator/stakeDepositWithdraw deposit,180880812,492023,4431 -Agora/Stake/validator/stakeDepositWithdraw withdraw,180880812,492023,4419 -Agora/Proposal/policy/proposalCreation,23140177,69194,1517 -Agora/Proposal/validator/cosignature/proposal,339142002,963240,8640 -Agora/Proposal/validator/cosignature/stake,126327509,315061,4964 -Agora/Proposal/validator/voting/proposal,296502589,833052,8568 -Agora/Proposal/validator/voting/stake,121170376,320853,4937 -Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,291922922,820018,8473 -Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,307211397,861958,8482 -Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,295603412,828131,8482 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,291426433,819116,8475 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,292844967,822421,8476 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,293975945,824825,8476 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",303185955,850282,8520 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",273908264,775516,8524 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",269372007,765161,8524 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",269372007,765161,8524 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2908698194,8182353,29874 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2616813289,7385454,30143 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2465055872,6938449,30042 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2465055872,6938449,30042 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,96559225,271500,9112 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,114802087,321461,3723 +Agora/Stake/policy/stakeCreation,50939580,148729,2387 +Agora/Stake/validator/stakeDepositWithdraw deposit,181581435,493259,4413 +Agora/Stake/validator/stakeDepositWithdraw withdraw,181581435,493259,4401 +Agora/Proposal/policy/proposalCreation,23140177,69194,1503 +Agora/Proposal/validator/cosignature/proposal,325643495,929930,8840 +Agora/Proposal/validator/cosignature/stake,125315872,312659,4934 +Agora/Proposal/validator/voting/proposal,281136993,794418,8758 +Agora/Proposal/validator/voting/stake,120122971,320497,4891 +Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,275767527,779218,8665 +Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,290854622,820626,8674 +Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,279448017,787331,8674 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,275271038,778316,8667 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,276689572,781621,8668 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,277820550,784025,8668 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",289580399,816378,8718 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",259859750,740610,8720 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",256153418,732289,8722 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",256153418,732289,8722 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2828039393,7977807,29495 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2501684605,7096512,29680 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2393040618,6756747,29664 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2393040618,6756747,29664 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Governor/policy/GST minting,51007235,144191,2034 -Agora/Governor/validator/proposal creation,315830140,850201,9247 -Agora/Governor/validator/GATs minting,421359049,1145136,9364 -Agora/Governor/validator/mutate governor state,88986020,248491,8834 +Agora/Governor/policy/GST minting,55335573,158459,2162 +Agora/Governor/validator/proposal creation,322870773,877643,9616 +Agora/Governor/validator/GATs minting,440461675,1209344,9735 +Agora/Governor/validator/mutate governor state,97706076,276959,9217 From 564b1c4e665b89c64f50cfb433584971dd3fae74 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Mon, 20 Jun 2022 15:59:35 +0200 Subject: [PATCH 09/78] init servant-based API for script exporting --- agora-scripts/API.hs | 130 +++++++++++++++++++++++++++++++++++++++ agora-scripts/Options.hs | 21 +++---- agora-scripts/Scripts.hs | 108 +------------------------------- agora.cabal | 10 ++- 4 files changed, 149 insertions(+), 120 deletions(-) create mode 100644 agora-scripts/API.hs diff --git a/agora-scripts/API.hs b/agora-scripts/API.hs new file mode 100644 index 00000000..bba06a34 --- /dev/null +++ b/agora-scripts/API.hs @@ -0,0 +1,130 @@ +{-# LANGUAGE TemplateHaskell #-} +{- | +Module : API +Maintainer : emi@haskell.fyi +Description: API for script exporter. + +API for script exporter. +-} + +module API (AgoraScripts(..), ScriptParams(..), API, agoraScripts, runServer) where + +import Servant.API (type (:>), ReqBody, JSON, Post) +import PlutusLedgerApi.V1 (TxOutRef) +import Data.Tagged (Tagged) +import Agora.SafeMoney (GTTag) +import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) +import qualified Data.Aeson as Aeson +import qualified GHC.Generics as GHC +import Agora.ScriptInfo (PolicyInfo, ValidatorInfo, mkPolicyInfo, mkValidatorInfo) +import Agora.Stake (Stake(..)) +import Agora.Proposal (Proposal(..)) +import Agora.AuthorityToken (AuthorityToken(..), authorityTokenPolicy) +import Agora.Governor (Governor(..)) +import Development.GitRev (gitBranch, gitHash) +import qualified Agora.Governor as Governor +import qualified PlutusLedgerApi.V1.Value as Value +import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) +import Agora.Governor.Scripts (governorPolicy, authorityTokenSymbolFromGovernor, authorityTokenFromGovernor, proposalFromGovernor, stakeFromGovernor, governorValidator) +import Agora.Treasury (treasuryValidator) +import Agora.Proposal.Scripts (proposalValidator, proposalPolicy) +import Agora.Stake.Scripts (stakeValidator, stakePolicy) +import qualified Servant.Server as Servant +import Data.Proxy (Proxy(Proxy)) +import qualified Network.Wai.Handler.Warp as Warp +import Data.Function ((&)) +import qualified Network.Wai as Wai +import qualified Network.HTTP.Types as Http +import Prettyprinter (layoutPretty, defaultLayoutOptions, hsep, viaShow, (<+>)) +import Prettyprinter.Render.String (renderString) +import Options (Options(..)) +import Text.Printf (printf) + +-- | Params required for creating script export. +data ScriptParams = ScriptParams + { governorInitialSpend :: TxOutRef + , gtClassRef :: Tagged GTTag AssetClass + , maximumCosigners :: Integer + } + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) + deriving stock (Show, Eq, GHC.Generic) + +-- | Scripts that get exported. +data AgoraScripts = AgoraScripts + { gitRev :: String + , governorPolicyInfo :: PolicyInfo + , governorValidatorInfo :: ValidatorInfo + , stakePolicyInfo :: PolicyInfo + , stakeValidatorInfo :: ValidatorInfo + , proposalPolicyInfo :: PolicyInfo + , proposalValidatorInfo :: ValidatorInfo + , treasuryValidatorInfo :: ValidatorInfo + , authorityTokenPolicyInfo :: PolicyInfo + } + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) + deriving stock (Show, Eq, GHC.Generic) + +-- | Servant API type for script generation. +type API = "generate-scripts" :> ReqBody '[JSON] ScriptParams :> Post '[JSON] AgoraScripts + +-- | Run a Warp server that exposes a script generation endpoint. +runServer :: Options -> IO () +runServer options = do + let settings = + Warp.defaultSettings + & Warp.setPort options.port + & Warp.setLogger + ( \req status _maybeFileSize -> + putStrLn . renderString . layoutPretty defaultLayoutOptions $ + hsep + [ "[info]" + , "[" <> "Status:" <+> viaShow (Http.statusCode status) <> "]" + , viaShow $ Wai.requestMethod req + , viaShow $ Wai.rawPathInfo req + ] + ) + + printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) + Warp.runSettings settings $ Servant.serve (Proxy @API) (pure . agoraScripts) + +-- | Create scripts from params. +agoraScripts :: ScriptParams -> AgoraScripts +agoraScripts params = + AgoraScripts + { gitRev = revision + , governorPolicyInfo = mkPolicyInfo (governorPolicy governor) + , governorValidatorInfo = mkValidatorInfo (governorValidator governor) + , stakePolicyInfo = mkPolicyInfo (stakePolicy params.gtClassRef) + , stakeValidatorInfo = mkValidatorInfo (stakeValidator stake) + , proposalPolicyInfo = mkPolicyInfo (proposalPolicy governorSTAssetClass) + , proposalValidatorInfo = mkValidatorInfo (proposalValidator proposal) + , treasuryValidatorInfo = mkValidatorInfo (treasuryValidator authorityTokenSymbol) + , authorityTokenPolicyInfo = mkPolicyInfo (authorityTokenPolicy authorityToken) + } + where + revision :: String + revision = $(gitBranch) <> "@" <> $(gitHash) + + governor :: Governor + governor = + Governor + { Governor.gstOutRef = params.governorInitialSpend + , Governor.gtClassRef = params.gtClassRef + , Governor.maximumCosigners = params.maximumCosigners + } + + authorityToken :: AuthorityToken + authorityToken = authorityTokenFromGovernor governor + + authorityTokenSymbol :: CurrencySymbol + authorityTokenSymbol = authorityTokenSymbolFromGovernor governor + + governorSTAssetClass :: AssetClass + governorSTAssetClass = + Value.assetClass (mintingPolicySymbol $ mkMintingPolicy $ governorPolicy governor) "" + + proposal :: Proposal + proposal = proposalFromGovernor governor + + stake :: Stake + stake = stakeFromGovernor governor diff --git a/agora-scripts/Options.hs b/agora-scripts/Options.hs index e56d09a0..38f473f6 100644 --- a/agora-scripts/Options.hs +++ b/agora-scripts/Options.hs @@ -9,30 +9,23 @@ module Options (Options (..), parseOptions) where import Options.Applicative ((<**>)) import Options.Applicative qualified as Opt +import qualified Network.Wai.Handler.Warp as Warp data Options = Options - { config :: FilePath - , output :: FilePath + { port :: Warp.Port } deriving stock (Show, Eq) opt :: Opt.Parser Options opt = Options - <$> Opt.strOption - ( Opt.long "config" - <> Opt.short 'c' - <> Opt.metavar "CONFIG_PATH" - <> Opt.value "./agora-scripts/agora-params.json" + <$> Opt.option Opt.auto + ( Opt.long "port" + <> Opt.short 'p' + <> Opt.metavar "PORT" + <> Opt.value 3939 <> Opt.help "The path where the script configuration is." ) - <*> Opt.strOption - ( Opt.long "output" - <> Opt.short 'o' - <> Opt.metavar "OUTPUT_PATH" - <> Opt.value "./agora-scripts/agora-scripts.json" - <> Opt.help "Output where generated scripts will be." - ) parseOptions :: IO Options parseOptions = Opt.execParser p diff --git a/agora-scripts/Scripts.hs b/agora-scripts/Scripts.hs index 132f5ce3..fd72c4f7 100644 --- a/agora-scripts/Scripts.hs +++ b/agora-scripts/Scripts.hs @@ -9,113 +9,11 @@ Export scripts given configuration. -} module Main (main) where -import Agora.AuthorityToken (AuthorityToken, authorityTokenPolicy) -import Agora.Governor (Governor (Governor)) -import Agora.Governor qualified as Governor -import Agora.Governor.Scripts ( - authorityTokenFromGovernor, - authorityTokenSymbolFromGovernor, - governorPolicy, - governorValidator, - proposalFromGovernor, - stakeFromGovernor, - ) -import Agora.Proposal (Proposal) -import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) -import Agora.SafeMoney (GTTag) -import Agora.ScriptInfo (PolicyInfo, ValidatorInfo, mkPolicyInfo, mkValidatorInfo) -import Agora.Stake (Stake) -import Agora.Stake.Scripts (stakePolicy, stakeValidator) -import Agora.Treasury (treasuryValidator) -import Control.Monad ((>=>)) -import Data.Aeson qualified as Aeson -import Data.Tagged (Tagged) -import Development.GitRev (gitBranch, gitHash) -import GHC.Generics qualified as GHC -import Options (Options (..), parseOptions) -import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) -import PlutusLedgerApi.V1 (TxOutRef) -import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) -import PlutusLedgerApi.V1.Value qualified as Value -import System.Exit (exitFailure) -import Text.Printf (printf) - --- | Params required for creating script export. -data ScriptParams = ScriptParams - { governorInitialSpend :: TxOutRef - , gtClassRef :: Tagged GTTag AssetClass - , maximumCosigners :: Integer - } - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic) - --- | Scripts that get exported. -data AgoraScripts = AgoraScripts - { gitRev :: String - , governorPolicyInfo :: PolicyInfo - , governorValidatorInfo :: ValidatorInfo - , stakePolicyInfo :: PolicyInfo - , stakeValidatorInfo :: ValidatorInfo - , proposalPolicyInfo :: PolicyInfo - , proposalValidatorInfo :: ValidatorInfo - , treasuryValidatorInfo :: ValidatorInfo - , authorityTokenPolicyInfo :: PolicyInfo - } - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic) +import Options (parseOptions) +import API (runServer) main :: IO () main = do options <- parseOptions - params <- - Aeson.eitherDecodeFileStrict @ScriptParams options.config - >>= either (putStrLn >=> const exitFailure) pure - - let scripts = agoraScripts params - - Aeson.encodeFile options.output scripts - - printf "Done! Wrote to %s\n" options.output - --- | Create scripts from params. -agoraScripts :: ScriptParams -> AgoraScripts -agoraScripts params = - AgoraScripts - { gitRev = revision - , governorPolicyInfo = mkPolicyInfo (governorPolicy governor) - , governorValidatorInfo = mkValidatorInfo (governorValidator governor) - , stakePolicyInfo = mkPolicyInfo (stakePolicy params.gtClassRef) - , stakeValidatorInfo = mkValidatorInfo (stakeValidator stake) - , proposalPolicyInfo = mkPolicyInfo (proposalPolicy governorSTAssetClass) - , proposalValidatorInfo = mkValidatorInfo (proposalValidator proposal) - , treasuryValidatorInfo = mkValidatorInfo (treasuryValidator authorityTokenSymbol) - , authorityTokenPolicyInfo = mkPolicyInfo (authorityTokenPolicy authorityToken) - } - where - revision :: String - revision = $(gitBranch) <> "@" <> $(gitHash) - - governor :: Governor - governor = - Governor - { Governor.gstOutRef = params.governorInitialSpend - , Governor.gtClassRef = params.gtClassRef - , Governor.maximumCosigners = params.maximumCosigners - } - - authorityToken :: AuthorityToken - authorityToken = authorityTokenFromGovernor governor - - authorityTokenSymbol :: CurrencySymbol - authorityTokenSymbol = authorityTokenSymbolFromGovernor governor - - governorSTAssetClass :: AssetClass - governorSTAssetClass = - Value.assetClass (mintingPolicySymbol $ mkMintingPolicy $ governorPolicy governor) "" - - proposal :: Proposal - proposal = proposalFromGovernor governor - - stake :: Stake - stake = stakeFromGovernor governor + runServer options diff --git a/agora.cabal b/agora.cabal index 8e8ba53d..2e903624 100644 --- a/agora.cabal +++ b/agora.cabal @@ -234,11 +234,19 @@ executable agora-scripts import: lang, deps, exe-opts main-is: Scripts.hs hs-source-dirs: agora-scripts - other-modules: Options + other-modules: + Options + API build-depends: , agora , gitrev , optparse-applicative + , servant + , servant-server + , warp + , wai + , http-types + , prettyprinter executable agora-purescript-bridge import: lang, deps, exe-opts From e862de7e59cd07d626be48457565dcd21c760d98 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Tue, 21 Jun 2022 14:48:31 +0200 Subject: [PATCH 10/78] create initial POC script generating API --- agora-scripts/API.hs | 111 +++++++++++------------ agora-scripts/Cache.hs | 1 + agora-scripts/Codec/Serialise/Orphans.hs | 41 +++++++++ agora-scripts/Data/Cache/Cached.hs | 41 +++++++++ agora-scripts/Options.hs | 5 +- agora-scripts/Scripts.hs | 21 ++--- agora-scripts/Types.hs | 42 +++++++++ agora.cabal | 16 +++- flake.nix | 14 ++- 9 files changed, 210 insertions(+), 82 deletions(-) create mode 100644 agora-scripts/Cache.hs create mode 100644 agora-scripts/Codec/Serialise/Orphans.hs create mode 100644 agora-scripts/Data/Cache/Cached.hs create mode 100644 agora-scripts/Types.hs diff --git a/agora-scripts/API.hs b/agora-scripts/API.hs index bba06a34..499faf8d 100644 --- a/agora-scripts/API.hs +++ b/agora-scripts/API.hs @@ -1,68 +1,49 @@ {-# LANGUAGE TemplateHaskell #-} -{- | -Module : API -Maintainer : emi@haskell.fyi -Description: API for script exporter. -API for script exporter. --} +{- | Module : API + Maintainer : emi@haskell.fyi + Description: API for script exporter. -module API (AgoraScripts(..), ScriptParams(..), API, agoraScripts, runServer) where + API for script exporter. +-} +module API ( + AgoraScripts (..), + ScriptParams (..), + API, + agoraScripts, + runServer, +) where -import Servant.API (type (:>), ReqBody, JSON, Post) -import PlutusLedgerApi.V1 (TxOutRef) -import Data.Tagged (Tagged) -import Agora.SafeMoney (GTTag) -import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) -import qualified Data.Aeson as Aeson -import qualified GHC.Generics as GHC -import Agora.ScriptInfo (PolicyInfo, ValidatorInfo, mkPolicyInfo, mkValidatorInfo) -import Agora.Stake (Stake(..)) -import Agora.Proposal (Proposal(..)) -import Agora.AuthorityToken (AuthorityToken(..), authorityTokenPolicy) -import Agora.Governor (Governor(..)) -import Development.GitRev (gitBranch, gitHash) -import qualified Agora.Governor as Governor -import qualified PlutusLedgerApi.V1.Value as Value -import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) -import Agora.Governor.Scripts (governorPolicy, authorityTokenSymbolFromGovernor, authorityTokenFromGovernor, proposalFromGovernor, stakeFromGovernor, governorValidator) +import Agora.AuthorityToken (AuthorityToken (..), authorityTokenPolicy) +import Agora.Governor (Governor (..)) +import Agora.Governor qualified as Governor +import Agora.Governor.Scripts (authorityTokenFromGovernor, authorityTokenSymbolFromGovernor, governorPolicy, governorValidator, proposalFromGovernor, stakeFromGovernor) +import Agora.Proposal (Proposal (..)) +import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) +import Agora.ScriptInfo (mkPolicyInfo, mkValidatorInfo) +import Agora.Stake (Stake (..)) +import Agora.Stake.Scripts (stakePolicy, stakeValidator) import Agora.Treasury (treasuryValidator) -import Agora.Proposal.Scripts (proposalValidator, proposalPolicy) -import Agora.Stake.Scripts (stakeValidator, stakePolicy) -import qualified Servant.Server as Servant -import Data.Proxy (Proxy(Proxy)) -import qualified Network.Wai.Handler.Warp as Warp +import Codec.Serialise.Orphans () +import Data.Cache.Cached (cachedFor) import Data.Function ((&)) -import qualified Network.Wai as Wai -import qualified Network.HTTP.Types as Http -import Prettyprinter (layoutPretty, defaultLayoutOptions, hsep, viaShow, (<+>)) +import Data.Proxy (Proxy (Proxy)) +import Development.GitRev (gitBranch, gitHash) +import Network.HTTP.Types qualified as Http +import Network.Wai qualified as Wai +import Network.Wai.Handler.Warp qualified as Warp +import Network.Wai.Middleware.Cors (CorsResourcePolicy (corsRequestHeaders), cors, simpleCorsResourcePolicy) +import Options (Options (..)) +import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) +import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) +import PlutusLedgerApi.V1.Value qualified as Value +import Prettyprinter (defaultLayoutOptions, hsep, layoutPretty, viaShow, (<+>)) import Prettyprinter.Render.String (renderString) -import Options (Options(..)) +import Servant.API (JSON, Post, ReqBody, type (:>)) +import Servant.Server qualified as Servant +import System.Clock (TimeSpec (TimeSpec)) import Text.Printf (printf) - --- | Params required for creating script export. -data ScriptParams = ScriptParams - { governorInitialSpend :: TxOutRef - , gtClassRef :: Tagged GTTag AssetClass - , maximumCosigners :: Integer - } - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic) - --- | Scripts that get exported. -data AgoraScripts = AgoraScripts - { gitRev :: String - , governorPolicyInfo :: PolicyInfo - , governorValidatorInfo :: ValidatorInfo - , stakePolicyInfo :: PolicyInfo - , stakeValidatorInfo :: ValidatorInfo - , proposalPolicyInfo :: PolicyInfo - , proposalValidatorInfo :: ValidatorInfo - , treasuryValidatorInfo :: ValidatorInfo - , authorityTokenPolicyInfo :: PolicyInfo - } - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic) +import Types (AgoraScripts (..), ScriptParams (..)) -- | Servant API type for script generation. type API = "generate-scripts" :> ReqBody '[JSON] ScriptParams :> Post '[JSON] AgoraScripts @@ -84,8 +65,20 @@ runServer options = do ] ) + corsPolicy = + simpleCorsResourcePolicy + { -- NOTE: Webpack dev server requires this for CORS workaround. + corsRequestHeaders = "content-type" : corsRequestHeaders simpleCorsResourcePolicy + } + corsMiddleware = cors . const $ Just corsPolicy + + -- Scripts stay cached for five minutes + agoraScripts' <- cachedFor (Just $ TimeSpec 300 0) agoraScripts + printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) - Warp.runSettings settings $ Servant.serve (Proxy @API) (pure . agoraScripts) + Servant.serve (Proxy @API) agoraScripts' + & corsMiddleware + & Warp.runSettings settings -- | Create scripts from params. agoraScripts :: ScriptParams -> AgoraScripts @@ -102,6 +95,8 @@ agoraScripts params = , authorityTokenPolicyInfo = mkPolicyInfo (authorityTokenPolicy authorityToken) } where + -- This encodes the git revision of the server. It's useful for the caller + -- to be able to ensure they are compatible with it. revision :: String revision = $(gitBranch) <> "@" <> $(gitHash) diff --git a/agora-scripts/Cache.hs b/agora-scripts/Cache.hs new file mode 100644 index 00000000..bfbad915 --- /dev/null +++ b/agora-scripts/Cache.hs @@ -0,0 +1 @@ +module Cache where diff --git a/agora-scripts/Codec/Serialise/Orphans.hs b/agora-scripts/Codec/Serialise/Orphans.hs new file mode 100644 index 00000000..62d69bf7 --- /dev/null +++ b/agora-scripts/Codec/Serialise/Orphans.hs @@ -0,0 +1,41 @@ +{-# OPTIONS_GHC -Wno-orphans #-} + +{- | +Module : Codec.Serialise.Orphans +Maintainer : emi@haskell.fyi +Description: Orphan instances for Serialising and Hashing Cardano types. + +Orphan instances for Serialising and Hashing Cardano types. +-} +module Codec.Serialise.Orphans () where + +import Codec.Serialise (Serialise, serialise) +import Data.Hashable (Hashable (hashWithSalt)) +import Data.Tagged (Tagged (Tagged)) +import PlutusLedgerApi.V1 (TxId, TxOutRef) +import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol, TokenName) +import Types (ScriptParams) + +deriving anyclass instance + Serialise TxOutRef + +deriving anyclass instance + Serialise TxId + +deriving anyclass instance + Serialise AssetClass + +deriving anyclass instance + Serialise CurrencySymbol + +deriving anyclass instance + Serialise TokenName + +deriving newtype instance + Serialise a => + Serialise (Tagged s a) + +deriving anyclass instance Serialise ScriptParams + +instance Hashable ScriptParams where + hashWithSalt s scriptParams = hashWithSalt s (serialise scriptParams) diff --git a/agora-scripts/Data/Cache/Cached.hs b/agora-scripts/Data/Cache/Cached.hs new file mode 100644 index 00000000..0b1acb59 --- /dev/null +++ b/agora-scripts/Data/Cache/Cached.hs @@ -0,0 +1,41 @@ +{- | Module : API + Maintainer : emi@haskell.fyi + Description: API for script exporter. + + API for script exporter. +-} +module Data.Cache.Cached ( + cached, + cachedFor, +) where + +import Control.Monad.IO.Class (MonadIO (liftIO)) +import Data.Cache qualified as Cache +import Data.Functor ((<&>)) +import Data.Hashable (Hashable) +import System.Clock (TimeSpec) + +{- | 'cachedFor' but items last forever. + + Uses a HashMap under the hood. +-} +cached :: (Monad m, MonadIO m, Hashable k, Ord k) => (k -> v) -> IO (k -> m v) +cached = cachedFor Nothing + +{- | Create a cached version of a function tainting result with MonadIO context. + + Results are cached dependent on the first argument, @'Maybe' 'TimeSpec'@. + + Uses a HashMap under the hood. +-} +cachedFor :: (Monad m, MonadIO m, Hashable k, Ord k) => Maybe TimeSpec -> (k -> v) -> IO (k -> m v) +cachedFor t f = + Cache.newCache t <&> \cache k -> do + res <- liftIO $ Cache.lookup cache k + case res of + Nothing -> do + let v = f k + liftIO $ Cache.insert cache k v + pure v + Just v -> do + pure v diff --git a/agora-scripts/Options.hs b/agora-scripts/Options.hs index 38f473f6..4187a1db 100644 --- a/agora-scripts/Options.hs +++ b/agora-scripts/Options.hs @@ -7,9 +7,9 @@ Command line options for 'agora-scripts'. -} module Options (Options (..), parseOptions) where +import Network.Wai.Handler.Warp qualified as Warp import Options.Applicative ((<**>)) import Options.Applicative qualified as Opt -import qualified Network.Wai.Handler.Warp as Warp data Options = Options { port :: Warp.Port @@ -19,7 +19,8 @@ data Options = Options opt :: Opt.Parser Options opt = Options - <$> Opt.option Opt.auto + <$> Opt.option + Opt.auto ( Opt.long "port" <> Opt.short 'p' <> Opt.metavar "PORT" diff --git a/agora-scripts/Scripts.hs b/agora-scripts/Scripts.hs index fd72c4f7..a665c969 100644 --- a/agora-scripts/Scripts.hs +++ b/agora-scripts/Scripts.hs @@ -1,19 +1,14 @@ -{-# LANGUAGE TemplateHaskell #-} +{- | Module : Scripts + Maintainer : emi@haskell.fyi + Description: Export scripts given configuration. -{- | -Module : Scripts -Maintainer : emi@haskell.fyi -Description: Export scripts given configuration. - -Export scripts given configuration. + Export scripts given configuration. -} -module Main (main) where +module Scripts (main) where -import Options (parseOptions) import API (runServer) +import Options (parseOptions) main :: IO () -main = do - options <- parseOptions - - runServer options +main = + parseOptions >>= runServer diff --git a/agora-scripts/Types.hs b/agora-scripts/Types.hs new file mode 100644 index 00000000..db32cf63 --- /dev/null +++ b/agora-scripts/Types.hs @@ -0,0 +1,42 @@ +{- | +Module : Types +Maintainer : emi@haskell.fyi +Description: Param and script types for generation. + +Param and script types for generation. +-} +module Types (ScriptParams (..), AgoraScripts (..)) where + +import Agora.SafeMoney (GTTag) +import Agora.ScriptInfo (PolicyInfo, ValidatorInfo) +import Data.Aeson qualified as Aeson +import Data.Tagged (Tagged) +import GHC.Generics qualified as GHC +import PlutusLedgerApi.V1 (TxOutRef) +import PlutusLedgerApi.V1.Value (AssetClass) + +-- | Params required for creating script export. +data ScriptParams where + ScriptParams :: + { governorInitialSpend :: TxOutRef + , gtClassRef :: Tagged GTTag AssetClass + , maximumCosigners :: Integer + } -> + ScriptParams + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) + deriving stock (Show, Eq, GHC.Generic, Ord) + +-- | Scripts that get exported. +data AgoraScripts = AgoraScripts + { gitRev :: String + , governorPolicyInfo :: PolicyInfo + , governorValidatorInfo :: ValidatorInfo + , stakePolicyInfo :: PolicyInfo + , stakeValidatorInfo :: ValidatorInfo + , proposalPolicyInfo :: PolicyInfo + , proposalValidatorInfo :: ValidatorInfo + , treasuryValidatorInfo :: ValidatorInfo + , authorityTokenPolicyInfo :: PolicyInfo + } + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) + deriving stock (Show, Eq, GHC.Generic) diff --git a/agora.cabal b/agora.cabal index 2e903624..4bcf4b5e 100644 --- a/agora.cabal +++ b/agora.cabal @@ -235,18 +235,26 @@ executable agora-scripts main-is: Scripts.hs hs-source-dirs: agora-scripts other-modules: - Options API + Codec.Serialise.Orphans + Data.Cache.Cached + Options + Types + build-depends: , agora + , cache + , clock , gitrev + , hashable + , http-types , optparse-applicative + , prettyprinter , servant , servant-server - , warp , wai - , http-types - , prettyprinter + , wai-cors + , warp executable agora-purescript-bridge import: lang, deps, exe-opts diff --git a/flake.nix b/flake.nix index 15ef8987..a6d06bfd 100644 --- a/flake.nix +++ b/flake.nix @@ -140,11 +140,15 @@ ); applyDep = pkgs: o: - let h = myhackage pkgs.system o.compiler-nix-name; in - (plutarch.applyPlutarchDep pkgs o) // { - modules = haskellModules ++ [ h.module ] ++ (o.modules or [ ]); - extra-hackages = [ (import h.hackageNix) ] ++ (o.extra-hackages or [ ]); - extra-hackage-tarballs = { _xNJUd_plutarch-hackage = h.hackageTarball; } // (o.extra-hackage-tarballs or { }); + let + h = myhackage pkgs.system o.compiler-nix-name; + o' = (plutarch.applyPlutarchDep pkgs o); + in + o' // rec { + modules = haskellModules ++ [ h.module ] ++ (o'.modules or [ ]); + extra-hackages = [ (import h.hackageNix) ] ++ (o'.extra-hackages or [ ]); + extra-hackage-tarballs = { _xNJUd_plutarch-hackage = h.hackageTarball; }; + cabalProjectLocal = (o'.cabalProjectLocal or "") + " , cache >= 0.1.3.0"; }; projectForGhc = compiler-nix-name: system: From 5f2d191ae70dabbaadf4e28889bd1c50cfebc7c8 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Tue, 21 Jun 2022 20:53:20 +0200 Subject: [PATCH 11/78] add granular script querying support --- agora-scripts/API.hs | 27 ++++++++++++++++++---- agora-scripts/Types.hs | 44 +++++++++++++++++++++++++++++++++++- agora.cabal | 2 ++ agora/Agora/Aeson/Orphans.hs | 9 ++++++++ agora/Agora/ScriptInfo.hs | 14 ++++++++++-- 5 files changed, 89 insertions(+), 7 deletions(-) diff --git a/agora-scripts/API.hs b/agora-scripts/API.hs index 499faf8d..efccc4e3 100644 --- a/agora-scripts/API.hs +++ b/agora-scripts/API.hs @@ -25,7 +25,9 @@ import Agora.Stake (Stake (..)) import Agora.Stake.Scripts (stakePolicy, stakeValidator) import Agora.Treasury (treasuryValidator) import Codec.Serialise.Orphans () +import Data.Aeson qualified as Aeson import Data.Cache.Cached (cachedFor) +import Data.Default.Class (Default (def)) import Data.Function ((&)) import Data.Proxy (Proxy (Proxy)) import Development.GitRev (gitBranch, gitHash) @@ -39,14 +41,16 @@ import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) import PlutusLedgerApi.V1.Value qualified as Value import Prettyprinter (defaultLayoutOptions, hsep, layoutPretty, viaShow, (<+>)) import Prettyprinter.Render.String (renderString) -import Servant.API (JSON, Post, ReqBody, type (:>)) +import Servant.API (JSON, Post, ReqBody, (:<|>) (..), type (:>)) import Servant.Server qualified as Servant import System.Clock (TimeSpec (TimeSpec)) import Text.Printf (printf) -import Types (AgoraScripts (..), ScriptParams (..)) +import Types (AgoraScripts (..), Builders, ScriptParams (..), ScriptQuery, insertBuilder, runQuery) -- | Servant API type for script generation. -type API = "generate-scripts" :> ReqBody '[JSON] ScriptParams :> Post '[JSON] AgoraScripts +type API = + "generate-scripts" :> ReqBody '[JSON] ScriptParams :> Post '[JSON] AgoraScripts + :<|> "query-script" :> ReqBody '[JSON] ScriptQuery :> Post '[JSON] Aeson.Value -- | Run a Warp server that exposes a script generation endpoint. runServer :: Options -> IO () @@ -74,12 +78,27 @@ runServer options = do -- Scripts stay cached for five minutes agoraScripts' <- cachedFor (Just $ TimeSpec 300 0) agoraScripts + query <- cachedFor (Just $ TimeSpec 300 0) (`runQuery` agoraBuilders) printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) - Servant.serve (Proxy @API) agoraScripts' + Servant.serve + (Proxy @API) + (agoraScripts' :<|> query) & corsMiddleware & Warp.runSettings settings +agoraBuilders :: Builders +agoraBuilders = + def + & insertBuilder "governorPolicy" ((.governorPolicyInfo) . agoraScripts) + & insertBuilder "governorValidator" ((.governorValidatorInfo) . agoraScripts) + & insertBuilder "stakePolicyInfo" ((.stakePolicyInfo) . agoraScripts) + & insertBuilder "stakeValidatorInfo" ((.stakeValidatorInfo) . agoraScripts) + & insertBuilder "proposalPolicyInfo" ((.proposalPolicyInfo) . agoraScripts) + & insertBuilder "proposalValidatorInfo" ((.proposalValidatorInfo) . agoraScripts) + & insertBuilder "treasuryValidatorInfo" ((.treasuryValidatorInfo) . agoraScripts) + & insertBuilder "authorityTokenPolicyInfo" ((.authorityTokenPolicyInfo) . agoraScripts) + -- | Create scripts from params. agoraScripts :: ScriptParams -> AgoraScripts agoraScripts params = diff --git a/agora-scripts/Types.hs b/agora-scripts/Types.hs index db32cf63..7a364046 100644 --- a/agora-scripts/Types.hs +++ b/agora-scripts/Types.hs @@ -5,12 +5,26 @@ Description: Param and script types for generation. Param and script types for generation. -} -module Types (ScriptParams (..), AgoraScripts (..)) where +module Types ( + ScriptParams (..), + AgoraScripts (..), + ScriptQuery (..), + Builders (..), + throughJSON, + runQuery, + insertBuilder, +) where import Agora.SafeMoney (GTTag) import Agora.ScriptInfo (PolicyInfo, ValidatorInfo) import Data.Aeson qualified as Aeson +import Data.Coerce (coerce) +import Data.Default.Class (Default (def)) +import Data.Hashable (Hashable) +import Data.Map.Strict (Map) +import Data.Map.Strict qualified as Map import Data.Tagged (Tagged) +import Data.Text (Text) import GHC.Generics qualified as GHC import PlutusLedgerApi.V1 (TxOutRef) import PlutusLedgerApi.V1.Value (AssetClass) @@ -40,3 +54,31 @@ data AgoraScripts = AgoraScripts } deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) deriving stock (Show, Eq, GHC.Generic) + +data ScriptQuery = ScriptQuery + { name :: Text + , paramsPayload :: Aeson.Value + } + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) + deriving stock (Show, Eq, GHC.Generic, Ord) + deriving anyclass (Hashable) + +-- | Run a query on Builders. +runQuery :: ScriptQuery -> Builders -> Aeson.Value +runQuery s (Builders b) = + maybe Aeson.Null ($ s.paramsPayload) (Map.lookup s.name b) + +throughJSON :: (Aeson.FromJSON p, Aeson.ToJSON s) => (p -> s) -> (Aeson.Value -> Aeson.Value) +throughJSON f = Aeson.toJSON . \case { Aeson.Error _ -> Nothing; Aeson.Success v -> Just (f v) } . Aeson.fromJSON + +-- | Represents a list of named pure functions. +newtype Builders = Builders + { getBuilders :: Map Text (Aeson.Value -> Aeson.Value) + } + +instance Default Builders where + def = Builders Map.empty + +-- | Insert a pure function into the Builders map. +insertBuilder :: (Aeson.FromJSON p, Aeson.ToJSON s) => Text -> (p -> s) -> Builders -> Builders +insertBuilder k = coerce . Map.insert k . throughJSON diff --git a/agora.cabal b/agora.cabal index 4bcf4b5e..8dd8e274 100644 --- a/agora.cabal +++ b/agora.cabal @@ -28,6 +28,7 @@ common lang BinaryLiterals ConstrainedClassMethods ConstraintKinds + DuplicateRecordFields DataKinds DeriveAnyClass DeriveDataTypeable @@ -255,6 +256,7 @@ executable agora-scripts , wai , wai-cors , warp + , containers executable agora-purescript-bridge import: lang, deps, exe-opts diff --git a/agora/Agora/Aeson/Orphans.hs b/agora/Agora/Aeson/Orphans.hs index 75ff1aff..6c14c623 100644 --- a/agora/Agora/Aeson/Orphans.hs +++ b/agora/Agora/Aeson/Orphans.hs @@ -109,6 +109,15 @@ deriving via instance (Aeson.FromJSON Plutus.ValidatorHash) +deriving via + (AsBase16Bytes Plutus.BuiltinByteString) + instance + (Aeson.ToJSON Plutus.BuiltinByteString) +deriving via + (AsBase16Bytes Plutus.BuiltinByteString) + instance + (Aeson.FromJSON Plutus.BuiltinByteString) + deriving via (AsBase16Codec Plutus.Validator) instance diff --git a/agora/Agora/ScriptInfo.hs b/agora/Agora/ScriptInfo.hs index 09c7ac6a..49426547 100644 --- a/agora/Agora/ScriptInfo.hs +++ b/agora/Agora/ScriptInfo.hs @@ -9,6 +9,7 @@ module Agora.ScriptInfo ( -- * Types PolicyInfo (..), ValidatorInfo (..), + ScriptInfo (..), -- * Introduction functions mkValidatorInfo, @@ -19,8 +20,17 @@ import Agora.Aeson.Orphans () import Data.Aeson qualified as Aeson import GHC.Generics qualified as GHC import Plutarch.Api.V1 (PMintingPolicy, PValidator, mintingPolicySymbol, mkMintingPolicy, mkValidator, validatorHash) -import PlutusLedgerApi.V1 (MintingPolicy, Validator, ValidatorHash) -import PlutusLedgerApi.V1.Value (CurrencySymbol) +import PlutusLedgerApi.V1 (BuiltinByteString, CurrencySymbol (unCurrencySymbol), MintingPolicy, Script, Validator, ValidatorHash, unMintingPolicyScript) + +-- | Bundle containing a 'Script' and its hash. +data ScriptInfo = ScriptInfo + { script :: Script + -- ^ The validator script. + , hash :: BuiltinByteString + -- ^ Hash of the script. + } + deriving stock (Show, Eq, GHC.Generic) + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) {- | Bundle containing a 'Validator' and its hash. From 74669018753b970ab08d6512eef8dd27da23aebb Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Thu, 23 Jun 2022 15:05:35 +0200 Subject: [PATCH 12/78] format and fix Werror compile error --- agora-scripts/Cache.hs | 1 - agora-scripts/Options.hs | 2 +- agora.cabal | 19 +++++++++---------- agora/Agora/ScriptInfo.hs | 9 ++++++++- 4 files changed, 18 insertions(+), 13 deletions(-) delete mode 100644 agora-scripts/Cache.hs diff --git a/agora-scripts/Cache.hs b/agora-scripts/Cache.hs deleted file mode 100644 index bfbad915..00000000 --- a/agora-scripts/Cache.hs +++ /dev/null @@ -1 +0,0 @@ -module Cache where diff --git a/agora-scripts/Options.hs b/agora-scripts/Options.hs index 4187a1db..b0fa855f 100644 --- a/agora-scripts/Options.hs +++ b/agora-scripts/Options.hs @@ -11,7 +11,7 @@ import Network.Wai.Handler.Warp qualified as Warp import Options.Applicative ((<**>)) import Options.Applicative qualified as Opt -data Options = Options +newtype Options = Options { port :: Warp.Port } deriving stock (Show, Eq) diff --git a/agora.cabal b/agora.cabal index 8dd8e274..83d31891 100644 --- a/agora.cabal +++ b/agora.cabal @@ -12,11 +12,11 @@ license: Apache-2.0 common lang ghc-options: - -Wall -Wcompat -Wincomplete-uni-patterns -Wno-unused-do-bind - -Wno-partial-type-signatures -Wmissing-export-lists - -Wincomplete-record-updates -Wmissing-deriving-strategies - -Wno-name-shadowing -Wunused-foralls -fprint-explicit-foralls - -fprint-explicit-kinds -Werror + -Werror -Wall -Wcompat -Wincomplete-uni-patterns + -Wno-unused-do-bind -Wno-partial-type-signatures + -Wmissing-export-lists -Wincomplete-record-updates + -Wmissing-deriving-strategies -Wno-name-shadowing -Wunused-foralls + -fprint-explicit-foralls -fprint-explicit-kinds mixins: base hiding (Prelude), @@ -28,7 +28,6 @@ common lang BinaryLiterals ConstrainedClassMethods ConstraintKinds - DuplicateRecordFields DataKinds DeriveAnyClass DeriveDataTypeable @@ -40,6 +39,7 @@ common lang DerivingStrategies DerivingVia DoAndIfThenElse + DuplicateRecordFields EmptyCase EmptyDataDecls EmptyDataDeriving @@ -138,6 +138,7 @@ common exe-opts library import: lang, deps exposed-modules: + Agora.Aeson.Orphans Agora.AuthorityToken Agora.Effect Agora.Effect.GovernorMutation @@ -146,6 +147,7 @@ library Agora.Governor Agora.Governor.Scripts Agora.MultiSig + Agora.Plutarch.Orphans Agora.Proposal Agora.Proposal.Scripts Agora.Proposal.Time @@ -157,9 +159,6 @@ library Agora.Utils other-modules: - Agora.Aeson.Orphans - Agora.Plutarch.Orphans - hs-source-dirs: agora library pprelude @@ -246,6 +245,7 @@ executable agora-scripts , agora , cache , clock + , containers , gitrev , hashable , http-types @@ -256,7 +256,6 @@ executable agora-scripts , wai , wai-cors , warp - , containers executable agora-purescript-bridge import: lang, deps, exe-opts diff --git a/agora/Agora/ScriptInfo.hs b/agora/Agora/ScriptInfo.hs index 49426547..698c9c58 100644 --- a/agora/Agora/ScriptInfo.hs +++ b/agora/Agora/ScriptInfo.hs @@ -20,7 +20,14 @@ import Agora.Aeson.Orphans () import Data.Aeson qualified as Aeson import GHC.Generics qualified as GHC import Plutarch.Api.V1 (PMintingPolicy, PValidator, mintingPolicySymbol, mkMintingPolicy, mkValidator, validatorHash) -import PlutusLedgerApi.V1 (BuiltinByteString, CurrencySymbol (unCurrencySymbol), MintingPolicy, Script, Validator, ValidatorHash, unMintingPolicyScript) +import PlutusLedgerApi.V1 ( + BuiltinByteString, + CurrencySymbol, + MintingPolicy, + Script, + Validator, + ValidatorHash, + ) -- | Bundle containing a 'Script' and its hash. data ScriptInfo = ScriptInfo From a5765a355d08b3af1155a30163dc5fec3923b03b Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Thu, 23 Jun 2022 19:54:34 +0200 Subject: [PATCH 13/78] restructure `agora-scripts` modules In order to allow reusing this code in the future, I've made it so that Agora-specific code all lives in `Main`, and everything else lives in `ScriptExport` or other non-Agora modules. --- agora-scripts/API.hs | 144 -------------------- agora-scripts/Codec/Serialise/Orphans.hs | 9 +- agora-scripts/Main.hs | 144 ++++++++++++++++++++ agora-scripts/ScriptExport/API.hs | 100 ++++++++++++++ agora-scripts/{ => ScriptExport}/Options.hs | 4 +- agora-scripts/ScriptExport/Types.hs | 94 +++++++++++++ agora-scripts/Scripts.hs | 14 -- agora-scripts/Types.hs | 84 ------------ agora-scripts/agora-params.json | 11 -- agora.cabal | 8 +- 10 files changed, 345 insertions(+), 267 deletions(-) delete mode 100644 agora-scripts/API.hs create mode 100644 agora-scripts/Main.hs create mode 100644 agora-scripts/ScriptExport/API.hs rename agora-scripts/{ => ScriptExport}/Options.hs (89%) create mode 100644 agora-scripts/ScriptExport/Types.hs delete mode 100644 agora-scripts/Scripts.hs delete mode 100644 agora-scripts/Types.hs delete mode 100644 agora-scripts/agora-params.json diff --git a/agora-scripts/API.hs b/agora-scripts/API.hs deleted file mode 100644 index efccc4e3..00000000 --- a/agora-scripts/API.hs +++ /dev/null @@ -1,144 +0,0 @@ -{-# LANGUAGE TemplateHaskell #-} - -{- | Module : API - Maintainer : emi@haskell.fyi - Description: API for script exporter. - - API for script exporter. --} -module API ( - AgoraScripts (..), - ScriptParams (..), - API, - agoraScripts, - runServer, -) where - -import Agora.AuthorityToken (AuthorityToken (..), authorityTokenPolicy) -import Agora.Governor (Governor (..)) -import Agora.Governor qualified as Governor -import Agora.Governor.Scripts (authorityTokenFromGovernor, authorityTokenSymbolFromGovernor, governorPolicy, governorValidator, proposalFromGovernor, stakeFromGovernor) -import Agora.Proposal (Proposal (..)) -import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) -import Agora.ScriptInfo (mkPolicyInfo, mkValidatorInfo) -import Agora.Stake (Stake (..)) -import Agora.Stake.Scripts (stakePolicy, stakeValidator) -import Agora.Treasury (treasuryValidator) -import Codec.Serialise.Orphans () -import Data.Aeson qualified as Aeson -import Data.Cache.Cached (cachedFor) -import Data.Default.Class (Default (def)) -import Data.Function ((&)) -import Data.Proxy (Proxy (Proxy)) -import Development.GitRev (gitBranch, gitHash) -import Network.HTTP.Types qualified as Http -import Network.Wai qualified as Wai -import Network.Wai.Handler.Warp qualified as Warp -import Network.Wai.Middleware.Cors (CorsResourcePolicy (corsRequestHeaders), cors, simpleCorsResourcePolicy) -import Options (Options (..)) -import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) -import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) -import PlutusLedgerApi.V1.Value qualified as Value -import Prettyprinter (defaultLayoutOptions, hsep, layoutPretty, viaShow, (<+>)) -import Prettyprinter.Render.String (renderString) -import Servant.API (JSON, Post, ReqBody, (:<|>) (..), type (:>)) -import Servant.Server qualified as Servant -import System.Clock (TimeSpec (TimeSpec)) -import Text.Printf (printf) -import Types (AgoraScripts (..), Builders, ScriptParams (..), ScriptQuery, insertBuilder, runQuery) - --- | Servant API type for script generation. -type API = - "generate-scripts" :> ReqBody '[JSON] ScriptParams :> Post '[JSON] AgoraScripts - :<|> "query-script" :> ReqBody '[JSON] ScriptQuery :> Post '[JSON] Aeson.Value - --- | Run a Warp server that exposes a script generation endpoint. -runServer :: Options -> IO () -runServer options = do - let settings = - Warp.defaultSettings - & Warp.setPort options.port - & Warp.setLogger - ( \req status _maybeFileSize -> - putStrLn . renderString . layoutPretty defaultLayoutOptions $ - hsep - [ "[info]" - , "[" <> "Status:" <+> viaShow (Http.statusCode status) <> "]" - , viaShow $ Wai.requestMethod req - , viaShow $ Wai.rawPathInfo req - ] - ) - - corsPolicy = - simpleCorsResourcePolicy - { -- NOTE: Webpack dev server requires this for CORS workaround. - corsRequestHeaders = "content-type" : corsRequestHeaders simpleCorsResourcePolicy - } - corsMiddleware = cors . const $ Just corsPolicy - - -- Scripts stay cached for five minutes - agoraScripts' <- cachedFor (Just $ TimeSpec 300 0) agoraScripts - query <- cachedFor (Just $ TimeSpec 300 0) (`runQuery` agoraBuilders) - - printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) - Servant.serve - (Proxy @API) - (agoraScripts' :<|> query) - & corsMiddleware - & Warp.runSettings settings - -agoraBuilders :: Builders -agoraBuilders = - def - & insertBuilder "governorPolicy" ((.governorPolicyInfo) . agoraScripts) - & insertBuilder "governorValidator" ((.governorValidatorInfo) . agoraScripts) - & insertBuilder "stakePolicyInfo" ((.stakePolicyInfo) . agoraScripts) - & insertBuilder "stakeValidatorInfo" ((.stakeValidatorInfo) . agoraScripts) - & insertBuilder "proposalPolicyInfo" ((.proposalPolicyInfo) . agoraScripts) - & insertBuilder "proposalValidatorInfo" ((.proposalValidatorInfo) . agoraScripts) - & insertBuilder "treasuryValidatorInfo" ((.treasuryValidatorInfo) . agoraScripts) - & insertBuilder "authorityTokenPolicyInfo" ((.authorityTokenPolicyInfo) . agoraScripts) - --- | Create scripts from params. -agoraScripts :: ScriptParams -> AgoraScripts -agoraScripts params = - AgoraScripts - { gitRev = revision - , governorPolicyInfo = mkPolicyInfo (governorPolicy governor) - , governorValidatorInfo = mkValidatorInfo (governorValidator governor) - , stakePolicyInfo = mkPolicyInfo (stakePolicy params.gtClassRef) - , stakeValidatorInfo = mkValidatorInfo (stakeValidator stake) - , proposalPolicyInfo = mkPolicyInfo (proposalPolicy governorSTAssetClass) - , proposalValidatorInfo = mkValidatorInfo (proposalValidator proposal) - , treasuryValidatorInfo = mkValidatorInfo (treasuryValidator authorityTokenSymbol) - , authorityTokenPolicyInfo = mkPolicyInfo (authorityTokenPolicy authorityToken) - } - where - -- This encodes the git revision of the server. It's useful for the caller - -- to be able to ensure they are compatible with it. - revision :: String - revision = $(gitBranch) <> "@" <> $(gitHash) - - governor :: Governor - governor = - Governor - { Governor.gstOutRef = params.governorInitialSpend - , Governor.gtClassRef = params.gtClassRef - , Governor.maximumCosigners = params.maximumCosigners - } - - authorityToken :: AuthorityToken - authorityToken = authorityTokenFromGovernor governor - - authorityTokenSymbol :: CurrencySymbol - authorityTokenSymbol = authorityTokenSymbolFromGovernor governor - - governorSTAssetClass :: AssetClass - governorSTAssetClass = - Value.assetClass (mintingPolicySymbol $ mkMintingPolicy $ governorPolicy governor) "" - - proposal :: Proposal - proposal = proposalFromGovernor governor - - stake :: Stake - stake = stakeFromGovernor governor diff --git a/agora-scripts/Codec/Serialise/Orphans.hs b/agora-scripts/Codec/Serialise/Orphans.hs index 62d69bf7..f310abd7 100644 --- a/agora-scripts/Codec/Serialise/Orphans.hs +++ b/agora-scripts/Codec/Serialise/Orphans.hs @@ -9,12 +9,10 @@ Orphan instances for Serialising and Hashing Cardano types. -} module Codec.Serialise.Orphans () where -import Codec.Serialise (Serialise, serialise) -import Data.Hashable (Hashable (hashWithSalt)) +import Codec.Serialise (Serialise) import Data.Tagged (Tagged (Tagged)) import PlutusLedgerApi.V1 (TxId, TxOutRef) import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol, TokenName) -import Types (ScriptParams) deriving anyclass instance Serialise TxOutRef @@ -34,8 +32,3 @@ deriving anyclass instance deriving newtype instance Serialise a => Serialise (Tagged s a) - -deriving anyclass instance Serialise ScriptParams - -instance Hashable ScriptParams where - hashWithSalt s scriptParams = hashWithSalt s (serialise scriptParams) diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs new file mode 100644 index 00000000..3bb85a16 --- /dev/null +++ b/agora-scripts/Main.hs @@ -0,0 +1,144 @@ +{-# LANGUAGE TemplateHaskell #-} + +{- | Module : Main + Maintainer : emi@haskell.fyi + Description: Export scripts given configuration. + + Export scripts given configuration. +-} +module Main (main) where + +import Agora.AuthorityToken (AuthorityToken, authorityTokenPolicy) +import Agora.Governor (Governor (Governor)) +import Agora.Governor qualified as Governor +import Agora.Governor.Scripts (authorityTokenFromGovernor, authorityTokenSymbolFromGovernor, governorPolicy, governorValidator, proposalFromGovernor, stakeFromGovernor) +import Agora.Proposal (Proposal) +import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) +import Agora.SafeMoney (GTTag) +import Agora.ScriptInfo (PolicyInfo, ValidatorInfo, mkPolicyInfo, mkValidatorInfo) +import Agora.Stake (Stake) +import Agora.Stake.Scripts (stakePolicy, stakeValidator) +import Agora.Treasury (treasuryValidator) +import Data.Aeson qualified as Aeson +import Data.Default (def) +import Data.Function ((&)) +import Data.Tagged (Tagged) +import Data.Text (Text) +import Development.GitRev (gitBranch, gitHash) +import GHC.Generics qualified as GHC +import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) +import PlutusLedgerApi.V1 (TxOutRef) +import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) +import PlutusLedgerApi.V1.Value qualified as Value +import ScriptExport.API (runServer) +import ScriptExport.Options (parseOptions) +import ScriptExport.Types (Builders, insertBuilder) + +main :: IO () +main = + parseOptions >>= runServer revision builders + where + -- This encodes the git revision of the server. It's useful for the caller + -- to be able to ensure they are compatible with it. + revision :: Text + revision = $(gitBranch) <> "@" <> $(gitHash) + +{- | Builders for Agora scripts. + + @since 0.2.0 +-} +builders :: Builders +builders = + def + & insertBuilder "governorPolicy" ((.governorPolicyInfo) . agoraScripts) + & insertBuilder "governorValidator" ((.governorValidatorInfo) . agoraScripts) + & insertBuilder "stakePolicyInfo" ((.stakePolicyInfo) . agoraScripts) + & insertBuilder "stakeValidatorInfo" ((.stakeValidatorInfo) . agoraScripts) + & insertBuilder "proposalPolicyInfo" ((.proposalPolicyInfo) . agoraScripts) + & insertBuilder "proposalValidatorInfo" ((.proposalValidatorInfo) . agoraScripts) + & insertBuilder "treasuryValidatorInfo" ((.treasuryValidatorInfo) . agoraScripts) + & insertBuilder "authorityTokenPolicyInfo" ((.authorityTokenPolicyInfo) . agoraScripts) + +{- | Create scripts from params. + + @since 0.2.0 +-} +agoraScripts :: ScriptParams -> AgoraScripts +agoraScripts params = + AgoraScripts + { governorPolicyInfo = mkPolicyInfo (governorPolicy governor) + , governorValidatorInfo = mkValidatorInfo (governorValidator governor) + , stakePolicyInfo = mkPolicyInfo (stakePolicy params.gtClassRef) + , stakeValidatorInfo = mkValidatorInfo (stakeValidator stake) + , proposalPolicyInfo = mkPolicyInfo (proposalPolicy governorSTAssetClass) + , proposalValidatorInfo = mkValidatorInfo (proposalValidator proposal) + , treasuryValidatorInfo = mkValidatorInfo (treasuryValidator authorityTokenSymbol) + , authorityTokenPolicyInfo = mkPolicyInfo (authorityTokenPolicy authorityToken) + } + where + governor :: Governor + governor = + Governor + { Governor.gstOutRef = params.governorInitialSpend + , Governor.gtClassRef = params.gtClassRef + , Governor.maximumCosigners = params.maximumCosigners + } + + authorityToken :: AuthorityToken + authorityToken = authorityTokenFromGovernor governor + + authorityTokenSymbol :: CurrencySymbol + authorityTokenSymbol = authorityTokenSymbolFromGovernor governor + + governorSTAssetClass :: AssetClass + governorSTAssetClass = + Value.assetClass (mintingPolicySymbol $ mkMintingPolicy $ governorPolicy governor) "" + + proposal :: Proposal + proposal = proposalFromGovernor governor + + stake :: Stake + stake = stakeFromGovernor governor + +{- | Params required for creating script export. + + @since 0.2.0 +-} +data ScriptParams where + ScriptParams :: + { governorInitialSpend :: TxOutRef + , gtClassRef :: Tagged GTTag AssetClass + , maximumCosigners :: Integer + } -> + ScriptParams + deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) + deriving stock (Show, Eq, GHC.Generic, Ord) + +{- | Scripts that get exported. + + @since 0.2.0 +-} +data AgoraScripts = AgoraScripts + { governorPolicyInfo :: PolicyInfo + , governorValidatorInfo :: ValidatorInfo + , stakePolicyInfo :: PolicyInfo + , stakeValidatorInfo :: ValidatorInfo + , proposalPolicyInfo :: PolicyInfo + , proposalValidatorInfo :: ValidatorInfo + , treasuryValidatorInfo :: ValidatorInfo + , authorityTokenPolicyInfo :: PolicyInfo + } + deriving anyclass + ( -- | @since 0.2.0 + Aeson.ToJSON + , -- | @since 0.2.0 + Aeson.FromJSON + ) + deriving stock + ( -- | @since 0.2.0 + Show + , -- | @since 0.2.0 + Eq + , -- | @since 0.2.0 + GHC.Generic + ) diff --git a/agora-scripts/ScriptExport/API.hs b/agora-scripts/ScriptExport/API.hs new file mode 100644 index 00000000..e074dab2 --- /dev/null +++ b/agora-scripts/ScriptExport/API.hs @@ -0,0 +1,100 @@ +{- | Module : ScriptExport.API + Maintainer : emi@haskell.fyi + Description: API for script exporter. + + API for script exporter. +-} +module ScriptExport.API ( + API, + runServer, +) where + +import Codec.Serialise.Orphans () +import Data.Aeson qualified as Aeson +import Data.Cache.Cached (cachedFor) +import Data.Function ((&)) +import Data.Proxy (Proxy (Proxy)) +import Data.Text (Text) +import GHC.Generics qualified as GHC +import Network.HTTP.Types qualified as Http +import Network.Wai qualified as Wai +import Network.Wai.Handler.Warp qualified as Warp +import Network.Wai.Middleware.Cors (CorsResourcePolicy (corsRequestHeaders), cors, simpleCorsResourcePolicy) +import Prettyprinter (Pretty (pretty), defaultLayoutOptions, hsep, layoutPretty, viaShow) +import Prettyprinter.Render.String (renderString) +import ScriptExport.Options (Options (..)) +import ScriptExport.Types (Builders, ScriptQuery, runQuery) +import ScriptExport.Types qualified as Builders +import Servant.API (Get, JSON, Post, ReqBody, (:<|>) (..), type (:>)) +import Servant.Server qualified as Servant +import System.Clock (TimeSpec (TimeSpec)) +import Text.Printf (printf) + +{- | Servant API type for script generation. + + @since 0.2.0 +-} +type API = + "query-script" :> ReqBody '[JSON] ScriptQuery :> Post '[JSON] Aeson.Value + :<|> "info" :> Get '[JSON] ServerInfo + +{- | Information about the server. + + @since 0.2.0 +-} +data ServerInfo = ServerInfo + { revision :: Text + , exposedBuilders :: [Text] + } + deriving anyclass + ( -- | @since 0.2.0 + Aeson.ToJSON + , -- | @since 0.2.0 + Aeson.FromJSON + ) + deriving stock + ( -- | @since 0.2.0 + Show + , -- | @since 0.2.0 + Eq + , -- | @since 0.2.0 + GHC.Generic + ) + +-- | Run a Warp server that exposes a script generation endpoint. +runServer :: Text -> Builders -> Options -> IO () +runServer revision builders options = do + let settings = + Warp.defaultSettings + & Warp.setPort options.port + & Warp.setLogger + ( \req status _maybeFileSize -> + putStrLn . renderString . layoutPretty defaultLayoutOptions $ + hsep + [ "[info]" + , viaShow $ Wai.requestMethod req + , viaShow $ Wai.rawPathInfo req + , "(" <> pretty (Http.statusCode status) <> ")" + ] + ) + + corsPolicy = + simpleCorsResourcePolicy + { -- NOTE: Webpack dev server requires this for CORS workaround. + corsRequestHeaders = "content-type" : corsRequestHeaders simpleCorsResourcePolicy + } + corsMiddleware = cors . const $ Just corsPolicy + + -- Scripts stay cached for five minutes + query <- cachedFor (Just $ TimeSpec 300 0) (`runQuery` builders) + + let serverInfo = + ServerInfo + { revision = revision + , exposedBuilders = Builders.toList builders + } + + printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) + Servant.serve (Proxy @API) (query :<|> pure serverInfo) + & corsMiddleware + & Warp.runSettings settings diff --git a/agora-scripts/Options.hs b/agora-scripts/ScriptExport/Options.hs similarity index 89% rename from agora-scripts/Options.hs rename to agora-scripts/ScriptExport/Options.hs index b0fa855f..b37da56c 100644 --- a/agora-scripts/Options.hs +++ b/agora-scripts/ScriptExport/Options.hs @@ -1,11 +1,11 @@ {- | -Module : Options +Module : ScriptExport.Options Maintainer : emi@haskell.fyi Description: Command line options for 'agora-scripts'. Command line options for 'agora-scripts'. -} -module Options (Options (..), parseOptions) where +module ScriptExport.Options (Options (..), parseOptions) where import Network.Wai.Handler.Warp qualified as Warp import Options.Applicative ((<**>)) diff --git a/agora-scripts/ScriptExport/Types.hs b/agora-scripts/ScriptExport/Types.hs new file mode 100644 index 00000000..b7dfcace --- /dev/null +++ b/agora-scripts/ScriptExport/Types.hs @@ -0,0 +1,94 @@ +{- | +Module : ScriptExport.Types +Maintainer : emi@haskell.fyi +Description: Param and script types for generation. + +Param and script types for generation. +-} +module ScriptExport.Types ( + ScriptQuery (..), + Builders, + runQuery, + insertBuilder, + toList, +) where + +import Data.Aeson qualified as Aeson +import Data.Coerce (coerce) +import Data.Default.Class (Default (def)) +import Data.Hashable (Hashable) +import Data.Map.Strict (Map) +import Data.Map.Strict qualified as Map +import Data.Text (Text) +import GHC.Generics qualified as GHC + +{- | Query data for getting script info. + + @since 0.2.0 +-} +data ScriptQuery = ScriptQuery + { name :: Text + , paramsPayload :: Aeson.Value + } + deriving anyclass + ( -- | @since 0.2.0 + Aeson.ToJSON + , -- | @since 0.2.0 + Aeson.FromJSON + ) + deriving stock + ( -- | @since 0.2.0 + Show + , -- | @since 0.2.0 + Eq + , -- | @since 0.2.0 + GHC.Generic + , -- | @since 0.2.0 + Ord + ) + deriving anyclass + ( -- | @since 0.2.0 + Hashable + ) + +{- | Run a query on Builders. + + @since 0.2.0 +-} +runQuery :: ScriptQuery -> Builders -> Aeson.Value +runQuery s = + maybe Aeson.Null ($ s.paramsPayload) . Map.lookup s.name . getBuilders + +{- | Represents a list of named pure functions. + + @since 0.2.0 +-} +newtype Builders = Builders + { getBuilders :: Map Text (Aeson.Value -> Aeson.Value) + } + +-- | @since 0.2.0 +instance Default Builders where + def = Builders Map.empty + +{- | Insert a pure function into the Builders map. + + @since 0.2.0 +-} +insertBuilder :: + forall p s. + (Aeson.FromJSON p, Aeson.ToJSON s) => + Text -> + (p -> s) -> + Builders -> + Builders +insertBuilder k = coerce . Map.insert k . throughJSON + where + throughJSON f = Aeson.toJSON . \case { Aeson.Error _ -> Nothing; Aeson.Success v -> Just (f v) } . Aeson.fromJSON + +{- | Get a list of the available builders. + + @since 0.2.0 +-} +toList :: Builders -> [Text] +toList = Map.keys . getBuilders diff --git a/agora-scripts/Scripts.hs b/agora-scripts/Scripts.hs deleted file mode 100644 index a665c969..00000000 --- a/agora-scripts/Scripts.hs +++ /dev/null @@ -1,14 +0,0 @@ -{- | Module : Scripts - Maintainer : emi@haskell.fyi - Description: Export scripts given configuration. - - Export scripts given configuration. --} -module Scripts (main) where - -import API (runServer) -import Options (parseOptions) - -main :: IO () -main = - parseOptions >>= runServer diff --git a/agora-scripts/Types.hs b/agora-scripts/Types.hs deleted file mode 100644 index 7a364046..00000000 --- a/agora-scripts/Types.hs +++ /dev/null @@ -1,84 +0,0 @@ -{- | -Module : Types -Maintainer : emi@haskell.fyi -Description: Param and script types for generation. - -Param and script types for generation. --} -module Types ( - ScriptParams (..), - AgoraScripts (..), - ScriptQuery (..), - Builders (..), - throughJSON, - runQuery, - insertBuilder, -) where - -import Agora.SafeMoney (GTTag) -import Agora.ScriptInfo (PolicyInfo, ValidatorInfo) -import Data.Aeson qualified as Aeson -import Data.Coerce (coerce) -import Data.Default.Class (Default (def)) -import Data.Hashable (Hashable) -import Data.Map.Strict (Map) -import Data.Map.Strict qualified as Map -import Data.Tagged (Tagged) -import Data.Text (Text) -import GHC.Generics qualified as GHC -import PlutusLedgerApi.V1 (TxOutRef) -import PlutusLedgerApi.V1.Value (AssetClass) - --- | Params required for creating script export. -data ScriptParams where - ScriptParams :: - { governorInitialSpend :: TxOutRef - , gtClassRef :: Tagged GTTag AssetClass - , maximumCosigners :: Integer - } -> - ScriptParams - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic, Ord) - --- | Scripts that get exported. -data AgoraScripts = AgoraScripts - { gitRev :: String - , governorPolicyInfo :: PolicyInfo - , governorValidatorInfo :: ValidatorInfo - , stakePolicyInfo :: PolicyInfo - , stakeValidatorInfo :: ValidatorInfo - , proposalPolicyInfo :: PolicyInfo - , proposalValidatorInfo :: ValidatorInfo - , treasuryValidatorInfo :: ValidatorInfo - , authorityTokenPolicyInfo :: PolicyInfo - } - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic) - -data ScriptQuery = ScriptQuery - { name :: Text - , paramsPayload :: Aeson.Value - } - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) - deriving stock (Show, Eq, GHC.Generic, Ord) - deriving anyclass (Hashable) - --- | Run a query on Builders. -runQuery :: ScriptQuery -> Builders -> Aeson.Value -runQuery s (Builders b) = - maybe Aeson.Null ($ s.paramsPayload) (Map.lookup s.name b) - -throughJSON :: (Aeson.FromJSON p, Aeson.ToJSON s) => (p -> s) -> (Aeson.Value -> Aeson.Value) -throughJSON f = Aeson.toJSON . \case { Aeson.Error _ -> Nothing; Aeson.Success v -> Just (f v) } . Aeson.fromJSON - --- | Represents a list of named pure functions. -newtype Builders = Builders - { getBuilders :: Map Text (Aeson.Value -> Aeson.Value) - } - -instance Default Builders where - def = Builders Map.empty - --- | Insert a pure function into the Builders map. -insertBuilder :: (Aeson.FromJSON p, Aeson.ToJSON s) => Text -> (p -> s) -> Builders -> Builders -insertBuilder k = coerce . Map.insert k . throughJSON diff --git a/agora-scripts/agora-params.json b/agora-scripts/agora-params.json deleted file mode 100644 index abb0f3d6..00000000 --- a/agora-scripts/agora-params.json +++ /dev/null @@ -1,11 +0,0 @@ -{ - "governorInitialSpend": { - "txOutRefId": "7be688c61c209dd7a9f4948090db0b031b11a8850b0ee4695f786fea85fbfdee", - "txOutRefIdx": 0 - }, - "gtClassRef": [ - "", - "" - ], - "maximumCosigners": 5 -} diff --git a/agora.cabal b/agora.cabal index 83d31891..b84abed9 100644 --- a/agora.cabal +++ b/agora.cabal @@ -232,14 +232,14 @@ benchmark agora-bench executable agora-scripts import: lang, deps, exe-opts - main-is: Scripts.hs + main-is: Main.hs hs-source-dirs: agora-scripts other-modules: - API Codec.Serialise.Orphans Data.Cache.Cached - Options - Types + ScriptExport.API + ScriptExport.Options + ScriptExport.Types build-depends: , agora From 6a7e8369fdffe6d6d898d52de7c90510cd7823f0 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Mon, 27 Jun 2022 13:30:27 +0200 Subject: [PATCH 14/78] add better server error messages, cbor vs raw hex --- agora-scripts/Data/Cache/Cached.hs | 18 +++-- agora-scripts/Main.hs | 18 ++--- agora-scripts/ScriptExport/API.hs | 11 ++- agora-scripts/ScriptExport/Types.hs | 26 ++++++- agora.cabal | 2 + agora/Agora/Aeson/Orphans.hs | 10 +++ agora/Agora/ScriptInfo.hs | 115 +++++++++++----------------- 7 files changed, 106 insertions(+), 94 deletions(-) diff --git a/agora-scripts/Data/Cache/Cached.hs b/agora-scripts/Data/Cache/Cached.hs index 0b1acb59..a0d5d894 100644 --- a/agora-scripts/Data/Cache/Cached.hs +++ b/agora-scripts/Data/Cache/Cached.hs @@ -6,7 +6,8 @@ -} module Data.Cache.Cached ( cached, - cachedFor, + cachedM, + cachedForM, ) where import Control.Monad.IO.Class (MonadIO (liftIO)) @@ -20,7 +21,14 @@ import System.Clock (TimeSpec) Uses a HashMap under the hood. -} cached :: (Monad m, MonadIO m, Hashable k, Ord k) => (k -> v) -> IO (k -> m v) -cached = cachedFor Nothing +cached f = cachedForM Nothing (pure . f) + +{- | 'cachedFor' but items last forever. + + Uses a HashMap under the hood. +-} +cachedM :: (Monad m, MonadIO m, Hashable k, Ord k) => (k -> m v) -> IO (k -> m v) +cachedM = cachedForM Nothing {- | Create a cached version of a function tainting result with MonadIO context. @@ -28,13 +36,13 @@ cached = cachedFor Nothing Uses a HashMap under the hood. -} -cachedFor :: (Monad m, MonadIO m, Hashable k, Ord k) => Maybe TimeSpec -> (k -> v) -> IO (k -> m v) -cachedFor t f = +cachedForM :: (Monad m, MonadIO m, Hashable k, Ord k) => Maybe TimeSpec -> (k -> m v) -> IO (k -> m v) +cachedForM t f = Cache.newCache t <&> \cache k -> do res <- liftIO $ Cache.lookup cache k case res of Nothing -> do - let v = f k + v <- f k liftIO $ Cache.insert cache k v pure v Just v -> do diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index 3bb85a16..7d25b43c 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -15,7 +15,7 @@ import Agora.Governor.Scripts (authorityTokenFromGovernor, authorityTokenSymbolF import Agora.Proposal (Proposal) import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) import Agora.SafeMoney (GTTag) -import Agora.ScriptInfo (PolicyInfo, ValidatorInfo, mkPolicyInfo, mkValidatorInfo) +import Agora.ScriptInfo (ScriptInfo, mkPolicyInfo, mkValidatorInfo) import Agora.Stake (Stake) import Agora.Stake.Scripts (stakePolicy, stakeValidator) import Agora.Treasury (treasuryValidator) @@ -119,14 +119,14 @@ data ScriptParams where @since 0.2.0 -} data AgoraScripts = AgoraScripts - { governorPolicyInfo :: PolicyInfo - , governorValidatorInfo :: ValidatorInfo - , stakePolicyInfo :: PolicyInfo - , stakeValidatorInfo :: ValidatorInfo - , proposalPolicyInfo :: PolicyInfo - , proposalValidatorInfo :: ValidatorInfo - , treasuryValidatorInfo :: ValidatorInfo - , authorityTokenPolicyInfo :: PolicyInfo + { governorPolicyInfo :: ScriptInfo + , governorValidatorInfo :: ScriptInfo + , stakePolicyInfo :: ScriptInfo + , stakeValidatorInfo :: ScriptInfo + , proposalPolicyInfo :: ScriptInfo + , proposalValidatorInfo :: ScriptInfo + , treasuryValidatorInfo :: ScriptInfo + , authorityTokenPolicyInfo :: ScriptInfo } deriving anyclass ( -- | @since 0.2.0 diff --git a/agora-scripts/ScriptExport/API.hs b/agora-scripts/ScriptExport/API.hs index e074dab2..c41b48ae 100644 --- a/agora-scripts/ScriptExport/API.hs +++ b/agora-scripts/ScriptExport/API.hs @@ -11,7 +11,7 @@ module ScriptExport.API ( import Codec.Serialise.Orphans () import Data.Aeson qualified as Aeson -import Data.Cache.Cached (cachedFor) +import Data.Cache.Cached (cachedForM) import Data.Function ((&)) import Data.Proxy (Proxy (Proxy)) import Data.Text (Text) @@ -35,8 +35,11 @@ import Text.Printf (printf) @since 0.2.0 -} type API = - "query-script" :> ReqBody '[JSON] ScriptQuery :> Post '[JSON] Aeson.Value - :<|> "info" :> Get '[JSON] ServerInfo + "query-script" + :> ReqBody '[JSON] ScriptQuery + :> Post '[JSON] Aeson.Value + :<|> "info" + :> Get '[JSON] ServerInfo {- | Information about the server. @@ -86,7 +89,7 @@ runServer revision builders options = do corsMiddleware = cors . const $ Just corsPolicy -- Scripts stay cached for five minutes - query <- cachedFor (Just $ TimeSpec 300 0) (`runQuery` builders) + query <- cachedForM (Just $ TimeSpec 300 0) (`runQuery` builders) let serverInfo = ServerInfo diff --git a/agora-scripts/ScriptExport/Types.hs b/agora-scripts/ScriptExport/Types.hs index b7dfcace..c91805e0 100644 --- a/agora-scripts/ScriptExport/Types.hs +++ b/agora-scripts/ScriptExport/Types.hs @@ -14,6 +14,7 @@ module ScriptExport.Types ( ) where import Data.Aeson qualified as Aeson +import Data.ByteString.Lazy.Char8 qualified as LBS import Data.Coerce (coerce) import Data.Default.Class (Default (def)) import Data.Hashable (Hashable) @@ -21,6 +22,7 @@ import Data.Map.Strict (Map) import Data.Map.Strict qualified as Map import Data.Text (Text) import GHC.Generics qualified as GHC +import Servant qualified {- | Query data for getting script info. @@ -55,16 +57,20 @@ data ScriptQuery = ScriptQuery @since 0.2.0 -} -runQuery :: ScriptQuery -> Builders -> Aeson.Value +runQuery :: ScriptQuery -> Builders -> Servant.Handler Aeson.Value runQuery s = - maybe Aeson.Null ($ s.paramsPayload) . Map.lookup s.name . getBuilders + maybe + (Servant.throwError Servant.err404 {Servant.errBody = "Builder not found"}) + ($ s.paramsPayload) + . Map.lookup s.name + . getBuilders {- | Represents a list of named pure functions. @since 0.2.0 -} newtype Builders = Builders - { getBuilders :: Map Text (Aeson.Value -> Aeson.Value) + { getBuilders :: Map Text (Aeson.Value -> Servant.Handler Aeson.Value) } -- | @since 0.2.0 @@ -84,7 +90,19 @@ insertBuilder :: Builders insertBuilder k = coerce . Map.insert k . throughJSON where - throughJSON f = Aeson.toJSON . \case { Aeson.Error _ -> Nothing; Aeson.Success v -> Just (f v) } . Aeson.fromJSON + throughJSON :: + forall p s. + (Aeson.FromJSON p, Aeson.ToJSON s) => + (p -> s) -> + (Aeson.Value -> Servant.Handler Aeson.Value) + throughJSON f v = + case Aeson.fromJSON v of + Aeson.Error e -> + Servant.throwError $ + Servant.err400 + { Servant.errBody = LBS.pack e + } + Aeson.Success v' -> pure . Aeson.toJSON $ f v' {- | Get a list of the available builders. diff --git a/agora.cabal b/agora.cabal index b84abed9..143f7701 100644 --- a/agora.cabal +++ b/agora.cabal @@ -91,7 +91,9 @@ common deps , ansi-terminal , base >=4.14 && <5 , base-compat + , base16 , bytestring + , cardano-binary , cardano-prelude , containers , data-default diff --git a/agora/Agora/Aeson/Orphans.hs b/agora/Agora/Aeson/Orphans.hs index 6c14c623..2408add3 100644 --- a/agora/Agora/Aeson/Orphans.hs +++ b/agora/Agora/Aeson/Orphans.hs @@ -20,6 +20,7 @@ import Data.Text.Encoding qualified as T import PlutusLedgerApi.V1 qualified as Plutus import PlutusLedgerApi.V1.Bytes qualified as Plutus +import PlutusLedgerApi.V1.Scripts qualified as Plutus import PlutusLedgerApi.V1.Value qualified as Plutus -------------------------------------------------------------------------------- @@ -109,6 +110,15 @@ deriving via instance (Aeson.FromJSON Plutus.ValidatorHash) +deriving via + (AsBase16Bytes Plutus.ScriptHash) + instance + (Aeson.ToJSON Plutus.ScriptHash) +deriving via + (AsBase16Bytes Plutus.ScriptHash) + instance + (Aeson.FromJSON Plutus.ScriptHash) + deriving via (AsBase16Bytes Plutus.BuiltinByteString) instance diff --git a/agora/Agora/ScriptInfo.hs b/agora/Agora/ScriptInfo.hs index 698c9c58..d4beba19 100644 --- a/agora/Agora/ScriptInfo.hs +++ b/agora/Agora/ScriptInfo.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE TemplateHaskell #-} + {- | Module : Agora.ScriptInfo Maintainer : emi@haskell.fyi @@ -7,8 +9,6 @@ Exportable script bundles for off-chain consumption. -} module Agora.ScriptInfo ( -- * Types - PolicyInfo (..), - ValidatorInfo (..), ScriptInfo (..), -- * Introduction functions @@ -17,100 +17,71 @@ module Agora.ScriptInfo ( ) where import Agora.Aeson.Orphans () +import Cardano.Binary qualified as CBOR +import Codec.Serialise qualified as Codec import Data.Aeson qualified as Aeson +import Data.ByteString.Base16 qualified as Base16 +import Data.ByteString.Lazy qualified as LBS +import Data.ByteString.Short qualified as SBS +import Data.Text (Text) import GHC.Generics qualified as GHC -import Plutarch.Api.V1 (PMintingPolicy, PValidator, mintingPolicySymbol, mkMintingPolicy, mkValidator, validatorHash) +import Plutarch.Api.V1 (PMintingPolicy, PValidator, mkMintingPolicy, mkValidator, scriptHash) import PlutusLedgerApi.V1 ( - BuiltinByteString, - CurrencySymbol, - MintingPolicy, + MintingPolicy (getMintingPolicy), Script, - Validator, - ValidatorHash, + Validator (getValidator), ) - --- | Bundle containing a 'Script' and its hash. -data ScriptInfo = ScriptInfo - { script :: Script - -- ^ The validator script. - , hash :: BuiltinByteString - -- ^ Hash of the script. - } - deriving stock (Show, Eq, GHC.Generic) - deriving anyclass (Aeson.ToJSON, Aeson.FromJSON) +import PlutusLedgerApi.V1.Scripts (ScriptHash) {- | Bundle containing a 'Validator' and its hash. - @since 0.1.0 + @since 0.2.0 -} -data ValidatorInfo = ValidatorInfo - { script :: Validator - -- ^ The validator script. - , hash :: ValidatorHash +data ScriptInfo = ScriptInfo + { cborHex :: Text + -- ^ The validator script encoded as cbor hex. + , rawHex :: Text + -- ^ The validator script encoded as raw hex. + , hash :: ScriptHash -- ^ Hash of the validator. } deriving stock - ( -- | @since 0.1.0 + ( -- | @since 0.2.0 Show - , -- | @since 0.1.0 + , -- | @since 0.2.0 Eq - , -- | @since 0.1.0 + , -- | @since 0.2.0 GHC.Generic ) deriving anyclass - ( -- | @since 0.1.0 + ( -- | @since 0.2.0 Aeson.ToJSON - , -- | @since 0.1.0 + , -- | @since 0.2.0 Aeson.FromJSON ) -{- | Create a 'ValidatorInfo' given a Plutarch term. +mkScriptInfo :: Script -> ScriptInfo +mkScriptInfo script = + let scriptRaw = LBS.toStrict $ Codec.serialise script + scriptCBOR = CBOR.serialize' $ SBS.toShort scriptRaw + in ScriptInfo + { cborHex = Base16.encodeBase16 scriptCBOR + , rawHex = Base16.encodeBase16 scriptRaw + , hash = scriptHash script + } - @since 0.1.0 --} -mkValidatorInfo :: ClosedTerm PValidator -> ValidatorInfo -mkValidatorInfo term = - ValidatorInfo - { script = validator - , hash = validatorHash validator - } - where - validator = mkValidator term - -{- | Bundle containing a 'MintingPolicy' and its symbol. +{- | Create a 'ScriptInfo' given a Plutarch term of a policy. - @since 0.1.0 + @since 0.2.0 -} -data PolicyInfo = PolicyInfo - { policy :: MintingPolicy - -- ^ The minting policy. - , currencySymbol :: CurrencySymbol - -- ^ The symbol given by the minting policy. - } - deriving stock - ( -- | @since 0.1.0 - Show - , -- | @since 0.1.0 - Eq - , -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass - ( -- | @since 0.1.0 - Aeson.ToJSON - , -- | @since 0.1.0 - Aeson.FromJSON - ) +mkPolicyInfo :: ClosedTerm PMintingPolicy -> ScriptInfo +mkPolicyInfo term = + mkScriptInfo (getMintingPolicy $ mkMintingPolicy term) -{- | Create a 'PolicyInfo' given a Plutarch term. +{- | Create a 'ScriptInfo' given a Plutarch term of a validator. - @since 0.1.0 + @since 0.2.0 -} -mkPolicyInfo :: ClosedTerm PMintingPolicy -> PolicyInfo -mkPolicyInfo term = - PolicyInfo - { policy = policy - , currencySymbol = mintingPolicySymbol policy - } - where - policy = mkMintingPolicy term +mkValidatorInfo :: ClosedTerm PValidator -> ScriptInfo +mkValidatorInfo term = + mkScriptInfo (getValidator $ mkValidator term) From 8ce030cf24edf775b8249f8129207139e0bae08b Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Tue, 28 Jun 2022 21:08:13 +0200 Subject: [PATCH 15/78] use `Capture` to make API more neat, update bench --- agora-scripts/Main.hs | 12 ++++---- agora-scripts/ScriptExport/API.hs | 47 ++++++++++++++++++------------- 2 files changed, 33 insertions(+), 26 deletions(-) diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index 7d25b43c..3a9d94da 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -52,12 +52,12 @@ builders = def & insertBuilder "governorPolicy" ((.governorPolicyInfo) . agoraScripts) & insertBuilder "governorValidator" ((.governorValidatorInfo) . agoraScripts) - & insertBuilder "stakePolicyInfo" ((.stakePolicyInfo) . agoraScripts) - & insertBuilder "stakeValidatorInfo" ((.stakeValidatorInfo) . agoraScripts) - & insertBuilder "proposalPolicyInfo" ((.proposalPolicyInfo) . agoraScripts) - & insertBuilder "proposalValidatorInfo" ((.proposalValidatorInfo) . agoraScripts) - & insertBuilder "treasuryValidatorInfo" ((.treasuryValidatorInfo) . agoraScripts) - & insertBuilder "authorityTokenPolicyInfo" ((.authorityTokenPolicyInfo) . agoraScripts) + & insertBuilder "stakePolicy" ((.stakePolicyInfo) . agoraScripts) + & insertBuilder "stakeValidator" ((.stakeValidatorInfo) . agoraScripts) + & insertBuilder "proposalPolicy" ((.proposalPolicyInfo) . agoraScripts) + & insertBuilder "proposalValidator" ((.proposalValidatorInfo) . agoraScripts) + & insertBuilder "treasuryValidator" ((.treasuryValidatorInfo) . agoraScripts) + & insertBuilder "authorityTokenPolicy" ((.authorityTokenPolicyInfo) . agoraScripts) {- | Create scripts from params. diff --git a/agora-scripts/ScriptExport/API.hs b/agora-scripts/ScriptExport/API.hs index c41b48ae..4fb70f1e 100644 --- a/agora-scripts/ScriptExport/API.hs +++ b/agora-scripts/ScriptExport/API.hs @@ -23,9 +23,9 @@ import Network.Wai.Middleware.Cors (CorsResourcePolicy (corsRequestHeaders), cor import Prettyprinter (Pretty (pretty), defaultLayoutOptions, hsep, layoutPretty, viaShow) import Prettyprinter.Render.String (renderString) import ScriptExport.Options (Options (..)) -import ScriptExport.Types (Builders, ScriptQuery, runQuery) +import ScriptExport.Types (Builders, ScriptQuery (ScriptQuery), runQuery) import ScriptExport.Types qualified as Builders -import Servant.API (Get, JSON, Post, ReqBody, (:<|>) (..), type (:>)) +import Servant.API (Capture, Get, JSON, Post, ReqBody, (:<|>) (..), type (:>)) import Servant.Server qualified as Servant import System.Clock (TimeSpec (TimeSpec)) import Text.Printf (printf) @@ -35,11 +35,14 @@ import Text.Printf (printf) @since 0.2.0 -} type API = + -- /query-script/:name "query-script" - :> ReqBody '[JSON] ScriptQuery + :> Capture "name" Text + :> ReqBody '[JSON] Aeson.Value :> Post '[JSON] Aeson.Value + -- /info :<|> "info" - :> Get '[JSON] ServerInfo + :> Get '[JSON] ServerInfo {- | Information about the server. @@ -67,37 +70,41 @@ data ServerInfo = ServerInfo -- | Run a Warp server that exposes a script generation endpoint. runServer :: Text -> Builders -> Options -> IO () runServer revision builders options = do - let settings = + let logger req status _maybeFileSize = + putStrLn . renderString . layoutPretty defaultLayoutOptions $ + hsep + [ "[info]" + , viaShow $ Wai.requestMethod req + , viaShow $ Wai.rawPathInfo req + , "(" <> pretty (Http.statusCode status) <> ")" + ] + + settings = Warp.defaultSettings & Warp.setPort options.port - & Warp.setLogger - ( \req status _maybeFileSize -> - putStrLn . renderString . layoutPretty defaultLayoutOptions $ - hsep - [ "[info]" - , viaShow $ Wai.requestMethod req - , viaShow $ Wai.rawPathInfo req - , "(" <> pretty (Http.statusCode status) <> ")" - ] - ) + & Warp.setLogger logger corsPolicy = simpleCorsResourcePolicy { -- NOTE: Webpack dev server requires this for CORS workaround. corsRequestHeaders = "content-type" : corsRequestHeaders simpleCorsResourcePolicy } - corsMiddleware = cors . const $ Just corsPolicy - -- Scripts stay cached for five minutes - query <- cachedForM (Just $ TimeSpec 300 0) (`runQuery` builders) + corsMiddleware = cors . const $ Just corsPolicy - let serverInfo = + serverInfo = ServerInfo { revision = revision , exposedBuilders = Builders.toList builders } + -- Scripts stay cached for five minutes + query <- cachedForM (Just $ TimeSpec 300 0) (`runQuery` builders) + + let handler = (\name -> query . ScriptQuery name) :<|> pure serverInfo + printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) - Servant.serve (Proxy @API) (query :<|> pure serverInfo) + + Servant.serve (Proxy @API) handler & corsMiddleware & Warp.runSettings settings From be1fd594b6e0c24a91b8b93c09dbaee23d2d6796 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Wed, 29 Jun 2022 10:35:34 +0200 Subject: [PATCH 16/78] update command line options --- agora-scripts/ScriptExport/API.hs | 6 +++--- agora-scripts/ScriptExport/Options.hs | 16 ++++++++++++++-- 2 files changed, 17 insertions(+), 5 deletions(-) diff --git a/agora-scripts/ScriptExport/API.hs b/agora-scripts/ScriptExport/API.hs index 4fb70f1e..f09ffd2a 100644 --- a/agora-scripts/ScriptExport/API.hs +++ b/agora-scripts/ScriptExport/API.hs @@ -35,12 +35,12 @@ import Text.Printf (printf) @since 0.2.0 -} type API = - -- /query-script/:name + -- POST /query-script/:name "query-script" :> Capture "name" Text :> ReqBody '[JSON] Aeson.Value :> Post '[JSON] Aeson.Value - -- /info + -- GET /info :<|> "info" :> Get '[JSON] ServerInfo @@ -106,5 +106,5 @@ runServer revision builders options = do printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) Servant.serve (Proxy @API) handler - & corsMiddleware + & (if options.enableCorsMiddleware then corsMiddleware else id) & Warp.runSettings settings diff --git a/agora-scripts/ScriptExport/Options.hs b/agora-scripts/ScriptExport/Options.hs index b37da56c..2ea6a570 100644 --- a/agora-scripts/ScriptExport/Options.hs +++ b/agora-scripts/ScriptExport/Options.hs @@ -11,8 +11,9 @@ import Network.Wai.Handler.Warp qualified as Warp import Options.Applicative ((<**>)) import Options.Applicative qualified as Opt -newtype Options = Options +data Options = Options { port :: Warp.Port + , enableCorsMiddleware :: Bool } deriving stock (Show, Eq) @@ -25,7 +26,18 @@ opt = <> Opt.short 'p' <> Opt.metavar "PORT" <> Opt.value 3939 - <> Opt.help "The path where the script configuration is." + <> Opt.help "The port to run the server on." + ) + <*> Opt.switch + ( Opt.long "enable-cors-middleware" + <> Opt.short 'c' + <> Opt.help + ( unwords + [ "Enable cors middleware." + , "This is usually required for some local servers." + , "For security reasons, this should be disabled in production." + ] + ) ) parseOptions :: IO Options From a2f849441f7931c09fec62c270f63be77a2d4847 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Wed, 29 Jun 2022 11:36:13 +0200 Subject: [PATCH 17/78] add `agora-scripts` explainer in README.md --- README.md | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/README.md b/README.md index c21076b9..9a3eb302 100644 --- a/README.md +++ b/README.md @@ -21,6 +21,18 @@ An up to date version of the [Nix package manager](nixos.org) (>=2.3) is require Open a development shell with `nix develop` and build the project with `cabal build`. Those pained by the need to remember to enter a Nix shell may consider using [nix-direnv](https://github.com/nix-community/nix-direnv). +## `agora-scripts` HTTP export server + +To use scripts in a frontend, you can use the `agora-scripts` executable which allows you to query them on-demand. + +The CTL repo [`agora-offchain`](https://github.com/mlabs-haskell/agora-offchain) already has the setup prepared for this feature. + +In order to run the server, simply run the following command: + +```sh +cabal run agora-scripts -- --enable-cors-middleware +``` + ## Documentation Documentation for Agora is hosted on Notion. You can find the specs [here](https://liqwid.notion.site/e85c09d2c9a542b19aac8dd3d6caa98b?v=d863219cd6a14082a661c4959cabd6e7). From 6d27bf02707ea3cfbdb3a9ee2ee048b39bfa3e2e Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 29 Jun 2022 16:26:54 +0800 Subject: [PATCH 18/78] encode `ProposalThresholds`/`ProposalTimingConfig` normally --- agora/Agora/Proposal.hs | 17 ++++-------- agora/Agora/Proposal/Time.hs | 24 +++++------------ bench.csv | 50 ++++++++++++++++++------------------ 3 files changed, 37 insertions(+), 54 deletions(-) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 55f22ba9..7f5ea2a9 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -226,15 +226,8 @@ data ProposalThresholds = ProposalThresholds GHC.Generic ) deriving anyclass (Generic) - deriving - ( -- | @since 0.1.0 - PlutusTx.ToData - , -- | @since 0.1.0 - PlutusTx.FromData - , -- | @since 0.1.0 - PlutusTx.UnsafeFromData - ) - via (ProductIsData ProposalThresholds) + +PlutusTx.makeIsDataIndexed 'ProposalThresholds [('ProposalThresholds, 0)] {- | Map which encodes the total tally for each result. It's important that the "shape" is consistent with the shape of 'effects'. @@ -528,11 +521,11 @@ newtype PProposalThresholds (s :: S) = PProposalThresholds , -- | @since 0.1.0 PDataFields ) - via (DerivePNewtype' PProposalThresholds) + via (PIsDataReprInstances PProposalThresholds) -- | @since 0.1.0 deriving via - PAsData (DerivePNewtype' PProposalThresholds) + PAsData (PIsDataReprInstances PProposalThresholds) instance PTryFrom PData (PAsData PProposalThresholds) @@ -541,7 +534,7 @@ instance PUnsafeLiftDecl PProposalThresholds where type PLifted PProposalThresho -- | @since 0.1.0 deriving via - (DerivePConstantViaDataList ProposalThresholds PProposalThresholds) + (DerivePConstantViaData ProposalThresholds PProposalThresholds) instance (PConstantDecl ProposalThresholds) diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index d74d8474..640552bc 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -40,13 +40,10 @@ import Plutarch.Api.V1 ( PUpperBound (PUpperBound), ) import Plutarch.DataRepr ( + DerivePConstantViaData (..), PDataFields, + PIsDataReprInstances (..), ) -import Plutarch.Extra.IsData ( - DerivePConstantViaDataList (..), - ProductIsData (ProductIsData), - ) -import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), @@ -95,15 +92,8 @@ data ProposalTimingConfig = ProposalTimingConfig GHC.Generic ) deriving anyclass (Generic) - deriving - ( -- | @since 0.1.0 - PlutusTx.ToData - , -- | @since 0.1.0 - PlutusTx.FromData - , -- | @since 0.1.0 - PlutusTx.UnsafeFromData - ) - via (ProductIsData ProposalTimingConfig) + +PlutusTx.makeIsDataIndexed 'ProposalTimingConfig [('ProposalTimingConfig, 0)] -- | Represents the maximum width of a 'PlutusLedgerApi.V1.Time.POSIXTimeRange'. newtype MaxTimeRangeWidth = MaxTimeRangeWidth {getMaxWidth :: POSIXTime} @@ -239,10 +229,10 @@ newtype PProposalTimingConfig (s :: S) = PProposalTimingConfig , -- | @since 0.1.0 PDataFields ) - via (DerivePNewtype' PProposalTimingConfig) + via (PIsDataReprInstances PProposalTimingConfig) -- | @since 0.1.0 -deriving via PAsData (DerivePNewtype' PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig) +deriving via PAsData (PIsDataReprInstances PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalTimingConfig where @@ -250,7 +240,7 @@ instance PUnsafeLiftDecl PProposalTimingConfig where -- | @since 0.1.0 deriving via - (DerivePConstantViaDataList ProposalTimingConfig PProposalTimingConfig) + (DerivePConstantViaData ProposalTimingConfig PProposalTimingConfig) instance (PConstantDecl ProposalTimingConfig) diff --git a/bench.csv b/bench.csv index 72557280..c8b0da08 100644 --- a/bench.csv +++ b/bench.csv @@ -2,36 +2,36 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,96559225,271500,9112 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,114802087,321461,3723 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,87839169,243032,8561 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609 Agora/Stake/policy/stakeCreation,50939580,148729,2387 Agora/Stake/validator/stakeDepositWithdraw deposit,181581435,493259,4413 Agora/Stake/validator/stakeDepositWithdraw withdraw,181581435,493259,4401 -Agora/Proposal/policy/proposalCreation,23140177,69194,1503 -Agora/Proposal/validator/cosignature/proposal,325643495,929930,8840 -Agora/Proposal/validator/cosignature/stake,125315872,312659,4934 -Agora/Proposal/validator/voting/proposal,281136993,794418,8758 -Agora/Proposal/validator/voting/stake,120122971,320497,4891 -Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,275767527,779218,8665 -Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,290854622,820626,8674 -Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,279448017,787331,8674 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,275271038,778316,8667 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,276689572,781621,8668 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,277820550,784025,8668 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",289580399,816378,8718 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",259859750,740610,8720 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",256153418,732289,8722 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",256153418,732289,8722 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2828039393,7977807,29495 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2501684605,7096512,29680 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2393040618,6756747,29664 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2393040618,6756747,29664 +Agora/Proposal/policy/proposalCreation,23140177,69194,1515 +Agora/Proposal/validator/cosignature/proposal,312261341,886430,8188 +Agora/Proposal/validator/cosignature/stake,125315872,312659,4942 +Agora/Proposal/validator/voting/proposal,268025219,751750,8106 +Agora/Proposal/validator/voting/stake,120122971,320497,4899 +Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,263397893,738746,8013 +Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,278686368,780686,8022 +Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,267078383,746859,8022 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,262901404,737844,8015 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,264319938,741149,8016 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,265450916,743553,8016 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",276198245,772878,8066 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",246477596,697110,8068 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",242771264,688789,8070 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",242771264,688789,8070 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2814657239,7934307,29173 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2488302451,7053012,29357 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2379658464,6713247,29341 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2379658464,6713247,29341 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Governor/policy/GST minting,55335573,158459,2162 -Agora/Governor/validator/proposal creation,322870773,877643,9616 -Agora/Governor/validator/GATs minting,440461675,1209344,9735 -Agora/Governor/validator/mutate governor state,97706076,276959,9217 +Agora/Governor/policy/GST minting,51007235,144191,2034 +Agora/Governor/validator/proposal creation,309689999,834675,9064 +Agora/Governor/validator/GATs minting,418560845,1137908,9187 +Agora/Governor/validator/mutate governor state,88986020,248491,8662 From cd4179d854a76c4738e66a426369d097508cc765 Mon Sep 17 00:00:00 2001 From: fanghr Date: Wed, 29 Jun 2022 19:16:02 +0800 Subject: [PATCH 19/78] update Makefile --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index deab8da8..e04e1959 100644 --- a/Makefile +++ b/Makefile @@ -20,7 +20,7 @@ usage: @echo " ps_bridge -- Generate purescript bridge files" @echo " bench -- Generate bench report bench.csv" @echo " bench_check -- Check if bench report is up-to-date" - @echo " scripts -- Export scripts to json files" + @echo " scripts -- Run the agora script server (dev mode)" hoogle: pkill hoogle || true @@ -71,4 +71,4 @@ bench_check: rm -rf $(BENCH_TMPDIR) scripts: - cabal run agora-scripts \ No newline at end of file + cabal run agora-scripts -- -c From 835e04e049117d5b4b4c2b1a493a81c8045fb646 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Thu, 30 Jun 2022 16:52:23 +0200 Subject: [PATCH 20/78] use `plutarch-script-export` library --- agora-scripts/Codec/Serialise/Orphans.hs | 34 - agora-scripts/Data/Cache/Cached.hs | 49 -- agora-scripts/Main.hs | 2 +- agora-scripts/ScriptExport/API.hs | 110 --- agora-scripts/ScriptExport/Options.hs | 51 -- agora-scripts/ScriptExport/Types.hs | 112 --- agora.cabal | 22 +- agora/Agora/ScriptInfo.hs | 87 --- flake.lock | 956 ++++++++++++++++++++++- flake.nix | 6 +- 10 files changed, 925 insertions(+), 504 deletions(-) delete mode 100644 agora-scripts/Codec/Serialise/Orphans.hs delete mode 100644 agora-scripts/Data/Cache/Cached.hs delete mode 100644 agora-scripts/ScriptExport/API.hs delete mode 100644 agora-scripts/ScriptExport/Options.hs delete mode 100644 agora-scripts/ScriptExport/Types.hs delete mode 100644 agora/Agora/ScriptInfo.hs diff --git a/agora-scripts/Codec/Serialise/Orphans.hs b/agora-scripts/Codec/Serialise/Orphans.hs deleted file mode 100644 index f310abd7..00000000 --- a/agora-scripts/Codec/Serialise/Orphans.hs +++ /dev/null @@ -1,34 +0,0 @@ -{-# OPTIONS_GHC -Wno-orphans #-} - -{- | -Module : Codec.Serialise.Orphans -Maintainer : emi@haskell.fyi -Description: Orphan instances for Serialising and Hashing Cardano types. - -Orphan instances for Serialising and Hashing Cardano types. --} -module Codec.Serialise.Orphans () where - -import Codec.Serialise (Serialise) -import Data.Tagged (Tagged (Tagged)) -import PlutusLedgerApi.V1 (TxId, TxOutRef) -import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol, TokenName) - -deriving anyclass instance - Serialise TxOutRef - -deriving anyclass instance - Serialise TxId - -deriving anyclass instance - Serialise AssetClass - -deriving anyclass instance - Serialise CurrencySymbol - -deriving anyclass instance - Serialise TokenName - -deriving newtype instance - Serialise a => - Serialise (Tagged s a) diff --git a/agora-scripts/Data/Cache/Cached.hs b/agora-scripts/Data/Cache/Cached.hs deleted file mode 100644 index a0d5d894..00000000 --- a/agora-scripts/Data/Cache/Cached.hs +++ /dev/null @@ -1,49 +0,0 @@ -{- | Module : API - Maintainer : emi@haskell.fyi - Description: API for script exporter. - - API for script exporter. --} -module Data.Cache.Cached ( - cached, - cachedM, - cachedForM, -) where - -import Control.Monad.IO.Class (MonadIO (liftIO)) -import Data.Cache qualified as Cache -import Data.Functor ((<&>)) -import Data.Hashable (Hashable) -import System.Clock (TimeSpec) - -{- | 'cachedFor' but items last forever. - - Uses a HashMap under the hood. --} -cached :: (Monad m, MonadIO m, Hashable k, Ord k) => (k -> v) -> IO (k -> m v) -cached f = cachedForM Nothing (pure . f) - -{- | 'cachedFor' but items last forever. - - Uses a HashMap under the hood. --} -cachedM :: (Monad m, MonadIO m, Hashable k, Ord k) => (k -> m v) -> IO (k -> m v) -cachedM = cachedForM Nothing - -{- | Create a cached version of a function tainting result with MonadIO context. - - Results are cached dependent on the first argument, @'Maybe' 'TimeSpec'@. - - Uses a HashMap under the hood. --} -cachedForM :: (Monad m, MonadIO m, Hashable k, Ord k) => Maybe TimeSpec -> (k -> m v) -> IO (k -> m v) -cachedForM t f = - Cache.newCache t <&> \cache k -> do - res <- liftIO $ Cache.lookup cache k - case res of - Nothing -> do - v <- f k - liftIO $ Cache.insert cache k v - pure v - Just v -> do - pure v diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index 3a9d94da..0fdc5aed 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -15,7 +15,6 @@ import Agora.Governor.Scripts (authorityTokenFromGovernor, authorityTokenSymbolF import Agora.Proposal (Proposal) import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) import Agora.SafeMoney (GTTag) -import Agora.ScriptInfo (ScriptInfo, mkPolicyInfo, mkValidatorInfo) import Agora.Stake (Stake) import Agora.Stake.Scripts (stakePolicy, stakeValidator) import Agora.Treasury (treasuryValidator) @@ -32,6 +31,7 @@ import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) import PlutusLedgerApi.V1.Value qualified as Value import ScriptExport.API (runServer) import ScriptExport.Options (parseOptions) +import ScriptExport.ScriptInfo (ScriptInfo, mkPolicyInfo, mkValidatorInfo) import ScriptExport.Types (Builders, insertBuilder) main :: IO () diff --git a/agora-scripts/ScriptExport/API.hs b/agora-scripts/ScriptExport/API.hs deleted file mode 100644 index f09ffd2a..00000000 --- a/agora-scripts/ScriptExport/API.hs +++ /dev/null @@ -1,110 +0,0 @@ -{- | Module : ScriptExport.API - Maintainer : emi@haskell.fyi - Description: API for script exporter. - - API for script exporter. --} -module ScriptExport.API ( - API, - runServer, -) where - -import Codec.Serialise.Orphans () -import Data.Aeson qualified as Aeson -import Data.Cache.Cached (cachedForM) -import Data.Function ((&)) -import Data.Proxy (Proxy (Proxy)) -import Data.Text (Text) -import GHC.Generics qualified as GHC -import Network.HTTP.Types qualified as Http -import Network.Wai qualified as Wai -import Network.Wai.Handler.Warp qualified as Warp -import Network.Wai.Middleware.Cors (CorsResourcePolicy (corsRequestHeaders), cors, simpleCorsResourcePolicy) -import Prettyprinter (Pretty (pretty), defaultLayoutOptions, hsep, layoutPretty, viaShow) -import Prettyprinter.Render.String (renderString) -import ScriptExport.Options (Options (..)) -import ScriptExport.Types (Builders, ScriptQuery (ScriptQuery), runQuery) -import ScriptExport.Types qualified as Builders -import Servant.API (Capture, Get, JSON, Post, ReqBody, (:<|>) (..), type (:>)) -import Servant.Server qualified as Servant -import System.Clock (TimeSpec (TimeSpec)) -import Text.Printf (printf) - -{- | Servant API type for script generation. - - @since 0.2.0 --} -type API = - -- POST /query-script/:name - "query-script" - :> Capture "name" Text - :> ReqBody '[JSON] Aeson.Value - :> Post '[JSON] Aeson.Value - -- GET /info - :<|> "info" - :> Get '[JSON] ServerInfo - -{- | Information about the server. - - @since 0.2.0 --} -data ServerInfo = ServerInfo - { revision :: Text - , exposedBuilders :: [Text] - } - deriving anyclass - ( -- | @since 0.2.0 - Aeson.ToJSON - , -- | @since 0.2.0 - Aeson.FromJSON - ) - deriving stock - ( -- | @since 0.2.0 - Show - , -- | @since 0.2.0 - Eq - , -- | @since 0.2.0 - GHC.Generic - ) - --- | Run a Warp server that exposes a script generation endpoint. -runServer :: Text -> Builders -> Options -> IO () -runServer revision builders options = do - let logger req status _maybeFileSize = - putStrLn . renderString . layoutPretty defaultLayoutOptions $ - hsep - [ "[info]" - , viaShow $ Wai.requestMethod req - , viaShow $ Wai.rawPathInfo req - , "(" <> pretty (Http.statusCode status) <> ")" - ] - - settings = - Warp.defaultSettings - & Warp.setPort options.port - & Warp.setLogger logger - - corsPolicy = - simpleCorsResourcePolicy - { -- NOTE: Webpack dev server requires this for CORS workaround. - corsRequestHeaders = "content-type" : corsRequestHeaders simpleCorsResourcePolicy - } - - corsMiddleware = cors . const $ Just corsPolicy - - serverInfo = - ServerInfo - { revision = revision - , exposedBuilders = Builders.toList builders - } - - -- Scripts stay cached for five minutes - query <- cachedForM (Just $ TimeSpec 300 0) (`runQuery` builders) - - let handler = (\name -> query . ScriptQuery name) :<|> pure serverInfo - - printf "[info] Running 'agora-scripts' on :%d\n" (Warp.getPort settings) - - Servant.serve (Proxy @API) handler - & (if options.enableCorsMiddleware then corsMiddleware else id) - & Warp.runSettings settings diff --git a/agora-scripts/ScriptExport/Options.hs b/agora-scripts/ScriptExport/Options.hs deleted file mode 100644 index 2ea6a570..00000000 --- a/agora-scripts/ScriptExport/Options.hs +++ /dev/null @@ -1,51 +0,0 @@ -{- | -Module : ScriptExport.Options -Maintainer : emi@haskell.fyi -Description: Command line options for 'agora-scripts'. - -Command line options for 'agora-scripts'. --} -module ScriptExport.Options (Options (..), parseOptions) where - -import Network.Wai.Handler.Warp qualified as Warp -import Options.Applicative ((<**>)) -import Options.Applicative qualified as Opt - -data Options = Options - { port :: Warp.Port - , enableCorsMiddleware :: Bool - } - deriving stock (Show, Eq) - -opt :: Opt.Parser Options -opt = - Options - <$> Opt.option - Opt.auto - ( Opt.long "port" - <> Opt.short 'p' - <> Opt.metavar "PORT" - <> Opt.value 3939 - <> Opt.help "The port to run the server on." - ) - <*> Opt.switch - ( Opt.long "enable-cors-middleware" - <> Opt.short 'c' - <> Opt.help - ( unwords - [ "Enable cors middleware." - , "This is usually required for some local servers." - , "For security reasons, this should be disabled in production." - ] - ) - ) - -parseOptions :: IO Options -parseOptions = Opt.execParser p - where - p = - Opt.info - (opt <**> Opt.helper) - ( Opt.fullDesc - <> Opt.progDesc "Generate Agora scripts for off-chain use." - ) diff --git a/agora-scripts/ScriptExport/Types.hs b/agora-scripts/ScriptExport/Types.hs deleted file mode 100644 index c91805e0..00000000 --- a/agora-scripts/ScriptExport/Types.hs +++ /dev/null @@ -1,112 +0,0 @@ -{- | -Module : ScriptExport.Types -Maintainer : emi@haskell.fyi -Description: Param and script types for generation. - -Param and script types for generation. --} -module ScriptExport.Types ( - ScriptQuery (..), - Builders, - runQuery, - insertBuilder, - toList, -) where - -import Data.Aeson qualified as Aeson -import Data.ByteString.Lazy.Char8 qualified as LBS -import Data.Coerce (coerce) -import Data.Default.Class (Default (def)) -import Data.Hashable (Hashable) -import Data.Map.Strict (Map) -import Data.Map.Strict qualified as Map -import Data.Text (Text) -import GHC.Generics qualified as GHC -import Servant qualified - -{- | Query data for getting script info. - - @since 0.2.0 --} -data ScriptQuery = ScriptQuery - { name :: Text - , paramsPayload :: Aeson.Value - } - deriving anyclass - ( -- | @since 0.2.0 - Aeson.ToJSON - , -- | @since 0.2.0 - Aeson.FromJSON - ) - deriving stock - ( -- | @since 0.2.0 - Show - , -- | @since 0.2.0 - Eq - , -- | @since 0.2.0 - GHC.Generic - , -- | @since 0.2.0 - Ord - ) - deriving anyclass - ( -- | @since 0.2.0 - Hashable - ) - -{- | Run a query on Builders. - - @since 0.2.0 --} -runQuery :: ScriptQuery -> Builders -> Servant.Handler Aeson.Value -runQuery s = - maybe - (Servant.throwError Servant.err404 {Servant.errBody = "Builder not found"}) - ($ s.paramsPayload) - . Map.lookup s.name - . getBuilders - -{- | Represents a list of named pure functions. - - @since 0.2.0 --} -newtype Builders = Builders - { getBuilders :: Map Text (Aeson.Value -> Servant.Handler Aeson.Value) - } - --- | @since 0.2.0 -instance Default Builders where - def = Builders Map.empty - -{- | Insert a pure function into the Builders map. - - @since 0.2.0 --} -insertBuilder :: - forall p s. - (Aeson.FromJSON p, Aeson.ToJSON s) => - Text -> - (p -> s) -> - Builders -> - Builders -insertBuilder k = coerce . Map.insert k . throughJSON - where - throughJSON :: - forall p s. - (Aeson.FromJSON p, Aeson.ToJSON s) => - (p -> s) -> - (Aeson.Value -> Servant.Handler Aeson.Value) - throughJSON f v = - case Aeson.fromJSON v of - Aeson.Error e -> - Servant.throwError $ - Servant.err400 - { Servant.errBody = LBS.pack e - } - Aeson.Success v' -> pure . Aeson.toJSON $ f v' - -{- | Get a list of the available builders. - - @since 0.2.0 --} -toList :: Builders -> [Text] -toList = Map.keys . getBuilders diff --git a/agora.cabal b/agora.cabal index 143f7701..73adc2ae 100644 --- a/agora.cabal +++ b/agora.cabal @@ -89,7 +89,7 @@ common deps build-depends: , aeson , ansi-terminal - , base >=4.14 && <5 + , base >=4.14 && <5 , base-compat , base16 , bytestring @@ -103,6 +103,7 @@ common deps , plutarch , plutarch-numeric , plutarch-safe-money + , plutarch-script-export , plutus-core , plutus-ledger-api , plutus-tx @@ -154,7 +155,6 @@ library Agora.Proposal.Scripts Agora.Proposal.Time Agora.SafeMoney - Agora.ScriptInfo Agora.Stake Agora.Stake.Scripts Agora.Treasury @@ -237,27 +237,9 @@ executable agora-scripts main-is: Main.hs hs-source-dirs: agora-scripts other-modules: - Codec.Serialise.Orphans - Data.Cache.Cached - ScriptExport.API - ScriptExport.Options - ScriptExport.Types - build-depends: , agora - , cache - , clock - , containers , gitrev - , hashable - , http-types - , optparse-applicative - , prettyprinter - , servant - , servant-server - , wai - , wai-cors - , warp executable agora-purescript-bridge import: lang, deps, exe-opts diff --git a/agora/Agora/ScriptInfo.hs b/agora/Agora/ScriptInfo.hs deleted file mode 100644 index d4beba19..00000000 --- a/agora/Agora/ScriptInfo.hs +++ /dev/null @@ -1,87 +0,0 @@ -{-# LANGUAGE TemplateHaskell #-} - -{- | -Module : Agora.ScriptInfo -Maintainer : emi@haskell.fyi -Description: Exportable script bundles for off-chain consumption. - -Exportable script bundles for off-chain consumption. --} -module Agora.ScriptInfo ( - -- * Types - ScriptInfo (..), - - -- * Introduction functions - mkValidatorInfo, - mkPolicyInfo, -) where - -import Agora.Aeson.Orphans () -import Cardano.Binary qualified as CBOR -import Codec.Serialise qualified as Codec -import Data.Aeson qualified as Aeson -import Data.ByteString.Base16 qualified as Base16 -import Data.ByteString.Lazy qualified as LBS -import Data.ByteString.Short qualified as SBS -import Data.Text (Text) -import GHC.Generics qualified as GHC -import Plutarch.Api.V1 (PMintingPolicy, PValidator, mkMintingPolicy, mkValidator, scriptHash) -import PlutusLedgerApi.V1 ( - MintingPolicy (getMintingPolicy), - Script, - Validator (getValidator), - ) -import PlutusLedgerApi.V1.Scripts (ScriptHash) - -{- | Bundle containing a 'Validator' and its hash. - - @since 0.2.0 --} -data ScriptInfo = ScriptInfo - { cborHex :: Text - -- ^ The validator script encoded as cbor hex. - , rawHex :: Text - -- ^ The validator script encoded as raw hex. - , hash :: ScriptHash - -- ^ Hash of the validator. - } - deriving stock - ( -- | @since 0.2.0 - Show - , -- | @since 0.2.0 - Eq - , -- | @since 0.2.0 - GHC.Generic - ) - deriving anyclass - ( -- | @since 0.2.0 - Aeson.ToJSON - , -- | @since 0.2.0 - Aeson.FromJSON - ) - -mkScriptInfo :: Script -> ScriptInfo -mkScriptInfo script = - let scriptRaw = LBS.toStrict $ Codec.serialise script - scriptCBOR = CBOR.serialize' $ SBS.toShort scriptRaw - in ScriptInfo - { cborHex = Base16.encodeBase16 scriptCBOR - , rawHex = Base16.encodeBase16 scriptRaw - , hash = scriptHash script - } - -{- | Create a 'ScriptInfo' given a Plutarch term of a policy. - - @since 0.2.0 --} -mkPolicyInfo :: ClosedTerm PMintingPolicy -> ScriptInfo -mkPolicyInfo term = - mkScriptInfo (getMintingPolicy $ mkMintingPolicy term) - -{- | Create a 'ScriptInfo' given a Plutarch term of a validator. - - @since 0.2.0 --} -mkValidatorInfo :: ClosedTerm PValidator -> ScriptInfo -mkValidatorInfo term = - mkScriptInfo (getValidator $ mkValidator term) diff --git a/flake.lock b/flake.lock index f987a5d6..34e3e2ca 100644 --- a/flake.lock +++ b/flake.lock @@ -48,6 +48,22 @@ "type": "github" } }, + "HTTP_12": { + "flake": false, + "locked": { + "lastModified": 1451647621, + "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", + "owner": "phadej", + "repo": "HTTP", + "rev": "9bc0996d412fef1787449d841277ef663ad9a915", + "type": "github" + }, + "original": { + "owner": "phadej", + "repo": "HTTP", + "type": "github" + } + }, "HTTP_2": { "flake": false, "locked": { @@ -243,6 +259,23 @@ "type": "github" } }, + "cabal-32_12": { + "flake": false, + "locked": { + "lastModified": 1603716527, + "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", + "owner": "haskell", + "repo": "cabal", + "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.2", + "repo": "cabal", + "type": "github" + } + }, "cabal-32_2": { "flake": false, "locked": { @@ -430,6 +463,23 @@ "type": "github" } }, + "cabal-34_12": { + "flake": false, + "locked": { + "lastModified": 1640353650, + "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=", + "owner": "haskell", + "repo": "cabal", + "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.4", + "repo": "cabal", + "type": "github" + } + }, "cabal-34_2": { "flake": false, "locked": { @@ -617,6 +667,23 @@ "type": "github" } }, + "cabal-36_12": { + "flake": false, + "locked": { + "lastModified": 1641652457, + "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=", + "owner": "haskell", + "repo": "cabal", + "rev": "f27667f8ec360c475027dcaee0138c937477b070", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.6", + "repo": "cabal", + "type": "github" + } + }, "cabal-36_2": { "flake": false, "locked": { @@ -801,6 +868,22 @@ "type": "github" } }, + "cardano-base_12": { + "flake": false, + "locked": { + "lastModified": 1652788515, + "narHash": "sha256-l0KgomRi6YhEoOlFnBYEXhnZO2+PW68rhfUrbMXjhCQ=", + "owner": "input-output-hk", + "repo": "cardano-base", + "rev": "631cb6cf1fa01ab346233b610a38b3b4cba6e6ab", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-base", + "type": "github" + } + }, "cardano-base_2": { "flake": false, "locked": { @@ -980,6 +1063,23 @@ "type": "github" } }, + "cardano-crypto_12": { + "flake": false, + "locked": { + "lastModified": 1621376239, + "narHash": "sha256-oxIOVlgm07FAEmgGRF1C2me9TXqVxQulEOcJ22zpTRs=", + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + } + }, "cardano-crypto_2": { "flake": false, "locked": { @@ -1167,6 +1267,23 @@ "type": "github" } }, + "cardano-prelude_12": { + "flake": false, + "locked": { + "lastModified": 1653997332, + "narHash": "sha256-E+YSfUsvxdoOr7n7fz4xd7zb4z8XBRGNYOKipc2A1pw=", + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + } + }, "cardano-prelude_2": { "flake": false, "locked": { @@ -1351,6 +1468,22 @@ "type": "github" } }, + "cardano-repo-tool_12": { + "flake": false, + "locked": { + "lastModified": 1624584417, + "narHash": "sha256-YSepT97PagR/1jTYV/Yer8a2GjFe9+tTwaTCHxuK50M=", + "owner": "input-output-hk", + "repo": "cardano-repo-tool", + "rev": "30e826ed8f00e3e154453b122a6f3d779b2f73ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-repo-tool", + "type": "github" + } + }, "cardano-repo-tool_2": { "flake": false, "locked": { @@ -1527,6 +1660,22 @@ "type": "github" } }, + "cardano-shell_12": { + "flake": false, + "locked": { + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-shell", + "type": "github" + } + }, "cardano-shell_2": { "flake": false, "locked": { @@ -3129,6 +3278,21 @@ "type": "github" } }, + "flake-utils_35": { + "locked": { + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, "flake-utils_4": { "locked": { "lastModified": 1652776076, @@ -3272,6 +3436,22 @@ "type": "github" } }, + "flat_12": { + "flake": false, + "locked": { + "lastModified": 1651403785, + "narHash": "sha256-g+jGep1IXdw4q01W67J6f6OODY91QzIlW1+Eu8pR+u0=", + "owner": "Quid2", + "repo": "flat", + "rev": "559617e058098b776b431e2a67346ad3adea2440", + "type": "github" + }, + "original": { + "owner": "Quid2", + "repo": "flat", + "type": "github" + } + }, "flat_2": { "flake": false, "locked": { @@ -3468,6 +3648,23 @@ "type": "github" } }, + "ghc-8.6.5-iohk_12": { + "flake": false, + "locked": { + "lastModified": 1600920045, + "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=", + "owner": "input-output-hk", + "repo": "ghc", + "rev": "95713a6ecce4551240da7c96b6176f980af75cae", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "ref": "release/8.6.5-iohk", + "repo": "ghc", + "type": "github" + } + }, "ghc-8.6.5-iohk_2": { "flake": false, "locked": { @@ -3652,6 +3849,22 @@ "type": "github" } }, + "gitignore-nix_12": { + "flake": false, + "locked": { + "lastModified": 1611672876, + "narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "211907489e9f198594c0eb0ca9256a1949c9d412", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "gitignore-nix_2": { "flake": false, "locked": { @@ -3844,6 +4057,22 @@ "type": "github" } }, + "hackage-nix_12": { + "flake": false, + "locked": { + "lastModified": 1651108473, + "narHash": "sha256-zHGCnBdwKvrcYanjf3GARTWF8V2pyJl1QNONUNZSoc0=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "dbab3b292c3400d028a2257e3acd2ac0249da774", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, "hackage-nix_2": { "flake": false, "locked": { @@ -4004,6 +4233,22 @@ "type": "github" } }, + "hackage_12": { + "flake": false, + "locked": { + "lastModified": 1654046237, + "narHash": "sha256-FpM9zE+Q+WrvCiaZBCg5U1g0bYpiZOCxY8V3R5ydBu8=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "eeae1790b9c6a880d96e4a7214fdf0a73bdd6fc0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, "hackage_2": { "flake": false, "locked": { @@ -4557,23 +4802,7 @@ "type": "github" } }, - "haskell-language-server_4": { - "flake": false, - "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", - "type": "github" - }, - "original": { - "owner": "haskell", - "repo": "haskell-language-server", - "type": "github" - } - }, - "haskell-language-server_5": { + "haskell-language-server_33": { "flake": false, "locked": { "lastModified": 1653778781, @@ -4589,7 +4818,7 @@ "type": "github" } }, - "haskell-language-server_6": { + "haskell-language-server_34": { "flake": false, "locked": { "lastModified": 1650980856, @@ -4606,7 +4835,7 @@ "type": "github" } }, - "haskell-language-server_7": { + "haskell-language-server_4": { "flake": false, "locked": { "lastModified": 1654120290, @@ -4622,7 +4851,7 @@ "type": "github" } }, - "haskell-language-server_8": { + "haskell-language-server_5": { "flake": false, "locked": { "lastModified": 1653778781, @@ -4638,7 +4867,7 @@ "type": "github" } }, - "haskell-language-server_9": { + "haskell-language-server_6": { "flake": false, "locked": { "lastModified": 1650980856, @@ -4655,8 +4884,57 @@ "type": "github" } }, - "haskell-nix": { - "inputs": { + "haskell-language-server_7": { + "flake": false, + "locked": { + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_8": { + "flake": false, + "locked": { + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_9": { + "flake": false, + "locked": { + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "1.7.0.0", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-nix": { + "inputs": { "HTTP": "HTTP", "cabal-32": "cabal-32", "cabal-34": "cabal-34", @@ -4749,6 +5027,33 @@ "type": "github" } }, + "haskell-nix-extra-hackage_11": { + "inputs": { + "haskell-nix": [ + "plutarch-script-export", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1653405678, + "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "type": "github" + } + }, "haskell-nix-extra-hackage_2": { "inputs": { "haskell-nix": [ @@ -5345,6 +5650,62 @@ "type": "github" } }, + "haskell-nix_23": { + "inputs": { + "HTTP": "HTTP_12", + "cabal-32": "cabal-32_12", + "cabal-34": "cabal-34_12", + "cabal-36": "cabal-36_12", + "cardano-shell": "cardano-shell_12", + "flake-utils": "flake-utils_35", + "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_12", + "hackage": "hackage_12", + "hpc-coveralls": "hpc-coveralls_12", + "hydra": "hydra_11", + "nix-tools": "nix-tools_12", + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-2003": "nixpkgs-2003_12", + "nixpkgs-2105": "nixpkgs-2105_12", + "nixpkgs-2111": "nixpkgs-2111_24", + "nixpkgs-unstable": "nixpkgs-unstable_12", + "old-ghc-nix": "old-ghc-nix_12", + "stackage": "stackage_12" + }, + "locked": { + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_24": { + "flake": false, + "locked": { + "lastModified": 1651151636, + "narHash": "sha256-WdMP9IMB5kByT0zimDuCYZF/dinRB104H8iDTG/c1Eo=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "f707aa2e75c0d33473166abc61c0b43ac6e107c0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, "haskell-nix_3": { "inputs": { "HTTP": "HTTP_2", @@ -5778,6 +6139,24 @@ "type": "github" } }, + "hercules-ci-effects_12": { + "inputs": { + "nixpkgs": "nixpkgs_56" + }, + "locked": { + "lastModified": 1653841712, + "narHash": "sha256-XBF4i1MuIRAEbFpj3Z3fVaYxzNEsYapyENtw3vG+q1I=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "e14d2131b7c81acca3904b584ac45fb72da64dd2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, "hercules-ci-effects_2": { "inputs": { "nixpkgs": "nixpkgs_9" @@ -5970,6 +6349,22 @@ "type": "github" } }, + "hpc-coveralls_12": { + "flake": false, + "locked": { + "lastModified": 1607498076, + "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", + "type": "github" + }, + "original": { + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "type": "github" + } + }, "hpc-coveralls_2": { "flake": false, "locked": { @@ -6214,6 +6609,31 @@ "type": "indirect" } }, + "hydra_11": { + "inputs": { + "nix": "nix_11", + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "hydra", + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1646878427, + "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "owner": "NixOS", + "repo": "hydra", + "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", + "type": "github" + }, + "original": { + "id": "hydra", + "type": "indirect" + } + }, "hydra_2": { "inputs": { "nix": "nix_2", @@ -6658,6 +7078,38 @@ "type": "github" } }, + "iohk-nix_23": { + "flake": false, + "locked": { + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_24": { + "flake": false, + "locked": { + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, "iohk-nix_3": { "flake": false, "locked": { @@ -7058,6 +7510,22 @@ "type": "github" } }, + "lowdown-src_11": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, "lowdown-src_2": { "flake": false, "locked": { @@ -7255,6 +7723,22 @@ "type": "github" } }, + "nix-tools_12": { + "flake": false, + "locked": { + "lastModified": 1649424170, + "narHash": "sha256-XgKXWispvv5RCvZzPb+p7e6Hy3LMuRjafKMl7kXzxGw=", + "owner": "input-output-hk", + "repo": "nix-tools", + "rev": "e109c94016e3b6e0db7ed413c793e2d4bdb24aa7", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "nix-tools", + "type": "github" + } + }, "nix-tools_2": { "flake": false, "locked": { @@ -7404,6 +7888,27 @@ "type": "github" } }, + "nix_11": { + "inputs": { + "lowdown-src": "lowdown-src_11", + "nixpkgs": "nixpkgs_55", + "nixpkgs-regression": "nixpkgs-regression_11" + }, + "locked": { + "lastModified": 1643066034, + "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "owner": "NixOS", + "repo": "nix", + "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, "nix_2": { "inputs": { "lowdown-src": "lowdown-src_2", @@ -7636,6 +8141,22 @@ "type": "github" } }, + "nixpkgs-2003_12": { + "locked": { + "lastModified": 1620055814, + "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-20.03-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2003_2": { "locked": { "lastModified": 1620055814, @@ -7812,6 +8333,22 @@ "type": "github" } }, + "nixpkgs-2105_12": { + "locked": { + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.05-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2105_2": { "locked": { "lastModified": 1645296114, @@ -8180,6 +8717,38 @@ "type": "github" } }, + "nixpkgs-2111_23": { + "locked": { + "lastModified": 1656492155, + "narHash": "sha256-oKWpYhhgZ2Yt4BZHKSFwJSwOAoFawWxNiW0y7wpde+I=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "7a5ca644cc5e96336e7717aca871f01320c2df09", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_24": { + "locked": { + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2111_3": { "locked": { "lastModified": 1653319070, @@ -8287,12 +8856,44 @@ }, "original": { "owner": "NixOS", - "ref": "nixpkgs-21.11-darwin", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-latest": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, + "nixpkgs-latest_10": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", "type": "github" } }, - "nixpkgs-latest": { + "nixpkgs-latest_11": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8308,7 +8909,7 @@ "type": "github" } }, - "nixpkgs-latest_10": { + "nixpkgs-latest_12": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8324,7 +8925,7 @@ "type": "github" } }, - "nixpkgs-latest_11": { + "nixpkgs-latest_13": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8340,7 +8941,7 @@ "type": "github" } }, - "nixpkgs-latest_12": { + "nixpkgs-latest_14": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8356,7 +8957,7 @@ "type": "github" } }, - "nixpkgs-latest_13": { + "nixpkgs-latest_15": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8372,7 +8973,7 @@ "type": "github" } }, - "nixpkgs-latest_14": { + "nixpkgs-latest_16": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8388,7 +8989,7 @@ "type": "github" } }, - "nixpkgs-latest_15": { + "nixpkgs-latest_17": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8404,7 +9005,7 @@ "type": "github" } }, - "nixpkgs-latest_16": { + "nixpkgs-latest_18": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8420,7 +9021,7 @@ "type": "github" } }, - "nixpkgs-latest_17": { + "nixpkgs-latest_19": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8436,7 +9037,7 @@ "type": "github" } }, - "nixpkgs-latest_18": { + "nixpkgs-latest_2": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8452,7 +9053,7 @@ "type": "github" } }, - "nixpkgs-latest_19": { + "nixpkgs-latest_20": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8468,7 +9069,7 @@ "type": "github" } }, - "nixpkgs-latest_2": { + "nixpkgs-latest_21": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8484,7 +9085,7 @@ "type": "github" } }, - "nixpkgs-latest_20": { + "nixpkgs-latest_22": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8500,7 +9101,7 @@ "type": "github" } }, - "nixpkgs-latest_21": { + "nixpkgs-latest_23": { "locked": { "lastModified": 1653918805, "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", @@ -8658,6 +9259,21 @@ "type": "indirect" } }, + "nixpkgs-regression_11": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, "nixpkgs-regression_2": { "locked": { "lastModified": 1643052045, @@ -8826,6 +9442,22 @@ "type": "github" } }, + "nixpkgs-unstable_12": { + "locked": { + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-unstable_2": { "locked": { "lastModified": 1648219316, @@ -9722,6 +10354,54 @@ "type": "github" } }, + "nixpkgs_55": { + "locked": { + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" + } + }, + "nixpkgs_56": { + "locked": { + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_57": { + "flake": false, + "locked": { + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs_6": { "locked": { "lastModified": 1652885393, @@ -9834,6 +10514,23 @@ "type": "github" } }, + "old-ghc-nix_12": { + "flake": false, + "locked": { + "lastModified": 1631092763, + "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", + "owner": "angerman", + "repo": "old-ghc-nix", + "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", + "type": "github" + }, + "original": { + "owner": "angerman", + "ref": "master", + "repo": "old-ghc-nix", + "type": "github" + } + }, "old-ghc-nix_2": { "flake": false, "locked": { @@ -10465,6 +11162,37 @@ "type": "github" } }, + "plutarch-script-export": { + "inputs": { + "haskell-nix": [ + "plutarch-script-export", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "nixpkgs" + ], + "nixpkgs-2111": "nixpkgs-2111_23", + "nixpkgs-latest": "nixpkgs-latest_22", + "plutarch": "plutarch_12" + }, + "locked": { + "lastModified": 1656599673, + "narHash": "sha256-+ZLiFYiMR/Xk2caFzyzhTWk/bruoK1i39LOwGZEOUp4=", + "owner": "Liqwid-Labs", + "repo": "plutarch-script-export", + "rev": "f27ac2b706c4239779be35f2e3b4971b386f7418", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "ref": "main", + "repo": "plutarch-script-export", + "type": "github" + } + }, "plutarch_10": { "inputs": { "cardano-base": "cardano-base_10", @@ -10548,6 +11276,49 @@ "type": "github" } }, + "plutarch_12": { + "inputs": { + "cardano-base": "cardano-base_12", + "cardano-crypto": "cardano-crypto_12", + "cardano-prelude": "cardano-prelude_12", + "emanote": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "flat": "flat_12", + "haskell-language-server": "haskell-language-server_33", + "haskell-nix": "haskell-nix_23", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_11", + "hercules-ci-effects": "hercules-ci-effects_12", + "iohk-nix": "iohk-nix_23", + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-latest": "nixpkgs-latest_23", + "plutus": "plutus_12", + "protolude": "protolude_12", + "secp256k1-haskell": "secp256k1-haskell_11" + }, + "locked": { + "lastModified": 1654108284, + "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", + "owner": "liqwid-labs", + "repo": "plutarch", + "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "type": "github" + }, + "original": { + "owner": "liqwid-labs", + "repo": "plutarch", + "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "type": "github" + } + }, "plutarch_2": { "inputs": { "cardano-base": "cardano-base_2", @@ -10940,6 +11711,32 @@ "type": "github" } }, + "plutus_12": { + "inputs": { + "cardano-repo-tool": "cardano-repo-tool_12", + "gitignore-nix": "gitignore-nix_12", + "hackage-nix": "hackage-nix_12", + "haskell-language-server": "haskell-language-server_34", + "haskell-nix": "haskell-nix_24", + "iohk-nix": "iohk-nix_24", + "nixpkgs": "nixpkgs_57", + "pre-commit-hooks-nix": "pre-commit-hooks-nix_12", + "sphinxcontrib-haddock": "sphinxcontrib-haddock_12" + }, + "locked": { + "lastModified": 1653669501, + "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "owner": "input-output-hk", + "repo": "plutus", + "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "plutus", + "type": "github" + } + }, "plutus_2": { "inputs": { "cardano-repo-tool": "cardano-repo-tool_2", @@ -11196,6 +11993,22 @@ "type": "github" } }, + "pre-commit-hooks-nix_12": { + "flake": false, + "locked": { + "lastModified": 1624971177, + "narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix_2": { "flake": false, "locked": { @@ -11373,6 +12186,22 @@ "type": "github" } }, + "protolude_12": { + "flake": false, + "locked": { + "lastModified": 1647139352, + "narHash": "sha256-JyHAQfTTUswP8MeGEZibx/2/v01Q7cU5mNpnmDazh24=", + "owner": "protolude", + "repo": "protolude", + "rev": "3e249724fd0ead27370c8c297b1ecd38f92cbd5b", + "type": "github" + }, + "original": { + "owner": "protolude", + "repo": "protolude", + "type": "github" + } + }, "protolude_2": { "flake": false, "locked": { @@ -11518,7 +12347,8 @@ "plutarch-context-builder": "plutarch-context-builder", "plutarch-numeric": "plutarch-numeric_2", "plutarch-quickcheck": "plutarch-quickcheck_2", - "plutarch-safe-money": "plutarch-safe-money" + "plutarch-safe-money": "plutarch-safe-money", + "plutarch-script-export": "plutarch-script-export" } }, "secp256k1-haskell": { @@ -11553,6 +12383,22 @@ "type": "github" } }, + "secp256k1-haskell_11": { + "flake": false, + "locked": { + "lastModified": 1650290419, + "narHash": "sha256-XrjiqCC7cNTFib78gdMPGNettAkwAxQlbC/n+/mRFt4=", + "owner": "haskoin", + "repo": "secp256k1-haskell", + "rev": "3df963ab6ae14ec122691a97af09a7331511a387", + "type": "github" + }, + "original": { + "owner": "haskoin", + "repo": "secp256k1-haskell", + "type": "github" + } + }, "secp256k1-haskell_2": { "flake": false, "locked": { @@ -11746,6 +12592,22 @@ "type": "github" } }, + "sphinxcontrib-haddock_12": { + "flake": false, + "locked": { + "lastModified": 1594136664, + "narHash": "sha256-O9YT3iCUBHP3CEF88VDLLCO2HSP3HqkNA2q2939RnVY=", + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "rev": "f3956b3256962b2d27d5a4e96edb7951acf5de34", + "type": "github" + }, + "original": { + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "type": "github" + } + }, "sphinxcontrib-haddock_2": { "flake": false, "locked": { @@ -11938,6 +12800,22 @@ "type": "github" } }, + "stackage_12": { + "flake": false, + "locked": { + "lastModified": 1654046327, + "narHash": "sha256-IxX46Dh4OZpF3k7KPMa3tZSScYYGqFxXpCnMc0QRkuQ=", + "owner": "input-output-hk", + "repo": "stackage.nix", + "rev": "cc1d778723fcd431f9b2ed632a50c610c3e38b54", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "stackage.nix", + "type": "github" + } + }, "stackage_2": { "flake": false, "locked": { diff --git a/flake.nix b/flake.nix index a6d06bfd..c4849e79 100644 --- a/flake.nix +++ b/flake.nix @@ -23,6 +23,9 @@ inputs.plutarch-safe-money.url = "github:Liqwid-Labs/plutarch-safe-money?rev=9f968b80189c7e4b335527cd5b103dc26952f667"; + inputs.plutarch-script-export.url = + "github:Liqwid-Labs/plutarch-script-export?ref=main"; + # Testing inputs.plutarch-quickcheck.url = "github:liqwid-labs/plutarch-quickcheck?ref=staging"; @@ -136,6 +139,7 @@ "${inputs.plutarch-safe-money}" "${inputs.plutarch-quickcheck}" "${inputs.plutarch-context-builder}" + "${inputs.plutarch-script-export}" ] ); @@ -148,7 +152,7 @@ modules = haskellModules ++ [ h.module ] ++ (o'.modules or [ ]); extra-hackages = [ (import h.hackageNix) ] ++ (o'.extra-hackages or [ ]); extra-hackage-tarballs = { _xNJUd_plutarch-hackage = h.hackageTarball; }; - cabalProjectLocal = (o'.cabalProjectLocal or "") + " , cache >= 0.1.3.0"; + cabalProjectLocal = (o'.cabalProjectLocal or "") + " , cache >= 0.1.3.0 "; }; projectForGhc = compiler-nix-name: system: From 9ef0e6e87c9ff09d91c528c196b2b43d7442b3ea Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Thu, 30 Jun 2022 18:02:49 +0200 Subject: [PATCH 21/78] add Discord link to README --- README.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/README.md b/README.md index 9a3eb302..d2887259 100644 --- a/README.md +++ b/README.md @@ -67,3 +67,9 @@ Please read [CONTRIBUTING.md](./CONTRIBUTING.md). Additionally, please follow th - [ ] Rewards distribution - [ ] Escrow staking pool solution + +### Available support channels info + +You can find help, more information and ongoing discusion about the project here: + +- The [Agora & Liqwid Libs Discord](https://discord.gg/yGkjxrYueB) - Most Agora discussion happens here. From a293f7acc3aa6012ab7f0d9e0f2b6cf8fdaea016 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 2 Jul 2022 21:03:13 +0800 Subject: [PATCH 22/78] enable `-Wunused-do-bind` --- agora.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agora.cabal b/agora.cabal index 73adc2ae..d20cf603 100644 --- a/agora.cabal +++ b/agora.cabal @@ -16,7 +16,7 @@ common lang -Wno-unused-do-bind -Wno-partial-type-signatures -Wmissing-export-lists -Wincomplete-record-updates -Wmissing-deriving-strategies -Wno-name-shadowing -Wunused-foralls - -fprint-explicit-foralls -fprint-explicit-kinds + -fprint-explicit-foralls -fprint-explicit-kinds -Wunused-do-bind mixins: base hiding (Prelude), From 95410ce2542fec98361b124bdce7b76105dc70ab Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 28 Jun 2022 22:38:44 +0800 Subject: [PATCH 23/78] partially fix cosigning logic; improve performance --- agora/Agora/Proposal/Scripts.hs | 600 ++++++++++++++++++-------------- agora/Agora/Stake.hs | 79 +---- bench.csv | 38 +- 3 files changed, 354 insertions(+), 363 deletions(-) diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index c15aefb2..c9ebf9b7 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -30,7 +30,6 @@ import Agora.Stake ( PProposalLock (..), PStakeDatum (..), PStakeUsage (..), - findStakeOwnedBy, pgetStakeUsage, ) import Agora.Utils ( @@ -39,25 +38,27 @@ import Agora.Utils ( mustFindDatum', ) import Plutarch.Api.V1 ( + PDatumHash, PMintingPolicy, PScriptContext (PScriptContext), PScriptPurpose (PMinting, PSpending), PTxInfo (PTxInfo), + PTxOut, PValidator, ) import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf) import Plutarch.Api.V1.ScriptContext ( pfindTxInByTxOutRef, pisTokenSpent, + ptryFindDatum, ptxSignedBy, - pvalueSpent, ) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Extra.Comonad (pextract) import Plutarch.Extra.IsData (pmatchEnum) -import Plutarch.Extra.List (pisUniqBy) +import Plutarch.Extra.List (pisUniqBy, pmapMaybe, pmsortBy) import Plutarch.Extra.Map (plookup, pupdate) -import Plutarch.Extra.Maybe (pisJust) +import Plutarch.Extra.Maybe (pfromDJust, pfromJust, pisJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont ( pguardC, @@ -193,7 +194,6 @@ proposalValidator proposal = let stCurrencySymbol = pconstant $ getMintingPolicySymbol (proposalPolicy proposal.governorSTAssetClass) - valueSpent <- pletC $ pvalueSpent # txInfoF.inputs signedBy <- pletC $ ptxSignedBy # txInfoF.signatories @@ -236,159 +236,93 @@ proposalValidator proposal = # txInfoF.datums proposalUnchanged <- pletC $ proposalOut #== proposalDatum + -------------------------------------------------------------------------- - -- Find the stake input and stake output by SST. + + -- Find the stake inputs/outputs by SST. let AssetClass (stakeSym, stakeTn) = proposal.stakeSTAssetClass stakeSTAssetClass <- pletC $ passetClass # pconstant stakeSym # pconstant stakeTn - spentStakeST <- - pletC $ passetClassValueOf # valueSpent # stakeSTAssetClass - - let stakeInput = - pfield @"resolved" - #$ mustBePJust - # "Stake input should be present" - #$ pfind - # plam - ( \(pfromData . (pfield @"value" #) . (pfield @"resolved" #) -> value) -> - passetClassValueOf # value # stakeSTAssetClass #== 1 + + filterStakeDatumHash :: Term _ (PAsData PTxOut :--> PMaybe (PAsData PDatumHash)) <- + pletC $ + plam $ \(pfromData -> txOut) -> unTermCont $ do + txOutF <- pletFieldsC @'["value", "datumHash"] txOut + pure $ + pif + (passetClassValueOf # txOutF.value # stakeSTAssetClass #== 1) + ( let datumHash = pfromDJust # txOutF.datumHash + in pcon $ PJust $ pdata datumHash ) - # pfromData txInfoF.inputs + (pcon PNothing) - stakeIn <- pletC $ mustFindDatum' @PStakeDatum # (pfield @"datumHash" # stakeInput) # txInfoF.datums - stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn + stakeInputDatumHashes <- + pletC $ + pmapMaybe @PBuiltinList + # plam ((filterStakeDatumHash #) . (pfield @"resolved" #)) + # txInfoF.inputs - let stakeOutput = - mustBePJust # "Stake output should be present" - #$ pfind - # plam - ( \(pfromData . (pfield @"value" #) -> value) -> - passetClassValueOf # value # stakeSTAssetClass #== 1 - ) - # pfromData txInfoF.outputs + stakeOutputDatumHashes <- + pletC $ + pmapMaybe @PBuiltinList + # filterStakeDatumHash + # txInfoF.outputs - stakeOut <- pletC $ mustFindDatum' @PStakeDatum # (pfield @"datumHash" # stakeOutput) # txInfoF.datums + stakeInputNum <- pletC $ plength # stakeInputDatumHashes - stakeUnchanged <- pletC $ stakeIn #== stakeOut + pguardC "Every stake input should have a correspoding output" $ + stakeInputNum #== plength # stakeOutputDatumHashes -------------------------------------------------------------------------- pure $ pmatch proposalRedeemer $ \case - PVote r -> unTermCont $ do - pguardC "Input proposal must be in VotingReady state" $ - proposalF.status #== pconstant VotingReady - - pguardC "Proposal time should be wthin the voting period" $ - isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - - -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). - PProposalVotes voteMap <- pmatchC proposalF.votes - voteFor <- pletC $ pfromData $ pfield @"resultTag" # r - - pguardC "Vote option should be valid" $ - pisJust #$ plookup # voteFor # voteMap - - -- Ensure that no lock with the current proposal id has been put on the stake. - pguardC "Same stake shouldn't vote on the same proposal twice" $ - pnot #$ pany - # plam - ( \((pfield @"proposalTag" #) . pfromData -> pid) -> - pid #== proposalF.proposalId - ) - # pfromData stakeInF.lockedBy - - let -- The amount of new votes should be the 'stakedAmount'. - -- Update the vote counter of the proposal, and leave other stuff as is. - expectedNewVotes = pmatch (pfromData proposalF.votes) $ \(PProposalVotes m) -> - pcon $ - PProposalVotes $ - pupdate - # plam - ( \votes -> unTermCont $ do - PDiscrete v <- pmatchC stakeInF.stakedAmount - pure $ pcon $ PJust $ votes + (pextract # v) - ) - # voteFor - # m - expectedProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalF.status - .& #cosigners .= proposalF.cosigners - .& #thresholds .= proposalF.thresholds - .& #votes .= pdata expectedNewVotes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) - - pguardC "Output proposal should be valid" $ proposalOut #== expectedProposalOut - - -- We validate the output stake datum here as well: We need the vote option - -- to create a valid 'ProposalLock', however the vote option is encoded - -- in the proposal redeemer, which is invisible for the stake validator. + PCosign r -> unTermCont $ do + pguardC "Should be in draft state" $ + proposalF.status #== pconstant Draft - let newProposalLock = - mkRecordConstr - PProposalLock - ( #vote .= pdata voteFor - .& #proposalTag .= proposalF.proposalId - ) - -- Prepend the new lock to existing locks - expectedProposalLocks = - pcons - # pdata newProposalLock - # pfromData stakeInF.lockedBy - expectedStakeOut = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInF.stakedAmount - .& #owner .= stakeInF.owner - .& #lockedBy .= pdata expectedProposalLocks - ) + newSigs <- pletC $ pfield @"newCosigners" # r - pguardC "Output stake should be locked by the proposal" $ expectedStakeOut #== stakeOut + pguardC "Signed by all new cosigners" $ + pall # signedBy # newSigs - pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - PCosign r -> unTermCont $ do - pguardC "Stake should not change" stakeUnchanged + pguardC "As many new cosigners as stake datums" $ + plength # stakeInputDatumHashes #== plength # newSigs - newSigs <- pletC $ pfield @"newCosigners" # r + updatedSigs <- pletC $ pconcat # newSigs # proposalF.cosigners + -- Cannot cosign a proposal with a single stake more than once. pguardC "Cosigners are unique" $ pisUniqBy # phoistAcyclic (plam (#==)) - # phoistAcyclic (plam $ \(pfromData -> x) (pfromData -> y) -> x #< y) - # newSigs - - pguardC "Signed by all new cosigners" $ - pall # signedBy # newSigs - - pguardC "As many new cosigners as Stake datums" $ - spentStakeST #== plength # newSigs + # phoistAcyclic + ( plam + ( \(pfromData -> x) + (pfromData -> y) -> x #< y + ) + ) + # updatedSigs + + let inputStakeOwners = + pmap + # plam + ( \(pfromData -> dh) -> + pfield @"owner" + #$ pfromJust + #$ ptryFindDatum + @(PAsData PStakeDatum) + # dh + # txInfoF.datums + ) + # stakeInputDatumHashes pguardC "All new cosigners are witnessed by their Stake datums" $ pall - # plam - ( \sig -> - pmatch - ( findStakeOwnedBy # stakeSTAssetClass - # pfromData sig - # txInfoF.datums - # txInfoF.inputs - ) - $ \case - PNothing -> pcon PFalse - PJust _ -> pcon PTrue - ) + # plam (\sig -> pelem # sig # inputStakeOwners) # newSigs - let updatedSigs = pconcat # newSigs # proposalF.cosigners - expectedDatum = + let expectedDatum = mkRecordConstr PProposalDatum ( #proposalId .= proposalF.proposalId @@ -404,47 +338,97 @@ proposalValidator proposal = pguardC "Signatures are correctly added to cosignature list" $ proposalOut #== expectedDatum + -- The following code ensures that all the stake datums are not + -- changed. + -- + -- TODO: This is quite inefficient (O(nlogn)) but for now we don't + -- have a nice way to check this. In plutus v2 we'll have map of + -- (Script -> Redeemer) in ScriptContext, which should be the + -- straight up solution. + let sortDatumHashes = + phoistAcyclic $ + pmsortBy + # phoistAcyclic + ( plam + ( \(pfromData -> l) + (pfromData -> r) -> l #< r + ) + ) + + sortedStakeInputDatumHashes = + sortDatumHashes # stakeInputDatumHashes + + sortedStakeOutputDatumHashes = + sortDatumHashes # stakeOutputDatumHashes + + pguardC "All stake datum are unchanged" $ + plistEquals + # sortedStakeInputDatumHashes + # sortedStakeOutputDatumHashes + pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - PUnlock r -> unTermCont $ do - -- At draft stage, the votes should be empty. - pguardC "Shouldn't retract votes from a draft proposal" $ - pnot #$ proposalF.status #== pconstantData Draft - - -- This is the vote option we're retracting from. - retractFrom <- pletC $ pfield @"resultTag" # r - - -- Determine if the input stake is actually locked by this proposal. - stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId - - pguardC "Stake input relevant" $ - pmatch stakeUsage $ \case - PDidNothing -> - ptraceIfFalse "Stake should be relevant" $ - pconstant False - PCreated -> - ptraceIfFalse "Removing creator's locks means status is Finished" $ - proposalF.status #== pconstantData Finished - PVotedFor rt -> - ptraceIfFalse "Result tag should match the one given in the redeemer" $ - rt #== retractFrom - - -- The count of removing votes is equal to the 'stakeAmount' of input stake. - retractCount <- + + ------------------------------------------------------------------------ + _ -> unTermCont $ do + pguardC "Can only deal with one stake" $ + stakeInputNum #== 1 + + let stakeInputHash = pfromData $ phead # stakeInputDatumHashes + stakeOutputHash = pfromData $ phead # stakeOutputDatumHashes + + stakeIn :: Term _ PStakeDatum <- pletC $ - pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v + pfromData $ + pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums + stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn - -- The votes can only change when the proposal still allows voting. - let shouldUpdateVotes = - proposalF.status #== pconstantData VotingReady - #&& pnot # (pcon PCreated #== stakeUsage) + stakeOut :: Term _ PStakeDatum <- + pletC $ + pfromData $ + pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums - pguardC "Proposal output correct" $ - pif - shouldUpdateVotes - ( let -- Remove votes and leave other parts of the proposal as it. - expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes + ---------------------------------------------------------------------- + pure $ + pmatch proposalRedeemer $ \case + PVote r -> unTermCont $ do + pguardC "Input proposal must be in VotingReady state" $ + proposalF.status #== pconstant VotingReady + + pguardC "Proposal time should be wthin the voting period" $ + isVotingPeriod # proposalF.timingConfig + # proposalF.startingTime + # currentTime + + -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). + PProposalVotes voteMap <- pmatchC proposalF.votes + voteFor <- pletC $ pfromData $ pfield @"resultTag" # r + + pguardC "Vote option should be valid" $ + pisJust #$ plookup # voteFor # voteMap + + -- Ensure that no lock with the current proposal id has been put on the stake. + pguardC "Same stake shouldn't vote on the same proposal twice" $ + pnot #$ pany + # plam + ( \((pfield @"proposalTag" #) . pfromData -> pid) -> + pid #== proposalF.proposalId + ) + # pfromData stakeInF.lockedBy + + let -- The amount of new votes should be the 'stakedAmount'. + -- Update the vote counter of the proposal, and leave other stuff as is. + expectedNewVotes = pmatch (pfromData proposalF.votes) $ \(PProposalVotes m) -> + pcon $ + PProposalVotes $ + pupdate + # plam + ( \votes -> unTermCont $ do + PDiscrete v <- pmatchC stakeInF.stakedAmount + pure $ pcon $ PJust $ votes + (pextract # v) + ) + # voteFor + # m expectedProposalOut = mkRecordConstr PProposalDatum @@ -453,122 +437,206 @@ proposalValidator proposal = .& #status .= proposalF.status .& #cosigners .= proposalF.cosigners .& #thresholds .= proposalF.thresholds - .& #votes .= pdata expectedVotes + .& #votes .= pdata expectedNewVotes .& #timingConfig .= proposalF.timingConfig .& #startingTime .= proposalF.startingTime ) - in ptraceIfFalse "Update votes" $ - expectedProposalOut #== proposalOut - ) - -- No change to the proposal is allowed. - $ ptraceIfFalse "Proposal unchanged" proposalUnchanged - -- At last, we ensure that all locks belong to this proposal will be removed. - stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut + pguardC "Output proposal should be valid" $ proposalOut #== expectedProposalOut - let templateStakeOut = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInF.stakedAmount - .& #owner .= stakeInF.owner - .& #lockedBy .= stakeOutputLocks - ) + -- We validate the output stake datum here as well: We need the vote option + -- to create a valid 'ProposalLock', however the vote option is encoded + -- in the proposal redeemer, which is invisible for the stake validator. - pguardC "Only locks updated in the output stake" $ - templateStakeOut #== stakeOut + let newProposalLock = + mkRecordConstr + PProposalLock + ( #vote .= pdata voteFor + .& #proposalTag .= proposalF.proposalId + ) + -- Prepend the new lock to existing locks + expectedProposalLocks = + pcons + # pdata newProposalLock + # pfromData stakeInF.lockedBy + expectedStakeOut = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeInF.stakedAmount + .& #owner .= stakeInF.owner + .& #lockedBy .= pdata expectedProposalLocks + ) - pguardC "All relevant locks removed from the stake" $ - pgetStakeUsage # pfromData stakeOutputLocks - # proposalF.proposalId #== pcon PDidNothing + pguardC "Output stake should be locked by the proposal" $ expectedStakeOut #== stakeOut + + pure $ popaque (pconstant ()) + -------------------------------------------------------------------------- + + PUnlock r -> unTermCont $ do + -- At draft stage, the votes should be empty. + pguardC "Shouldn't retract votes from a draft proposal" $ + pnot #$ proposalF.status #== pconstantData Draft + + -- This is the vote option we're retracting from. + retractFrom <- pletC $ pfield @"resultTag" # r + + -- Determine if the input stake is actually locked by this proposal. + stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId + + pguardC "Stake input relevant" $ + pmatch stakeUsage $ \case + PDidNothing -> + ptraceIfFalse "Stake should be relevant" $ + pconstant False + PCreated -> + ptraceIfFalse "Removing creator's locks means status is Finished" $ + proposalF.status #== pconstantData Finished + PVotedFor rt -> + ptraceIfFalse "Result tag should match the one given in the redeemer" $ + rt #== retractFrom + + -- The count of removing votes is equal to the 'stakeAmount' of input stake. + retractCount <- + pletC $ + pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v + + -- The votes can only change when the proposal still allows voting. + let shouldUpdateVotes = + proposalF.status #== pconstantData VotingReady + #&& pnot # (pcon PCreated #== stakeUsage) + + pguardC "Proposal output correct" $ + pif + shouldUpdateVotes + ( let -- Remove votes and leave other parts of the proposal as it. + expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes + + expectedProposalOut = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalF.status + .& #cosigners .= proposalF.cosigners + .& #thresholds .= proposalF.thresholds + .& #votes .= pdata expectedVotes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) + in ptraceIfFalse "Update votes" $ + expectedProposalOut #== proposalOut + ) + -- No change to the proposal is allowed. + $ ptraceIfFalse "Proposal unchanged" proposalUnchanged + + -- At last, we ensure that all locks belong to this proposal will be removed. + stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut + + let templateStakeOut = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeInF.stakedAmount + .& #owner .= stakeInF.owner + .& #lockedBy .= stakeOutputLocks + ) - pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - PAdvanceProposal _r -> unTermCont $ do - pguardC "Stake should not change" stakeUnchanged + pguardC "Only locks updated in the output stake" $ + templateStakeOut #== stakeOut - proposalOutStatus <- pletC $ pfield @"status" # proposalOut + pguardC "All relevant locks removed from the stake" $ + pgetStakeUsage # pfromData stakeOutputLocks + # proposalF.proposalId #== pcon PDidNothing - let -- Only the status of proposals should be updated in this case. - templateProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalOutStatus - .& #cosigners .= proposalF.cosigners - .& #thresholds .= proposalF.thresholds - .& #votes .= proposalF.votes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) + pure $ popaque (pconstant ()) + ------------------------------------------------------------------ + PAdvanceProposal _ -> unTermCont $ do + pguardC "Stake should not change" $ + stakeInputHash #== stakeOutputHash + + proposalOutStatus <- pletC $ pfield @"status" # proposalOut + + let -- Only the status of proposals should be updated in this case. + templateProposalOut = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalOutStatus + .& #cosigners .= proposalF.cosigners + .& #thresholds .= proposalF.thresholds + .& #votes .= proposalF.votes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) - pguardC "Only status changes in the output proposal" $ - templateProposalOut #== proposalOut + pguardC "Only status changes in the output proposal" $ + templateProposalOut #== proposalOut - inDraftPeriod <- pletC $ isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inVotingPeriod <- pletC $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inDraftPeriod <- pletC $ isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inVotingPeriod <- pletC $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - proposalStatus <- pletC $ pto $ pfromData proposalF.status + proposalStatus <- pletC $ pto $ pfromData proposalF.status - -- Check the timings. - let isFinished = proposalF.status #== pconstantData Finished + -- Check the timings. + let isFinished = proposalF.status #== pconstantData Finished - notTooLate = pmatchEnum proposalStatus $ \case - Draft -> inDraftPeriod - -- Can only advance after the voting period is over. - VotingReady -> inLockedPeriod - Locked -> inExecutionPeriod - _ -> pconstant False + notTooLate = pmatchEnum proposalStatus $ \case + Draft -> inDraftPeriod + -- Can only advance after the voting period is over. + VotingReady -> inLockedPeriod + Locked -> inExecutionPeriod + _ -> pconstant False - notTooEarly = pmatchEnum (pto $ pfromData proposalF.status) $ \case - VotingReady -> pnot # inVotingPeriod - Locked -> pnot # inLockedPeriod - _ -> pconstant True + notTooEarly = pmatchEnum (pto $ pfromData proposalF.status) $ \case + VotingReady -> pnot # inVotingPeriod + Locked -> pnot # inLockedPeriod + _ -> pconstant True - pguardC "Cannot advance ahead of time" notTooEarly - pguardC "Finished proposals cannot be advanced" $ pnot # isFinished + pguardC "Cannot advance ahead of time" notTooEarly + pguardC "Finished proposals cannot be advanced" $ pnot # isFinished - thresholdsF <- pletFieldsC @'["execute"] proposalF.thresholds + thresholdsF <- pletFieldsC @'["execute"] proposalF.thresholds - pure $ - pif - notTooLate - -- On time: advance to next status. - ( pmatchEnum proposalStatus $ \case - Draft -> unTermCont $ do - -- TODO: Perform other necessary checks. - - -- 'Draft' -> 'VotingReady' - pguardC "Proposal status set to VotingReady" $ - proposalOutStatus #== pconstantData VotingReady - - pure $ popaque (pconstant ()) - VotingReady -> unTermCont $ do - -- 'VotingReady' -> 'Locked' - pguardC "Proposal status set to Locked" $ - proposalOutStatus #== pconstantData Locked - - pguardC "Winner outcome not found" $ - pisJust #$ pwinner' # proposalF.votes - #$ punsafeCoerce - $ pfromData thresholdsF.execute - - pure $ popaque (pconstant ()) - Locked -> unTermCont $ do - -- 'Locked' -> 'Finished' - pguardC "Proposal status set to Finished" $ - proposalOutStatus #== pconstantData Finished - - -- TODO: Perform other necessary checks. - pure $ popaque (pconstant ()) - _ -> popaque (pconstant ()) - ) - -- Too late: failed proposal, status set to 'Finished'. - ( popaque $ - ptraceIfFalse "Proposal should fail: not on time" $ - proposalOutStatus #== pconstantData Finished - -- TODO: Should check that the GST is not moved - -- if the proposal is in 'Locked' state. - ) + pure $ + pif + notTooLate + -- On time: advance to next status. + ( pmatchEnum proposalStatus $ \case + Draft -> unTermCont $ do + -- TODO: Perform other necessary checks. + + -- 'Draft' -> 'VotingReady' + pguardC "Proposal status set to VotingReady" $ + proposalOutStatus #== pconstantData VotingReady + + pure $ popaque (pconstant ()) + VotingReady -> unTermCont $ do + -- 'VotingReady' -> 'Locked' + pguardC "Proposal status set to Locked" $ + proposalOutStatus #== pconstantData Locked + + pguardC "Winner outcome not found" $ + pisJust #$ pwinner' # proposalF.votes + #$ punsafeCoerce + $ pfromData thresholdsF.execute + + pure $ popaque (pconstant ()) + Locked -> unTermCont $ do + -- 'Locked' -> 'Finished' + pguardC "Proposal status set to Finished" $ + proposalOutStatus #== pconstantData Finished + + -- TODO: Perform other necessary checks. + pure $ popaque (pconstant ()) + _ -> popaque (pconstant ()) + ) + -- Too late: failed proposal, status set to 'Finished'. + ( popaque $ + ptraceIfFalse "Proposal should fail: not on time" $ + proposalOutStatus #== pconstantData Finished + -- TODO: Should check that the GST is not moved + -- if the proposal is in 'Locked' state. + ) + _ -> popaque (pconstant ()) diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index a4fded9c..b5f5e168 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -22,7 +22,6 @@ module Agora.Stake ( -- * Utility functions stakeLocked, - findStakeOwnedBy, pgetStakeUsage, ) where @@ -33,16 +32,8 @@ import Data.Tagged (Tagged (..)) import GHC.Generics qualified as GHC import Generics.SOP (Generic, HasDatatypeInfo, I (I)) import Plutarch.Api.V1 ( - PDatum, - PDatumHash, - PMaybeData (PDJust, PDNothing), PPubKeyHash, - PTuple, - PTxInInfo (PTxInInfo), - PTxOut (PTxOut), ) -import Plutarch.Api.V1.AssetClass (PAssetClass, passetClassValueOf) -import Plutarch.Api.V1.ScriptContext (ptryFindDatum) import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, @@ -54,8 +45,7 @@ import Plutarch.Extra.IsData ( ) import Plutarch.Extra.List (pmapMaybe, pnotNull) import Plutarch.Extra.Other (DerivePNewtype' (..)) -import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC) -import Plutarch.Internal (punsafeCoerce) +import Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.SafeMoney (PDiscrete) import PlutusLedgerApi.V1 (PubKeyHash) @@ -327,73 +317,6 @@ stakeLocked = phoistAcyclic $ locks = pfield @"lockedBy" # stakeDatum in pnotNull # locks -{- | Find a stake owned by a particular PK. - - @since 0.1.0 --} -findStakeOwnedBy :: - Term - s - ( PAssetClass - :--> PPubKeyHash - :--> PBuiltinList (PAsData (PTuple PDatumHash PDatum)) - :--> PBuiltinList (PAsData PTxInInfo) - :--> PMaybe (PAsData PStakeDatum) - ) -findStakeOwnedBy = phoistAcyclic $ - plam $ \ac pk datums inputs -> - pmatch (pfind # (isInputStakeOwnedBy # ac # pk # datums) # inputs) $ \case - PNothing -> pcon PNothing - PJust (pfromData -> v) -> unTermCont $ do - let txOut = pfield @"resolved" # pto v - txOutF <- pletFieldsC @'["datumHash"] $ txOut - pure $ - pmatch txOutF.datumHash $ \case - PDNothing _ -> pcon PNothing - PDJust ((pfield @"_0" #) -> dh) -> - ptryFindDatum @(PAsData PStakeDatum) # dh # datums - -{- | Check if a StakeDatum is owned by a particular public key. - - @since 0.1.0 --} -stakeDatumOwnedBy :: Term _ (PPubKeyHash :--> PStakeDatum :--> PBool) -stakeDatumOwnedBy = - phoistAcyclic $ - plam $ \pk stakeDatum -> - pletFields @'["owner"] (pto stakeDatum) $ \stakeDatumF -> - stakeDatumF.owner #== pdata pk - -{- | Does the input have a `Stake` owned by a particular PK? - - @since 0.1.0 --} -isInputStakeOwnedBy :: - Term - _ - ( PAssetClass :--> PPubKeyHash - :--> PBuiltinList (PAsData (PTuple PDatumHash PDatum)) - :--> PAsData PTxInInfo - :--> PBool - ) -isInputStakeOwnedBy = - plam $ \ac ss datums txInInfo' -> unTermCont $ do - PTxInInfo ((pfield @"resolved" #) -> txOut) <- pmatchC $ pfromData txInInfo' - PTxOut txOut' <- pmatchC txOut - txOutF <- pletFieldsC @'["value", "datumHash"] txOut' - outStakeST <- pletC $ passetClassValueOf # txOutF.value # ac - pure $ - pmatch txOutF.datumHash $ \case - PDNothing _ -> pcon PFalse - PDJust ((pfield @"_0" #) -> datumHash) -> - pif - (outStakeST #== 1) - ( pmatch (ptryFindDatum @(PAsData PStakeDatum) # datumHash # datums) $ \case - PNothing -> pcon PFalse - PJust v -> stakeDatumOwnedBy # ss # pfromData (punsafeCoerce v) - ) - (pcon PFalse) - {- | Represent the usage of a stake on a particular proposal. A stake can be used to either create or vote on a proposal. diff --git a/bench.csv b/bench.csv index c8b0da08..e5bdec1f 100644 --- a/bench.csv +++ b/bench.csv @@ -8,24 +8,24 @@ Agora/Stake/policy/stakeCreation,50939580,148729,2387 Agora/Stake/validator/stakeDepositWithdraw deposit,181581435,493259,4413 Agora/Stake/validator/stakeDepositWithdraw withdraw,181581435,493259,4401 Agora/Proposal/policy/proposalCreation,23140177,69194,1515 -Agora/Proposal/validator/cosignature/proposal,312261341,886430,8188 -Agora/Proposal/validator/cosignature/stake,125315872,312659,4942 -Agora/Proposal/validator/voting/proposal,268025219,751750,8106 -Agora/Proposal/validator/voting/stake,120122971,320497,4899 -Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,263397893,738746,8013 -Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,278686368,780686,8022 -Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,267078383,746859,8022 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,262901404,737844,8015 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,264319938,741149,8016 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,265450916,743553,8016 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",276198245,772878,8066 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",246477596,697110,8068 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",242771264,688789,8070 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",242771264,688789,8070 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",2814657239,7934307,29173 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",2488302451,7053012,29357 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",2379658464,6713247,29341 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",2379658464,6713247,29341 +Agora/Proposal/validator/cosignature/proposal,242933842,689669,8224 +Agora/Proposal/validator/cosignature/stake,124072228,314923,4942 +Agora/Proposal/validator/voting/proposal,236945537,666233,8142 +Agora/Proposal/validator/voting/stake,131045998,349073,4899 +Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,237984765,667020,8049 +Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,253273240,708960,8058 +Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,241665255,675133,8058 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,237488276,666118,8051 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,238906810,669423,8052 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,240037788,671827,8052 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",240815652,676043,8102 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",211095003,600275,8104 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",207388671,591954,8106 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",207388671,591954,8106 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1770480224,5186822,29209 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1444125436,4305527,29393 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1335481449,3965762,29377 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1335481449,3965762,29377 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 @@ -33,5 +33,5 @@ Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,80 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51007235,144191,2034 Agora/Governor/validator/proposal creation,309689999,834675,9064 -Agora/Governor/validator/GATs minting,418560845,1137908,9187 +Agora/Governor/validator/GATs minting,421016677,1141838,9187 Agora/Governor/validator/mutate governor state,88986020,248491,8662 From ae0e78976a944ff953fc02e9ce7f805ac5a496d8 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 2 Jul 2022 18:46:14 +0800 Subject: [PATCH 24/78] check cosign stakes while advancing from draft --- agora/Agora/Proposal.hs | 6 +- agora/Agora/Proposal/Scripts.hs | 693 +++++++++++++++++--------------- agora/Agora/Utils.hs | 48 +++ bench.csv | 38 +- 4 files changed, 442 insertions(+), 343 deletions(-) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 7f5ea2a9..922c3acc 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -283,6 +283,8 @@ data ProposalDatum = ProposalDatum -- ^ The status the proposal is in. , cosigners :: [PubKeyHash] -- ^ Who created the proposal initially, and who cosigned it later. + -- + -- This list should be sorted in **ascending** order. , thresholds :: ProposalThresholds -- ^ Thresholds copied over on initialization. , votes :: ProposalVotes @@ -321,7 +323,9 @@ data ProposalRedeemer -- -- This is particularly used in the 'Draft' 'ProposalStatus', -- where matching 'Agora.Stake.Stake's can be called to advance the proposal, - -- provided enough GT is shared among them. + -- provided enough GT is shared among them. + -- + -- This list should be sorted in ascending order. Cosign [PubKeyHash] | -- | Allow unlocking one or more stakes with votes towards particular 'ResultTag'. Unlock ResultTag diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index c9ebf9b7..d31646a8 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -36,6 +36,8 @@ import Agora.Utils ( getMintingPolicySymbol, mustBePJust, mustFindDatum', + pisUniq', + pltAsData, ) import Plutarch.Api.V1 ( PDatumHash, @@ -56,7 +58,7 @@ import Plutarch.Api.V1.ScriptContext ( import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Extra.Comonad (pextract) import Plutarch.Extra.IsData (pmatchEnum) -import Plutarch.Extra.List (pisUniqBy, pmapMaybe, pmsortBy) +import Plutarch.Extra.List (pmapMaybe, pmergeBy, pmsortBy) import Plutarch.Extra.Map (plookup, pupdate) import Plutarch.Extra.Maybe (pfromDJust, pfromJust, pisJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) @@ -192,6 +194,10 @@ proposalValidator proposal = ownAddress <- pletC $ txOutF.address + thresholdsF <- pletFieldsC @'["execute", "create", "vote"] proposalF.thresholds + + currentStatus <- pletC $ pfromData $ proposalF.status + let stCurrencySymbol = pconstant $ getMintingPolicySymbol (proposalPolicy proposal.governorSTAssetClass) @@ -237,6 +243,29 @@ proposalValidator proposal = proposalUnchanged <- pletC $ proposalOut #== proposalDatum + proposalOutStatus <- + pletC $ + pfromData $ + pfield @"status" # proposalOut + + onlyStatusChanged <- + pletC $ + -- Only the status of proposals is updated. + + -- Only the status of proposals is updated. + proposalOut + #== mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= pdata proposalOutStatus + .& #cosigners .= proposalF.cosigners + .& #thresholds .= proposalF.thresholds + .& #votes .= proposalF.votes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) + -------------------------------------------------------------------------- -- Find the stake inputs/outputs by SST. @@ -274,369 +303,387 @@ proposalValidator proposal = pguardC "Every stake input should have a correspoding output" $ stakeInputNum #== plength # stakeOutputDatumHashes - -------------------------------------------------------------------------- + ---------------------------------------------------------------------------- + + let acceptMultipleStakes = pmatch proposalRedeemer $ \case + PCosign _ -> pconstant True + PAdvanceProposal _ -> + currentStatus #== pconstant Draft + _ -> pconstant False pure $ - pmatch proposalRedeemer $ \case - PCosign r -> unTermCont $ do - pguardC "Should be in draft state" $ - proposalF.status #== pconstant Draft - - newSigs <- pletC $ pfield @"newCosigners" # r - - pguardC "Signed by all new cosigners" $ - pall # signedBy # newSigs - - pguardC "As many new cosigners as stake datums" $ - plength # stakeInputDatumHashes #== plength # newSigs - - updatedSigs <- pletC $ pconcat # newSigs # proposalF.cosigners - - -- Cannot cosign a proposal with a single stake more than once. - pguardC "Cosigners are unique" $ - pisUniqBy - # phoistAcyclic (plam (#==)) - # phoistAcyclic - ( plam - ( \(pfromData -> x) - (pfromData -> y) -> x #< y - ) - ) - # updatedSigs - - let inputStakeOwners = - pmap - # plam - ( \(pfromData -> dh) -> - pfield @"owner" - #$ pfromJust - #$ ptryFindDatum - @(PAsData PStakeDatum) - # dh - # txInfoF.datums - ) - # stakeInputDatumHashes - - pguardC "All new cosigners are witnessed by their Stake datums" $ - pall - # plam (\sig -> pelem # sig # inputStakeOwners) - # newSigs - - let expectedDatum = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalF.status - .& #cosigners .= pdata updatedSigs - .& #thresholds .= proposalF.thresholds - .& #votes .= proposalF.votes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) - - pguardC "Signatures are correctly added to cosignature list" $ - proposalOut #== expectedDatum - - -- The following code ensures that all the stake datums are not - -- changed. - -- - -- TODO: This is quite inefficient (O(nlogn)) but for now we don't - -- have a nice way to check this. In plutus v2 we'll have map of - -- (Script -> Redeemer) in ScriptContext, which should be the - -- straight up solution. - let sortDatumHashes = - phoistAcyclic $ - pmsortBy - # phoistAcyclic - ( plam - ( \(pfromData -> l) - (pfromData -> r) -> l #< r - ) - ) + popaque $ + pif + acceptMultipleStakes + ( unTermCont $ do + -- The following code ensures that all the stake datums are not + -- changed. + -- + -- TODO: This is quite inefficient (O(nlogn)) but for now we don't + -- have a nice way to check this. In plutus v2 we'll have map of + -- (Script -> Redeemer) in ScriptContext, which should be the + -- straight up solution. + let sortDatumHashes = phoistAcyclic $ pmsortBy # pltAsData + + sortedStakeInputDatumHashes = + sortDatumHashes # stakeInputDatumHashes + + sortedStakeOutputDatumHashes = + sortDatumHashes # stakeOutputDatumHashes + + pguardC "All stake datum are unchanged" $ + plistEquals + # sortedStakeInputDatumHashes + # sortedStakeOutputDatumHashes + + PPair totalStakedAmount stakeOwners <- + pmatchC $ + pfoldl + # plam + ( \l dh -> unTermCont $ do + let stake = + pfromData $ + pfromJust + #$ ptryFindDatum + @(PAsData PStakeDatum) + # pfromData dh + # txInfoF.datums - sortedStakeInputDatumHashes = - sortDatumHashes # stakeInputDatumHashes + stakeF <- pletFieldsC @'["stakedAmount", "owner"] stake - sortedStakeOutputDatumHashes = - sortDatumHashes # stakeOutputDatumHashes + PPair amount owners <- pmatchC l - pguardC "All stake datum are unchanged" $ - plistEquals - # sortedStakeInputDatumHashes - # sortedStakeOutputDatumHashes + let newAmount = amount + punsafeCoerce (pfromData stakeF.stakedAmount) + updatedOwners = pcons # stakeF.owner # owners - pure $ popaque (pconstant ()) + pure $ pcon $ PPair newAmount updatedOwners + ) + # pcon (PPair (0 :: Term _ PInteger) (pnil @PBuiltinList)) + # stakeInputDatumHashes + + sortedStakeOwners <- pletC $ pmsortBy # pltAsData # stakeOwners + + redeemer <- pmatchC proposalRedeemer + + case redeemer of + PCosign r -> do + pguardC "Should be in draft state" $ + currentStatus #== pconstant Draft + + newSigs <- pletC $ pfield @"newCosigners" # r + + pguardC "Signed by all new cosigners" $ + pall # signedBy # newSigs + + updatedSigs <- + pletC $ + pmergeBy # pltAsData + # newSigs + # proposalF.cosigners + + pguardC "Cosigners are unique" $ + pisUniq' # updatedSigs + + pguardC "All new cosigners are witnessed by their Stake datums" $ + plistEquals # sortedStakeOwners # newSigs + + let expectedDatum = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalF.status + .& #cosigners .= pdata updatedSigs + .& #thresholds .= proposalF.thresholds + .& #votes .= proposalF.votes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) - ------------------------------------------------------------------------ - _ -> unTermCont $ do - pguardC "Can only deal with one stake" $ - stakeInputNum #== 1 + pguardC "Signatures are correctly added to cosignature list" $ + proposalOut #== expectedDatum - let stakeInputHash = pfromData $ phead # stakeInputDatumHashes - stakeOutputHash = pfromData $ phead # stakeOutputDatumHashes + pure $ pconstant () - stakeIn :: Term _ PStakeDatum <- - pletC $ - pfromData $ - pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums - stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn + ------------------------------------------------------------------ - stakeOut :: Term _ PStakeDatum <- - pletC $ - pfromData $ - pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums + PAdvanceProposal _ -> do + inDraftPeriod <- + pletC $ + isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - ---------------------------------------------------------------------- + pure $ + pif + inDraftPeriod + ( unTermCont $ do + pguardC "More cosigns than minimum amount" $ + punsafeCoerce (pfromData thresholdsF.vote) #< totalStakedAmount - pure $ - pmatch proposalRedeemer $ \case - PVote r -> unTermCont $ do - pguardC "Input proposal must be in VotingReady state" $ - proposalF.status #== pconstant VotingReady - - pguardC "Proposal time should be wthin the voting period" $ - isVotingPeriod # proposalF.timingConfig - # proposalF.startingTime - # currentTime - - -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). - PProposalVotes voteMap <- pmatchC proposalF.votes - voteFor <- pletC $ pfromData $ pfield @"resultTag" # r - - pguardC "Vote option should be valid" $ - pisJust #$ plookup # voteFor # voteMap - - -- Ensure that no lock with the current proposal id has been put on the stake. - pguardC "Same stake shouldn't vote on the same proposal twice" $ - pnot #$ pany - # plam - ( \((pfield @"proposalTag" #) . pfromData -> pid) -> - pid #== proposalF.proposalId + pguardC "All new cosigners are witnessed by their Stake datums" $ + plistEquals # sortedStakeOwners # proposalF.cosigners + + -- 'Draft' -> 'VotingReady' + pguardC "Proposal status set to VotingReady" $ + proposalOutStatus #== pconstant VotingReady + + pure $ pconstant () + ) + ( unTermCont $ do + pguardC "Advance to failed state" $ proposalOutStatus #== pconstant Finished + + pure $ pconstant () ) - # pfromData stakeInF.lockedBy - - let -- The amount of new votes should be the 'stakedAmount'. - -- Update the vote counter of the proposal, and leave other stuff as is. - expectedNewVotes = pmatch (pfromData proposalF.votes) $ \(PProposalVotes m) -> - pcon $ - PProposalVotes $ - pupdate - # plam - ( \votes -> unTermCont $ do - PDiscrete v <- pmatchC stakeInF.stakedAmount - pure $ pcon $ PJust $ votes + (pextract # v) - ) - # voteFor - # m - expectedProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalF.status - .& #cosigners .= proposalF.cosigners - .& #thresholds .= proposalF.thresholds - .& #votes .= pdata expectedNewVotes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime + + ------------------------------------------------------------------ + + _ -> pure $ pconstant () + ) + ( unTermCont $ do + pguardC "Can only deal with one stake" $ + stakeInputNum #== 1 + + let stakeInputHash = pfromData $ phead # stakeInputDatumHashes + stakeOutputHash = pfromData $ phead # stakeOutputDatumHashes + + stakeIn :: Term _ PStakeDatum <- + pletC $ + pfromData $ + pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums + stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn + + stakeOut :: Term _ PStakeDatum <- + pletC $ + pfromData $ + pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums + + redeemer <- pmatchC proposalRedeemer + + case redeemer of + PVote r -> do + pguardC "Input proposal must be in VotingReady state" $ + currentStatus #== pconstant VotingReady + + pguardC "Proposal time should be wthin the voting period" $ + isVotingPeriod # proposalF.timingConfig + # proposalF.startingTime + # currentTime + + -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). + PProposalVotes voteMap <- pmatchC proposalF.votes + voteFor <- pletC $ pfromData $ pfield @"resultTag" # r + + pguardC "Vote option should be valid" $ + pisJust #$ plookup # voteFor # voteMap + + -- Ensure that no lock with the current proposal id has been put on the stake. + pguardC "Same stake shouldn't vote on the same proposal twice" $ + pnot #$ pany + # plam + ( \((pfield @"proposalTag" #) . pfromData -> pid) -> + pid #== proposalF.proposalId ) + # pfromData stakeInF.lockedBy + + let -- The amount of new votes should be the 'stakedAmount'. + -- Update the vote counter of the proposal, and leave other stuff as is. + expectedNewVotes = pmatch (pfromData proposalF.votes) $ \(PProposalVotes m) -> + pcon $ + PProposalVotes $ + pupdate + # plam + ( \votes -> unTermCont $ do + PDiscrete v <- pmatchC stakeInF.stakedAmount + pure $ pcon $ PJust $ votes + (pextract # v) + ) + # voteFor + # m + expectedProposalOut = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalF.status + .& #cosigners .= proposalF.cosigners + .& #thresholds .= proposalF.thresholds + .& #votes .= pdata expectedNewVotes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) - pguardC "Output proposal should be valid" $ proposalOut #== expectedProposalOut + pguardC "Output proposal should be valid" $ proposalOut #== expectedProposalOut - -- We validate the output stake datum here as well: We need the vote option - -- to create a valid 'ProposalLock', however the vote option is encoded - -- in the proposal redeemer, which is invisible for the stake validator. + -- We validate the output stake datum here as well: We need the vote option + -- to create a valid 'ProposalLock', however the vote option is encoded + -- in the proposal redeemer, which is invisible for the stake validator. - let newProposalLock = - mkRecordConstr - PProposalLock - ( #vote .= pdata voteFor - .& #proposalTag .= proposalF.proposalId - ) - -- Prepend the new lock to existing locks - expectedProposalLocks = - pcons - # pdata newProposalLock - # pfromData stakeInF.lockedBy - expectedStakeOut = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInF.stakedAmount - .& #owner .= stakeInF.owner - .& #lockedBy .= pdata expectedProposalLocks - ) + let newProposalLock = + mkRecordConstr + PProposalLock + ( #vote .= pdata voteFor + .& #proposalTag .= proposalF.proposalId + ) + -- Prepend the new lock to existing locks + expectedProposalLocks = + pcons + # pdata newProposalLock + # pfromData stakeInF.lockedBy + expectedStakeOut = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeInF.stakedAmount + .& #owner .= stakeInF.owner + .& #lockedBy .= pdata expectedProposalLocks + ) - pguardC "Output stake should be locked by the proposal" $ expectedStakeOut #== stakeOut - - pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - - PUnlock r -> unTermCont $ do - -- At draft stage, the votes should be empty. - pguardC "Shouldn't retract votes from a draft proposal" $ - pnot #$ proposalF.status #== pconstantData Draft - - -- This is the vote option we're retracting from. - retractFrom <- pletC $ pfield @"resultTag" # r - - -- Determine if the input stake is actually locked by this proposal. - stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId - - pguardC "Stake input relevant" $ - pmatch stakeUsage $ \case - PDidNothing -> - ptraceIfFalse "Stake should be relevant" $ - pconstant False - PCreated -> - ptraceIfFalse "Removing creator's locks means status is Finished" $ - proposalF.status #== pconstantData Finished - PVotedFor rt -> - ptraceIfFalse "Result tag should match the one given in the redeemer" $ - rt #== retractFrom - - -- The count of removing votes is equal to the 'stakeAmount' of input stake. - retractCount <- - pletC $ - pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v - - -- The votes can only change when the proposal still allows voting. - let shouldUpdateVotes = - proposalF.status #== pconstantData VotingReady - #&& pnot # (pcon PCreated #== stakeUsage) - - pguardC "Proposal output correct" $ - pif - shouldUpdateVotes - ( let -- Remove votes and leave other parts of the proposal as it. - expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes - - expectedProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalF.status - .& #cosigners .= proposalF.cosigners - .& #thresholds .= proposalF.thresholds - .& #votes .= pdata expectedVotes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) - in ptraceIfFalse "Update votes" $ - expectedProposalOut #== proposalOut - ) - -- No change to the proposal is allowed. - $ ptraceIfFalse "Proposal unchanged" proposalUnchanged - - -- At last, we ensure that all locks belong to this proposal will be removed. - stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut - - let templateStakeOut = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInF.stakedAmount - .& #owner .= stakeInF.owner - .& #lockedBy .= stakeOutputLocks - ) + pguardC "Output stake should be locked by the proposal" $ expectedStakeOut #== stakeOut + + pure $ pconstant () + + ------------------------------------------------------------------ + PUnlock r -> do + -- At draft stage, the votes should be empty. + pguardC "Shouldn't retract votes from a draft proposal" $ + pnot #$ currentStatus #== pconstant Draft + + -- This is the vote option we're retracting from. + retractFrom <- pletC $ pfield @"resultTag" # r + + -- Determine if the input stake is actually locked by this proposal. + stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId + + pguardC "Stake input relevant" $ + pmatch stakeUsage $ \case + PDidNothing -> + ptraceIfFalse "Stake should be relevant" $ + pconstant False + PCreated -> + ptraceIfFalse "Removing creator's locks means status is Finished" $ + currentStatus #== pconstant Finished + PVotedFor rt -> + ptraceIfFalse "Result tag should match the one given in the redeemer" $ + rt #== retractFrom + + -- The count of removing votes is equal to the 'stakeAmount' of input stake. + retractCount <- + pletC $ + pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v + + -- The votes can only change when the proposal still allows voting. + let shouldUpdateVotes = + currentStatus #== pconstant VotingReady + #&& pnot # (pcon PCreated #== stakeUsage) + + pguardC "Proposal output correct" $ + pif + shouldUpdateVotes + ( let -- Remove votes and leave other parts of the proposal as it. + expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes + + expectedProposalOut = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalF.status + .& #cosigners .= proposalF.cosigners + .& #thresholds .= proposalF.thresholds + .& #votes .= pdata expectedVotes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) + in ptraceIfFalse "Update votes" $ + expectedProposalOut #== proposalOut + ) + -- No change to the proposal is allowed. + $ ptraceIfFalse "Proposal unchanged" proposalUnchanged + + -- At last, we ensure that all locks belong to this proposal will be removed. + stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut + + let templateStakeOut = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeInF.stakedAmount + .& #owner .= stakeInF.owner + .& #lockedBy .= stakeOutputLocks + ) - pguardC "Only locks updated in the output stake" $ - templateStakeOut #== stakeOut - - pguardC "All relevant locks removed from the stake" $ - pgetStakeUsage # pfromData stakeOutputLocks - # proposalF.proposalId #== pcon PDidNothing - - pure $ popaque (pconstant ()) - ------------------------------------------------------------------ - PAdvanceProposal _ -> unTermCont $ do - pguardC "Stake should not change" $ - stakeInputHash #== stakeOutputHash - - proposalOutStatus <- pletC $ pfield @"status" # proposalOut - - let -- Only the status of proposals should be updated in this case. - templateProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalOutStatus - .& #cosigners .= proposalF.cosigners - .& #thresholds .= proposalF.thresholds - .& #votes .= proposalF.votes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) + pguardC "Only locks updated in the output stake" $ + templateStakeOut #== stakeOut - pguardC "Only status changes in the output proposal" $ - templateProposalOut #== proposalOut + pguardC "All relevant locks removed from the stake" $ + pgetStakeUsage # pfromData stakeOutputLocks + # proposalF.proposalId #== pcon PDidNothing - inDraftPeriod <- pletC $ isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inVotingPeriod <- pletC $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + pure $ pconstant () - proposalStatus <- pletC $ pto $ pfromData proposalF.status + ------------------------------------------------------------------ + PAdvanceProposal _ -> do + pguardC "Stake should not change" $ + stakeInputHash #== stakeOutputHash - -- Check the timings. - let isFinished = proposalF.status #== pconstantData Finished + pguardC + "Only status changes in the output proposal" + onlyStatusChanged - notTooLate = pmatchEnum proposalStatus $ \case - Draft -> inDraftPeriod - -- Can only advance after the voting period is over. - VotingReady -> inLockedPeriod - Locked -> inExecutionPeriod - _ -> pconstant False + inVotingPeriod <- pletC $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - notTooEarly = pmatchEnum (pto $ pfromData proposalF.status) $ \case - VotingReady -> pnot # inVotingPeriod - Locked -> pnot # inLockedPeriod - _ -> pconstant True + proposalStatus <- pletC $ pto $ pfromData proposalF.status - pguardC "Cannot advance ahead of time" notTooEarly - pguardC "Finished proposals cannot be advanced" $ pnot # isFinished + -- Check the timings. + let isFinished = currentStatus #== pconstant Finished - thresholdsF <- pletFieldsC @'["execute"] proposalF.thresholds + notTooLate = pmatchEnum proposalStatus $ \case + -- Can only advance after the voting period is over. + VotingReady -> inLockedPeriod + Locked -> inExecutionPeriod + _ -> pconstant False - pure $ - pif - notTooLate - -- On time: advance to next status. - ( pmatchEnum proposalStatus $ \case - Draft -> unTermCont $ do - -- TODO: Perform other necessary checks. + notTooEarly = pmatchEnum (pto $ pfromData proposalF.status) $ \case + VotingReady -> pnot # inVotingPeriod + Locked -> pnot # inLockedPeriod + _ -> pconstant True - -- 'Draft' -> 'VotingReady' - pguardC "Proposal status set to VotingReady" $ - proposalOutStatus #== pconstantData VotingReady + pguardC "Cannot advance ahead of time" notTooEarly + pguardC "Finished proposals cannot be advanced" $ pnot # isFinished + + let toFailedState = unTermCont $ do + pguardC "Proposal should fail: not on time" $ + proposalOutStatus #== pconstant Finished + + -- TODO: Should check that the GST is not moved + -- if the proposal is in 'Locked' state. + pure $ pconstant () - pure $ popaque (pconstant ()) + toNextState = pmatchEnum proposalStatus $ \case VotingReady -> unTermCont $ do -- 'VotingReady' -> 'Locked' pguardC "Proposal status set to Locked" $ - proposalOutStatus #== pconstantData Locked + proposalOutStatus #== pconstant Locked pguardC "Winner outcome not found" $ pisJust #$ pwinner' # proposalF.votes #$ punsafeCoerce $ pfromData thresholdsF.execute - pure $ popaque (pconstant ()) + pure $ pconstant () Locked -> unTermCont $ do -- 'Locked' -> 'Finished' pguardC "Proposal status set to Finished" $ - proposalOutStatus #== pconstantData Finished + proposalOutStatus #== pconstant Finished -- TODO: Perform other necessary checks. - pure $ popaque (pconstant ()) - _ -> popaque (pconstant ()) - ) - -- Too late: failed proposal, status set to 'Finished'. - ( popaque $ - ptraceIfFalse "Proposal should fail: not on time" $ - proposalOutStatus #== pconstantData Finished - -- TODO: Should check that the GST is not moved - -- if the proposal is in 'Locked' state. - ) - _ -> popaque (pconstant ()) + pure $ pconstant () + _ -> pconstant () + + pure $ + pif + notTooLate + -- On time: advance to next status. + toNextState + -- Too late: failed proposal, status set to 'Finished'. + toFailedState + _ -> pure $ pconstant () + ) diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 2b24a508..e8945c25 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -19,6 +19,9 @@ module Agora.Utils ( validatorHashToAddress, isScriptAddress, isPubKey, + pltAsData, + pisUniqBy', + pisUniq', ) where import Plutarch.Api.V1 ( @@ -193,3 +196,48 @@ mustBePDJust = phoistAcyclic $ -} 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 + +{- | Special version of 'pisUniq'', the list elements should have 'PEq' instance. + + @since 0.2.0 +-} +pisUniq' :: + forall (l :: PType -> PType) (a :: PType) (s :: S). + (PEq a, PIsListLike l a) => + Term s (l a :--> PBool) +pisUniq' = phoistAcyclic $ pisUniqBy' # phoistAcyclic (plam (#==)) + +{- | Return true if all the elements in the given list are unique, given the equalator function. + The list is assumed to be ordered. + + @since 0.2.0 +-} +pisUniqBy' :: + forall (l :: PType -> PType) (a :: PType) (s :: S). + (PIsListLike l a) => + Term s ((a :--> a :--> PBool) :--> l a :--> PBool) +pisUniqBy' = phoistAcyclic $ + plam $ \eq l -> + pif (pnull # l) (pconstant True) $ + go # eq # (phead # l) # (ptail # l) + where + go :: Term _ ((a :--> a :--> PBool) :--> a :--> l a :--> PBool) + go = phoistAcyclic $ + pfix #$ plam $ \self' eq x xs -> + plet (self' # eq) $ \self -> + pif (pnull # xs) (pconstant True) $ + plet (phead # xs) $ \x' -> + pif (eq # x # x') (pconstant False) $ + self # x' #$ ptail # xs diff --git a/bench.csv b/bench.csv index e5bdec1f..dca4d7b7 100644 --- a/bench.csv +++ b/bench.csv @@ -8,24 +8,24 @@ Agora/Stake/policy/stakeCreation,50939580,148729,2387 Agora/Stake/validator/stakeDepositWithdraw deposit,181581435,493259,4413 Agora/Stake/validator/stakeDepositWithdraw withdraw,181581435,493259,4401 Agora/Proposal/policy/proposalCreation,23140177,69194,1515 -Agora/Proposal/validator/cosignature/proposal,242933842,689669,8224 -Agora/Proposal/validator/cosignature/stake,124072228,314923,4942 -Agora/Proposal/validator/voting/proposal,236945537,666233,8142 -Agora/Proposal/validator/voting/stake,131045998,349073,4899 -Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,237984765,667020,8049 -Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,253273240,708960,8058 -Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,241665255,675133,8058 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,237488276,666118,8051 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,238906810,669423,8052 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,240037788,671827,8052 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",240815652,676043,8102 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",211095003,600275,8104 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",207388671,591954,8106 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",207388671,591954,8106 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1770480224,5186822,29209 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1444125436,4305527,29393 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1335481449,3965762,29377 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1335481449,3965762,29377 +Agora/Proposal/validator/cosignature/proposal,240482868,674626,8525 +Agora/Proposal/validator/cosignature/stake,125315872,312659,4942 +Agora/Proposal/validator/voting/proposal,243946100,678901,8443 +Agora/Proposal/validator/voting/stake,120122971,320497,4899 +Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,219342631,620576,8350 +Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,247748475,699343,8359 +Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,236509366,666512,8359 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,214287939,609855,8352 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,233681921,660502,8353 +Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,234812899,662906,8353 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",245987595,688711,8403 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",215263333,612711,8405 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",212560614,604622,8407 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",212560614,604622,8407 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1775652167,5199490,29510 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1448293766,4317963,29694 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1340653392,3978430,29678 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1340653392,3978430,29678 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 @@ -33,5 +33,5 @@ Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,80 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51007235,144191,2034 Agora/Governor/validator/proposal creation,309689999,834675,9064 -Agora/Governor/validator/GATs minting,421016677,1141838,9187 +Agora/Governor/validator/GATs minting,418560845,1137908,9187 Agora/Governor/validator/mutate governor state,88986020,248491,8662 From d433ab17d6db3a3c493b262f3ab803c6bb28eb37 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 5 Jul 2022 07:53:56 +0800 Subject: [PATCH 25/78] `WitnessStake`: accept multiple stakes at input --- agora/Agora/Stake/Scripts.hs | 428 ++++++++++++++++++++--------------- bench.csv | 8 +- 2 files changed, 251 insertions(+), 185 deletions(-) diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index e8b5e465..f9478176 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -8,7 +8,18 @@ Plutus Scripts for Stakes. module Agora.Stake.Scripts (stakePolicy, stakeValidator) where import Agora.SafeMoney (GTTag) -import Agora.Stake +import Agora.Stake ( + PStakeDatum (PStakeDatum), + PStakeRedeemer ( + PDepositWithdraw, + PDestroy, + PPermitVote, + PRetractVotes + ), + Stake (gtClassRef, proposalSTClass), + StakeRedeemer (WitnessStake), + stakeLocked, + ) import Agora.Utils ( mustBePJust, mustFindDatum', @@ -18,18 +29,22 @@ import Data.Tagged (Tagged (..), untag) import Plutarch.Api.V1 ( AmountGuarantees (Positive), PCredential (PPubKeyCredential, PScriptCredential), + PDatumHash, PMintingPolicy, PScriptPurpose (PMinting, PSpending), PTokenName, PTxInfo, + PTxOut, PValidator, PValue, mintingPolicySymbol, mkMintingPolicy, ) import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf, pvalueOf) -import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisTokenSpent, ptxSignedBy, pvalueSpent) +import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, ptxSignedBy, pvalueSpent) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pgeqByClass', pgeqBySymbol, psymbolValueOf) +import Plutarch.Extra.List (pmapMaybe, pmsortBy) +import Plutarch.Extra.Maybe (pfromDJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.Internal (punsafeCoerce) @@ -208,7 +223,15 @@ stakeValidator stake = plam $ \datum redeemer ctx' -> unTermCont $ do ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo <- pletC $ pfromData ctx.txInfo - txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "signatories", "datums"] txInfo + txInfoF <- + pletFieldsC + @'[ "mint" + , "inputs" + , "outputs" + , "signatories" + , "datums" + ] + txInfo (pfromData -> stakeRedeemer, _) <- ptryFromC redeemer @@ -219,23 +242,25 @@ stakeValidator stake = PSpending txOutRef <- pmatchC $ pfromData ctx.purpose - PJust txInInfo <- pmatchC $ pfindTxInByTxOutRef # (pfield @"_0" # txOutRef) # txInfoF.inputs - ownAddress <- pletC $ pfield @"address" #$ pfield @"resolved" # txInInfo - let continuingValue :: Term _ (PValue _ _) - continuingValue = pfield @"value" #$ pfield @"resolved" # txInInfo + PJust ((pfield @"resolved" #) -> resolved) <- + pmatchC $ + pfindTxInByTxOutRef + # (pfield @"_0" # txOutRef) + # txInfoF.inputs + resolvedF <- pletFieldsC @'["address", "value", "datumHash"] resolved -- Whether the owner signs this transaction or not. ownerSignsTransaction <- pletC $ ptxSignedBy # txInfoF.signatories # stakeDatum.owner - stCurrencySymbol <- pletC $ pconstant $ mintingPolicySymbol $ mkMintingPolicy (stakePolicy stake.gtClassRef) + stCurrencySymbol <- + pletC $ + pconstant $ + mintingPolicySymbol $ + mkMintingPolicy (stakePolicy stake.gtClassRef) mintedST <- pletC $ psymbolValueOf # stCurrencySymbol # txInfoF.mint valueSpent <- pletC $ pvalueSpent # txInfoF.inputs spentST <- pletC $ psymbolValueOf # stCurrencySymbol #$ valueSpent - let AssetClass (propCs, propTn) = stake.proposalSTClass - proposalSTClass = passetClass # pconstant propCs # pconstant propTn - spentProposalST <- pletC $ passetClassValueOf # valueSpent # proposalSTClass - -- Is the stake currently locked? stakeIsLocked <- pletC $ stakeLocked # stakeDatum' @@ -253,196 +278,237 @@ stakeValidator stake = pguardC "Owner signs this transaction" ownerSignsTransaction pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- + ------------------------------------------------------------------------ -- Handle redeemers that require own stake output. + _ -> unTermCont $ do - -- Filter out own output with own address and PST. - ownOutput <- + let AssetClass (propCs, propTn) = stake.proposalSTClass + proposalSTClass = passetClass # pconstant propCs # pconstant propTn + spentProposalST = passetClassValueOf # valueSpent # proposalSTClass + + proposalTokenMoved <- pletC $ spentProposalST #== 1 + + -- Filter out own outputs using own address and ST. + ownOutputs <- pletC $ - mustBePJust # "Own output should be present" #$ pfind + pfilter # plam - ( \input -> unTermCont $ do - inputF <- pletFieldsC @'["address", "value"] input + ( \output -> unTermCont $ do + outputF <- pletFieldsC @'["address", "value"] output + pure $ - inputF.address #== ownAddress - #&& psymbolValueOf # stCurrencySymbol # inputF.value #== 1 + outputF.address #== resolvedF.address + #&& psymbolValueOf # stCurrencySymbol # outputF.value #== 1 ) # pfromData txInfoF.outputs - stakeOut <- - pletC $ - mustFindDatum' @PStakeDatum - # (pfield @"datumHash" # ownOutput) - # txInfoF.datums + let witnessStake = unTermCont $ do + pguardC "Either owner signs the transaction or propsoal token moved" $ + ownerSignsTransaction #|| proposalTokenMoved - ownOutputValue <- - pletC $ - pfield @"value" # ownOutput + -- FIXME: refactor this with reference input, once it's supported by plutarch. + -- + -- Our goal here is to allow multiple input stakes, and also ensure that every the input stakes has a + -- corresponding output stake, which carries the same value and the same datum as the input stake. + -- + -- Validation strategy I have tried/considered so far: + -- 1. Check that the number of input stakes equals to the number of output stakes, and verify + -- that every input stake has an output stake with the exact same value and datum hash. + -- However this approach has a fatal vulnerability: let's say we have two totally identical stakes, + -- a malicious user can comsume these two stakes and remove GTs from one of them. + -- 2. Perform the same checks as the last approch does, while also checking that every output stake is + -- valid(stakedAmount == actual value). However this requires that all the output stake datum are + -- included in the transaction, and we have to find and go through them one by one to access the + -- 'stakedAmount' fields, meaning that computationally this approach is *very* expensive. + -- 3. The one implemented below. Find all the continuous input/output, sort them by 'datumHash', and + -- ensure that the two sorted lists are equal. + let ownInputs = + pmapMaybe + # plam + ( \input -> plet (pfield @"resolved" # input) $ \resolvedInput -> + let value = pfield @"value" # resolvedInput + in pif + (psymbolValueOf # stCurrencySymbol # value #== 1) + (pcon $ PJust resolvedInput) + (pcon PNothing) + ) + # pfromData txInfoF.inputs + + sortTxOuts :: Term _ (PBuiltinList (PAsData PTxOut) :--> PBuiltinList (PAsData PTxOut)) + sortTxOuts = + plam + ( pmsortBy + # plam + ( \((getDatumHash #) -> dhX) + ((getDatumHash #) -> dhY) -> dhX #< dhY + ) + # + ) + where + getDatumHash :: Term _ (PAsData PTxOut :--> PDatumHash) + getDatumHash = phoistAcyclic $ plam ((pfromDJust #) . pfromData . (pfield @"datumHash" #)) - ownOutputValueUnchanged <- - pletC $ - pdata continuingValue #== pdata ownOutputValue + sortedOwnInputs = sortTxOuts # ownInputs + sortedOwnOutputs = sortTxOuts # ownOutputs - stakeOutUnchanged <- - pletC $ - pdata stakeOut #== pdata stakeDatum' + pguardC "Every stake inputs has a corresponding unchanged output" $ + plistEquals # sortedOwnInputs # sortedOwnOutputs - pure $ - pmatch stakeRedeemer $ \case - PRetractVotes l -> unTermCont $ do - pguardC - "Owner signs this transaction" - ownerSignsTransaction + pure $ popaque $ pconstant () + + ---------------------------------------------------------------------- + let onlyAcceptOneStake = unTermCont $ do pguardC "ST at inputs must be 1" $ spentST #== 1 - -- This puts trust into the Proposal. The Proposal must necessarily check - -- that this is not abused. - pguardC "Proposal ST spent" $ - spentProposalST #== 1 + ownOutput <- pletC $ pfromData $ phead # ownOutputs - pguardC "A UTXO must exist with the correct output" $ - let expectedLocks = pfield @"locks" # l - - expectedDatum = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeDatum.stakedAmount - .& #owner .= stakeDatum.owner - .& #lockedBy .= expectedLocks - ) + stakeOut <- + pletC $ + mustFindDatum' @PStakeDatum + # (pfield @"datumHash" # ownOutput) + # txInfoF.datums - valueCorrect = ownOutputValueUnchanged - outputDatumCorrect = stakeOut #== expectedDatum - in foldl1 - (#&&) - [ ptraceIfFalse "valueCorrect" valueCorrect - , ptraceIfFalse "datumCorrect" outputDatumCorrect - ] - - pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - PPermitVote l -> unTermCont $ do - pguardC - "Owner signs this transaction" - ownerSignsTransaction - - -- This puts trust into the Proposal. The Proposal must necessarily check - -- that this is not abused. - pguardC "Proposal ST spent" $ - spentProposalST #== 1 - - -- Update the stake datum, but only the 'lockedBy' field. - - let -- We actually don't know whether the given lock is valid or not. - -- This is checked in the proposal validator. - newLock = pfield @"lock" # l - -- Prepend the new lock to the existing locks. - expectedLocks = pcons # newLock # stakeDatum.lockedBy - - expectedDatum <- + ownOutputValue <- pletC $ - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeDatum.stakedAmount - .& #owner .= stakeDatum.owner - .& #lockedBy .= pdata expectedLocks - ) - - pguardC "A UTXO must exist with the correct output" $ - let correctOutputDatum = stakeOut #== expectedDatum - valueCorrect = ownOutputValueUnchanged - in foldl1 - (#&&) - [ ptraceIfFalse "valueCorrect" valueCorrect - , ptraceIfFalse "datumCorrect" correctOutputDatum - ] - - pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - PWitnessStake _ -> unTermCont $ do - pguardC "ST at inputs must be 1" $ - spentST #== 1 + pfield @"value" # ownOutput - let AssetClass (propCs, propTn) = stake.proposalSTClass - propAssetClass = passetClass # pconstant propCs # pconstant propTn - proposalTokenMoved = - pisTokenSpent - # propAssetClass - # txInfoF.inputs - - -- In order for cosignature to be witnessed, it must be possible for a - -- proposal to allow this transaction to happen. This puts trust into the Proposal. - -- The Proposal must necessarily check that this is not abused. - pguardC - "Owner signs this transaction OR proposal token is spent" - (ownerSignsTransaction #|| proposalTokenMoved) - - pguardC "A UTXO must exist with the correct output" $ - let correctOutputDatum = stakeOutUnchanged - valueCorrect = ownOutputValueUnchanged - in foldl1 - (#&&) - [ ptraceIfFalse "valueCorrect" valueCorrect - , ptraceIfFalse "correctOutputDatum" correctOutputDatum - ] - pure $ popaque (pconstant ()) - -------------------------------------------------------------------------- - PDepositWithdraw r -> unTermCont $ do - pguardC "ST at inputs must be 1" $ - spentST #== 1 - pguardC "Stake unlocked" $ - pnot #$ stakeIsLocked - pguardC - "Owner signs this transaction" - ownerSignsTransaction - pguardC "A UTXO must exist with the correct output" $ - unTermCont $ do - let oldStakedAmount = pfromData $ stakeDatum.stakedAmount - delta = pfromData $ pfield @"delta" # r - - newStakedAmount <- pletC $ oldStakedAmount + delta - - pguardC "New staked amount shoudl be greater than or equal to 0" $ - zero #<= newStakedAmount - - let expectedDatum = + ownOutputValueUnchanged <- + pletC $ + pdata resolvedF.value #== pdata ownOutputValue + + pure $ + pmatch stakeRedeemer $ \case + PRetractVotes l -> unTermCont $ do + pguardC + "Owner signs this transaction" + ownerSignsTransaction + + -- This puts trust into the Proposal. The Proposal must necessarily check + -- that this is not abused. + pguardC "Proposal ST spent" proposalTokenMoved + + pguardC "A UTXO must exist with the correct output" $ + let expectedLocks = pfield @"locks" # l + + expectedDatum = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeDatum.stakedAmount + .& #owner .= stakeDatum.owner + .& #lockedBy .= expectedLocks + ) + + valueCorrect = ownOutputValueUnchanged + outputDatumCorrect = stakeOut #== expectedDatum + in foldl1 + (#&&) + [ ptraceIfFalse "valueCorrect" valueCorrect + , ptraceIfFalse "datumCorrect" outputDatumCorrect + ] + + pure $ popaque (pconstant ()) + + ------------------------------------------------------------ + + PPermitVote l -> unTermCont $ do + pguardC + "Owner signs this transaction" + ownerSignsTransaction + + -- This puts trust into the Proposal. The Proposal must necessarily check + -- that this is not abused. + pguardC "Proposal ST spent" proposalTokenMoved + + -- Update the stake datum, but only the 'lockedBy' field. + + let -- We actually don't know whether the given lock is valid or not. + -- This is checked in the proposal validator. + newLock = pfield @"lock" # l + -- Prepend the new lock to the existing locks. + expectedLocks = pcons # newLock # stakeDatum.lockedBy + + expectedDatum <- + pletC $ mkRecordConstr PStakeDatum - ( #stakedAmount .= pdata newStakedAmount + ( #stakedAmount .= stakeDatum.stakedAmount .& #owner .= stakeDatum.owner - .& #lockedBy .= stakeDatum.lockedBy + .& #lockedBy .= pdata expectedLocks ) - datumCorrect = stakeOut #== expectedDatum - - let valueDelta :: Term _ (PValue _ 'Positive) - valueDelta = pdiscreteValue' stake.gtClassRef # delta - - expectedValue = - continuingValue <> valueDelta - - valueCorrect = - foldr1 - (#&&) - [ pgeqByClass' (AssetClass ("", "")) - # ownOutputValue - # expectedValue - , pgeqByClass' (untag stake.gtClassRef) - # ownOutputValue - # expectedValue - , pgeqBySymbol - # stCurrencySymbol - # ownOutputValue - # expectedValue - ] - -- - pure $ - foldl1 - (#&&) - [ ptraceIfFalse "valueCorrect" valueCorrect - , ptraceIfFalse "datumCorrect" datumCorrect - ] - -- - pure $ popaque (pconstant ()) - _ -> popaque (pconstant ()) + + pguardC "A UTXO must exist with the correct output" $ + let correctOutputDatum = stakeOut #== expectedDatum + valueCorrect = ownOutputValueUnchanged + in foldl1 + (#&&) + [ ptraceIfFalse "valueCorrect" valueCorrect + , ptraceIfFalse "datumCorrect" correctOutputDatum + ] + + pure $ popaque (pconstant ()) + + ------------------------------------------------------------ + + PDepositWithdraw r -> unTermCont $ do + pguardC "Stake unlocked" $ + pnot #$ stakeIsLocked + pguardC + "Owner signs this transaction" + ownerSignsTransaction + pguardC "A UTXO must exist with the correct output" $ + unTermCont $ do + let oldStakedAmount = pfromData $ stakeDatum.stakedAmount + delta = pfromData $ pfield @"delta" # r + + newStakedAmount <- pletC $ oldStakedAmount + delta + + pguardC "New staked amount shoudl be greater than or equal to 0" $ + zero #<= newStakedAmount + + let expectedDatum = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= pdata newStakedAmount + .& #owner .= stakeDatum.owner + .& #lockedBy .= stakeDatum.lockedBy + ) + datumCorrect = stakeOut #== expectedDatum + + let valueDelta :: Term _ (PValue _ 'Positive) + valueDelta = pdiscreteValue' stake.gtClassRef # delta + + expectedValue = + resolvedF.value <> valueDelta + + valueCorrect = + foldr1 + (#&&) + [ pgeqByClass' (AssetClass ("", "")) + # ownOutputValue + # expectedValue + , pgeqByClass' (untag stake.gtClassRef) + # ownOutputValue + # expectedValue + , pgeqBySymbol + # stCurrencySymbol + # ownOutputValue + # expectedValue + ] + -- + pure $ + foldl1 + (#&&) + [ ptraceIfFalse "valueCorrect" valueCorrect + , ptraceIfFalse "datumCorrect" datumCorrect + ] + -- + pure $ popaque (pconstant ()) + _ -> popaque (pconstant ()) + + pure $ + pif + (pdata stakeRedeemer #== pconstantData WitnessStake) + witnessStake + onlyAcceptOneStake diff --git a/bench.csv b/bench.csv index dca4d7b7..a596e6fc 100644 --- a/bench.csv +++ b/bench.csv @@ -5,13 +5,13 @@ Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,87839169,243032,8561 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609 Agora/Stake/policy/stakeCreation,50939580,148729,2387 -Agora/Stake/validator/stakeDepositWithdraw deposit,181581435,493259,4413 -Agora/Stake/validator/stakeDepositWithdraw withdraw,181581435,493259,4401 +Agora/Stake/validator/stakeDepositWithdraw deposit,180222751,492217,5003 +Agora/Stake/validator/stakeDepositWithdraw withdraw,180222751,492217,4991 Agora/Proposal/policy/proposalCreation,23140177,69194,1515 Agora/Proposal/validator/cosignature/proposal,240482868,674626,8525 -Agora/Proposal/validator/cosignature/stake,125315872,312659,4942 +Agora/Proposal/validator/cosignature/stake,136781411,336612,5528 Agora/Proposal/validator/voting/proposal,243946100,678901,8443 -Agora/Proposal/validator/voting/stake,120122971,320497,4899 +Agora/Proposal/validator/voting/stake,128972262,348186,5489 Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,219342631,620576,8350 Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,247748475,699343,8359 Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,236509366,666512,8359 From 9c8d04dbc6a7dfbe773788d80cb206ba89fba889 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 5 Jul 2022 07:55:12 +0800 Subject: [PATCH 26/78] add tests for advancement from draft phrase; refactoring --- .../Sample/Effect/TreasuryWithdrawal.hs | 15 +- agora-specs/Sample/Proposal.hs | 701 ------------------ agora-specs/Sample/Proposal/Advance.hs | 509 +++++++++++++ agora-specs/Sample/Proposal/Cosign.hs | 344 +++++++++ agora-specs/Sample/Proposal/Shared.hs | 42 +- agora-specs/Sample/Proposal/UnlockStake.hs | 77 +- agora-specs/Sample/Proposal/Vote.hs | 249 +++++++ agora-specs/Spec/Proposal.hs | 424 ++++------- agora-testlib/Test/Util.hs | 41 +- agora.cabal | 3 + agora/Agora/Stake/Scripts.hs | 8 +- bench.csv | 63 +- 12 files changed, 1400 insertions(+), 1076 deletions(-) create mode 100644 agora-specs/Sample/Proposal/Advance.hs create mode 100644 agora-specs/Sample/Proposal/Cosign.hs create mode 100644 agora-specs/Sample/Proposal/Vote.hs diff --git a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs index 7c95bc97..724dca98 100644 --- a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs +++ b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs @@ -23,17 +23,13 @@ import Agora.Effect.TreasuryWithdrawal ( TreasuryWithdrawalDatum (TreasuryWithdrawalDatum), treasuryWithdrawalValidator, ) -import Crypto.Hash qualified as Crypto -import Data.ByteArray qualified as BA -import Data.ByteString qualified as BS -import Data.ByteString.Char8 qualified as C (pack) import Plutarch.Api.V1 (mkValidator, validatorHash) import PlutusLedgerApi.V1 ( Address (Address), Credential (..), CurrencySymbol (CurrencySymbol), DatumHash (DatumHash), - PubKeyHash (PubKeyHash), + PubKeyHash, ScriptContext (..), ScriptPurpose (Spending), TokenName (TokenName), @@ -56,10 +52,10 @@ import PlutusLedgerApi.V1 ( Validator, ValidatorHash (ValidatorHash), Value, - toBuiltin, ) import PlutusLedgerApi.V1.Interval qualified as Interval (always) import PlutusLedgerApi.V1.Value qualified as Value (singleton) +import Test.Util (scriptCredentials, userCredentials) -- | A sample Currency Symbol. currSymbol :: CurrencySymbol @@ -69,16 +65,13 @@ currSymbol = CurrencySymbol "12312099" signer :: PubKeyHash signer = "8a30896c4fd5e79843e4ca1bd2cdbaa36f8c0bc3be7401214142019c" -blake2b_224 :: BS.ByteString -> BS.ByteString -blake2b_224 = BS.pack . BA.unpack . Crypto.hashWith Crypto.Blake2b_224 - -- | List of users who the effect will pay to. users :: [Credential] -users = PubKeyCredential . PubKeyHash . toBuiltin . blake2b_224 . C.pack . show <$> ([1 ..] :: [Integer]) +users = userCredentials -- | List of users who the effect will pay to. treasuries :: [Credential] -treasuries = ScriptCredential . ValidatorHash . toBuiltin . blake2b_224 . C.pack . show <$> ([1 ..] :: [Integer]) +treasuries = scriptCredentials inputGAT :: TxInInfo inputGAT = diff --git a/agora-specs/Sample/Proposal.hs b/agora-specs/Sample/Proposal.hs index ac85e7f8..6d2d6a97 100644 --- a/agora-specs/Sample/Proposal.hs +++ b/agora-specs/Sample/Proposal.hs @@ -8,17 +8,6 @@ This module tests primarily the happy path for Proposal interactions module Sample.Proposal ( -- * Script contexts proposalCreation, - cosignProposal, - proposalRef, - stakeRef, - voteOnProposal, - VotingParameters (..), - advanceProposalSuccess, - advanceProposalFailureTimeout, - TransitionParameters (..), - advanceFinishedProposal, - advanceProposalInsufficientVotes, - advanceProposalWithInvalidOutputStake, ) where import Agora.Governor (GovernorDatum (..)) @@ -27,78 +16,41 @@ import Agora.Proposal ( ProposalDatum (..), ProposalId (..), ProposalStatus (..), - ProposalThresholds (..), - ProposalVotes (..), ResultTag (..), emptyVotesFor, ) -import Agora.Proposal.Time ( - ProposalStartingTime (ProposalStartingTime), - ProposalTimingConfig (..), - ) -import Agora.Stake ( - ProposalLock (ProposalLock), - Stake (..), - StakeDatum (..), - ) import Data.Default.Class (Default (def)) -import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( - BaseBuilder, MintingBuilder, buildMintingUnsafe, - buildTxInfoUnsafe, input, mint, output, script, signedWith, - timeRange, txId, withDatum, - withRefIndex, withTxId, withValue, ) import PlutusLedgerApi.V1 ( - Datum (Datum), - DatumHash, - POSIXTime, - POSIXTimeRange, - PubKeyHash, ScriptContext (..), - ToData (toBuiltinData), - TxInInfo (TxInInfo), - TxInfo (..), - TxOut (TxOut, txOutAddress, txOutDatumHash, txOutValue), - TxOutRef (..), - ValidatorHash, ) import PlutusLedgerApi.V1.Value qualified as Value ( assetClassValue, singleton, ) import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (proposalRef, stakeRef) import Sample.Shared ( govValidatorHash, - minAda, proposal, proposalPolicySymbol, proposalStartingTimeFromTimeRange, proposalValidatorHash, signer, - signer2, - stake, - stakeAddress, - stakeAssetClass, - stakeValidatorHash, ) import Test.Util ( closedBoundedInterval, - datumPair, - toDatumHash, - updateMap, ) proposalCreation :: ScriptContext @@ -160,656 +112,3 @@ proposalCreation = . withDatum govAfter ] in buildMintingUnsafe builder - --- | This script context should be a valid transaction. -cosignProposal :: [PubKeyHash] -> TxInfo -cosignProposal newSigners = - let st = Value.singleton proposalPolicySymbol "" 1 -- Proposal ST - effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - proposalBefore :: ProposalDatum - proposalBefore = - ProposalDatum - { proposalId = ProposalId 0 - , effects = effects - , status = Draft - , cosigners = [signer] - , thresholds = def - , votes = emptyVotesFor effects - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - stakeDatum :: StakeDatum - stakeDatum = StakeDatum (Tagged 50_000_000) signer2 [] - proposalAfter :: ProposalDatum - proposalAfter = proposalBefore {cosigners = newSigners <> proposalBefore.cosigners} - validTimeRange :: POSIXTimeRange - validTimeRange = - closedBoundedInterval - 10 - ((def :: ProposalTimingConfig).draftTime - 10) - builder :: BaseBuilder - builder = - mconcat - [ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" - , mint st - , mconcat $ signedWith <$> newSigners - , timeRange validTimeRange - , input $ - script proposalValidatorHash - . withValue (st <> Value.singleton "" "" 10_000_000) - . withDatum proposalBefore - . withTxId (txOutRefId proposalRef) - . withRefIndex (txOutRefIdx proposalRef) - , input $ - script stakeValidatorHash - . withValue - ( Value.singleton "" "" 10_000_000 - <> Value.assetClassValue (untag stake.gtClassRef) 50_000_000 - <> Value.assetClassValue stakeAssetClass 1 - ) - . withDatum stakeDatum - . withTxId (txOutRefId stakeRef) - . withRefIndex (txOutRefIdx stakeRef) - , output $ - script proposalValidatorHash - . withValue (st <> Value.singleton "" "" 10_000_000) - . withDatum proposalAfter - , output $ - script stakeValidatorHash - . withValue - ( Value.singleton "" "" 10_000_000 - <> Value.assetClassValue (untag stake.gtClassRef) 50_000_000 - <> Value.assetClassValue stakeAssetClass 1 - ) - . withDatum stakeDatum - ] - in buildTxInfoUnsafe builder - --------------------------------------------------------------------------------- - --- | Parameters for creating a voting transaction. -data VotingParameters = VotingParameters - { voteFor :: ResultTag - -- ^ The outcome the transaction is voting for. - , voteCount :: Integer - -- ^ The count of votes. - } - --- | Create a valid transaction that votes on a propsal, given the parameters. -voteOnProposal :: VotingParameters -> TxInfo -voteOnProposal params = - let pst = Value.singleton proposalPolicySymbol "" 1 - sst = Value.assetClassValue stakeAssetClass 1 - - --- - - stakeOwner = signer - - --- - - effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - - --- - - initialVotes :: AssocMap.Map ResultTag Integer - initialVotes = - AssocMap.fromList - [ (ResultTag 0, 42) - , (ResultTag 1, 4242) - ] - - --- - - proposalInputDatum :: ProposalDatum - proposalInputDatum = - ProposalDatum - { proposalId = ProposalId 42 - , effects = effects - , status = VotingReady - , cosigners = [stakeOwner] - , thresholds = def - , votes = ProposalVotes initialVotes - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - - --- - - existingLocks :: [ProposalLock] - existingLocks = - [ ProposalLock (ResultTag 0) (ProposalId 0) - , ProposalLock (ResultTag 2) (ProposalId 1) - ] - - --- - - stakeInputDatum :: StakeDatum - stakeInputDatum = - StakeDatum - { stakedAmount = Tagged params.voteCount - , owner = stakeOwner - , lockedBy = existingLocks - } - - --- - - updatedVotes :: AssocMap.Map ResultTag Integer - updatedVotes = updateMap (Just . (+ params.voteCount)) params.voteFor initialVotes - - --- - - proposalOutputDatum :: ProposalDatum - proposalOutputDatum = - proposalInputDatum - { votes = ProposalVotes updatedVotes - } - - --- - - -- Off-chain code should do exactly like this: prepend new lock toStatus the list. - updatedLocks :: [ProposalLock] - updatedLocks = ProposalLock params.voteFor proposalInputDatum.proposalId : existingLocks - - --- - - stakeOutputDatum :: StakeDatum - stakeOutputDatum = - stakeInputDatum - { lockedBy = updatedLocks - } - - --- - - validTimeRange = - closedBoundedInterval - ((def :: ProposalTimingConfig).draftTime + 1) - ((def :: ProposalTimingConfig).votingTime - 1) - - builder :: BaseBuilder - builder = - mconcat - [ txId "827598fb2d69a896bbd9e645bb14c307df907f422b39eecbe4d6329bc30b428c" - , signedWith stakeOwner - , timeRange validTimeRange - , input $ - script proposalValidatorHash - . withValue pst - . withDatum proposalInputDatum - . withTxId (txOutRefId proposalRef) - . withRefIndex (txOutRefIdx proposalRef) - , input $ - script stakeValidatorHash - . withValue - ( sst - <> Value.assetClassValue (untag stake.gtClassRef) params.voteCount - <> minAda - ) - . withDatum stakeInputDatum - . withTxId (txOutRefId stakeRef) - . withRefIndex (txOutRefIdx stakeRef) - , output $ - script proposalValidatorHash - . withValue pst - . withDatum proposalOutputDatum - , output $ - script stakeValidatorHash - . withValue - ( sst - <> Value.assetClassValue (untag stake.gtClassRef) params.voteCount - <> minAda - ) - . withDatum stakeOutputDatum - ] - in buildTxInfoUnsafe builder - --------------------------------------------------------------------------------- - --- | Parameters for state transition of proposals. -data TransitionParameters = TransitionParameters - { -- The initial status of the proposal. - initialProposalStatus :: ProposalStatus - , -- The starting time of the proposal. - proposalStartingTime :: ProposalStartingTime - } - --- | Create a 'TxInfo' that update the status of a proposal. -mkTransitionTxInfo :: - -- | Initial state of the proposal. - ProposalStatus -> - -- | Next state of the proposal. - ProposalStatus -> - -- | Effects. - AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) -> - -- | Votes. - ProposalVotes -> - -- | Starting time of the proposal. - ProposalStartingTime -> - -- | Valid time range of the transaction. - POSIXTimeRange -> - -- | Whether to add an unchanged stake or not. - Bool -> - TxInfo -mkTransitionTxInfo from to effects votes startingTime validTime shouldAddUnchangedStake = - let pst = Value.singleton proposalPolicySymbol "" 1 - sst = Value.assetClassValue stakeAssetClass 1 - - proposalInputDatum :: ProposalDatum - proposalInputDatum = - ProposalDatum - { proposalId = ProposalId 0 - , effects = effects - , status = from - , cosigners = [signer] - , thresholds = def - , votes = votes - , timingConfig = def - , startingTime = startingTime - } - - proposalOutputDatum :: ProposalDatum - proposalOutputDatum = - proposalInputDatum - { status = to - } - - stakeOwner = signer - stakedAmount = 200 - - existingLocks :: [ProposalLock] - existingLocks = - [ ProposalLock (ResultTag 0) (ProposalId 0) - , ProposalLock (ResultTag 2) (ProposalId 1) - ] - - stakeInputDatum :: StakeDatum - stakeInputDatum = - StakeDatum - { stakedAmount = Tagged stakedAmount - , owner = stakeOwner - , lockedBy = existingLocks - } - - stakeOutputDatum :: StakeDatum - stakeOutputDatum = stakeInputDatum - - stakeBuilder :: BaseBuilder - stakeBuilder = - if shouldAddUnchangedStake - then - mconcat - [ input $ - script stakeValidatorHash - . withValue sst - . withDatum stakeInputDatum - . withTxId (txOutRefId stakeRef) - , output $ - script stakeValidatorHash - . withValue (sst <> minAda) - . withDatum stakeOutputDatum - ] - else mempty - - builder :: BaseBuilder - builder = - mconcat - [ txId "95ba4015e30aef16a3461ea97a779f814aeea6b8009d99a94add4b8293be737a" - , signedWith stakeOwner - , timeRange validTime - , input $ - script proposalValidatorHash - . withValue pst - . withDatum proposalInputDatum - . withTxId (txOutRefId proposalRef) - , output $ - script proposalValidatorHash - . withValue (pst <> minAda) - . withDatum proposalOutputDatum - ] - in buildTxInfoUnsafe $ builder <> stakeBuilder - --- | Wrapper around 'advanceProposalSuccess'', with valid stake. -advanceProposalSuccess :: TransitionParameters -> TxInfo -advanceProposalSuccess ps = advanceProposalSuccess' ps True - -{- | Create a valid 'TxInfo' that advances a proposal, given the parameters. - The second parameter determines wherther valid stake should be included. - - Note that 'TransitionParameters.initialProposalStatus' should not be 'Finished'. --} -advanceProposalSuccess' :: TransitionParameters -> Bool -> TxInfo -advanceProposalSuccess' params = - let -- Status of the output proposal. - toStatus :: ProposalStatus - toStatus = case params.initialProposalStatus of - Draft -> VotingReady - VotingReady -> Locked - Locked -> Finished - Finished -> error "Cannot advance 'Finished' proposal" - - effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - - emptyVotes@(ProposalVotes emptyVotes') = emptyVotesFor effects - - -- Set the vote count of outcome 0 to @def.countingVoting + 1@, - -- meaning that outcome 0 will be the winner. - outcome0WinningVotes = - ProposalVotes $ - updateMap - (\_ -> Just $ untag (def :: ProposalThresholds).execute + 1) - (ResultTag 0) - emptyVotes' - - votes :: ProposalVotes - votes = case params.initialProposalStatus of - Draft -> emptyVotes - -- With sufficient votes - _ -> outcome0WinningVotes - - proposalStartingTime :: POSIXTime - proposalStartingTime = - let (ProposalStartingTime startingTime) = params.proposalStartingTime - in startingTime - - timeRange :: POSIXTimeRange - timeRange = case params.initialProposalStatus of - -- [S + 1, S + D - 1] - Draft -> - closedBoundedInterval - (proposalStartingTime + 1) - (proposalStartingTime + (def :: ProposalTimingConfig).draftTime - 1) - -- [S + D + V + 1, S + D + V + L - 1] - VotingReady -> - closedBoundedInterval - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + 1 - ) - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - - 1 - ) - -- [S + D + V + L + 1, S + + D + V + L + E - 1] - Locked -> - closedBoundedInterval - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - + 1 - ) - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - + (def :: ProposalTimingConfig).executingTime - 1 - ) - Finished -> error "Cannot advance 'Finished' proposal" - in mkTransitionTxInfo - params.initialProposalStatus - toStatus - effects - votes - params.proposalStartingTime - timeRange - -{- | Create a valid 'TxInfo' that advances a proposal to failed state, given the parameters. - The reason why the proposal fails is the proposal has ran out of time. - Note that 'TransitionParameters.initialProposalStatus' should not be 'Finished'. --} -advanceProposalFailureTimeout :: TransitionParameters -> TxInfo -advanceProposalFailureTimeout params = - let effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - - emptyVotes@(ProposalVotes emptyVotes') = emptyVotesFor effects - - -- Set the vote count of outcome 0 to @def.countingVoting + 1@, - -- meaning that outcome 0 will be the winner. - outcome0WinningVotes = - ProposalVotes $ - updateMap - (\_ -> Just $ untag (def :: ProposalThresholds).vote + 1) - (ResultTag 0) - emptyVotes' - - votes :: ProposalVotes - votes = case params.initialProposalStatus of - Draft -> emptyVotes - -- With sufficient votes - _ -> outcome0WinningVotes - - proposalStartingTime :: POSIXTime - proposalStartingTime = - let (ProposalStartingTime startingTime) = params.proposalStartingTime - in startingTime - - timeRange :: POSIXTimeRange - timeRange = case params.initialProposalStatus of - -- [S + D + 1, S + D + V - 1] - Draft -> - closedBoundedInterval - (proposalStartingTime + (def :: ProposalTimingConfig).draftTime + 1) - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - 1 - ) - -- [S + D + V + L + 1, S + D + V + L + E -1] - VotingReady -> - closedBoundedInterval - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - + 1 - ) - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - + (def :: ProposalTimingConfig).executingTime - - 1 - ) - -- [S + D + V + L + E + 1, S + D + V + L + E + 100] - Locked -> - closedBoundedInterval - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - + (def :: ProposalTimingConfig).executingTime - + 1 - ) - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + (def :: ProposalTimingConfig).lockingTime - + (def :: ProposalTimingConfig).executingTime - + 100 - ) - Finished -> error "Cannot advance 'Finished' proposal" - in mkTransitionTxInfo - params.initialProposalStatus - Finished - effects - votes - params.proposalStartingTime - timeRange - True - --- | An invalid 'TxInfo' that tries to advance a 'VotingReady' proposal without sufficient votes. -advanceProposalInsufficientVotes :: TxInfo -advanceProposalInsufficientVotes = - let effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - - -- Insufficient votes. - votes = - ProposalVotes - ( AssocMap.fromList - [ (ResultTag 0, 1) - , (ResultTag 1, 0) - ] - ) - - proposalStartingTime = 0 - - -- Valid time range. - -- [S + D + 1, S + V + 10] - timeRange = - closedBoundedInterval - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + 1 - ) - ( proposalStartingTime - + (def :: ProposalTimingConfig).draftTime - + (def :: ProposalTimingConfig).votingTime - + 10 - ) - in mkTransitionTxInfo - VotingReady - Locked - effects - votes - (ProposalStartingTime proposalStartingTime) - timeRange - True - --- | An invalid 'TxInfo' that tries to advance a 'Finished' proposal. -advanceFinishedProposal :: TxInfo -advanceFinishedProposal = - let effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - - -- Set the vote count of outcome 0 to @def.countingVoting + 1@, - -- meaning that outcome 0 will be the winner. - outcome0WinningVotes = - ProposalVotes $ - AssocMap.fromList - [ (ResultTag 0, untag (def :: ProposalThresholds).vote + 1) - , (ResultTag 1, 0) - ] - - --- - - timeRange = - closedBoundedInterval - ((def :: ProposalTimingConfig).lockingTime + 1) - ((def :: ProposalTimingConfig).executingTime - 1) - in mkTransitionTxInfo - Finished - Finished - effects - outcome0WinningVotes - (ProposalStartingTime 0) - timeRange - True - -{- | An illegal 'TxInfo' that tries to output a changed stake with 'AdvanceProposal'. - From the perspective of stake validator, the transition is totally valid, - so the proposal validator should reject this. --} -advanceProposalWithInvalidOutputStake :: TxInfo -advanceProposalWithInvalidOutputStake = - let templateTxInfo = - advanceProposalSuccess' - TransitionParameters - { initialProposalStatus = VotingReady - , proposalStartingTime = ProposalStartingTime 0 - } - False - - --- - -- Now we create a new lock on an arbitrary stake - - sst = Value.assetClassValue stakeAssetClass 1 - - --- - - stakeOwner = signer - stakedAmount = 200 - - --- - - existingLocks :: [ProposalLock] - existingLocks = - [ ProposalLock (ResultTag 0) (ProposalId 0) - , ProposalLock (ResultTag 2) (ProposalId 1) - ] - - --- - - stakeInputDatum' :: StakeDatum - stakeInputDatum' = - StakeDatum - { stakedAmount = Tagged stakedAmount - , owner = stakeOwner - , lockedBy = existingLocks - } - stakeInputDatum :: Datum - stakeInputDatum = Datum $ toBuiltinData stakeInputDatum' - stakeInput :: TxOut - stakeInput = - TxOut - { txOutAddress = stakeAddress - , txOutValue = - mconcat - [ sst - , Value.assetClassValue (untag stake.gtClassRef) stakedAmount - , minAda - ] - , txOutDatumHash = Just $ toDatumHash stakeInputDatum - } - - --- - - updatedLocks :: [ProposalLock] - updatedLocks = ProposalLock (ResultTag 42) (ProposalId 27) : existingLocks - - --- - - stakeOutputDatum' :: StakeDatum - stakeOutputDatum' = - stakeInputDatum' - { lockedBy = updatedLocks - } - stakeOutputDatum :: Datum - stakeOutputDatum = Datum $ toBuiltinData stakeOutputDatum' - stakeOutput :: TxOut - stakeOutput = - stakeInput - { txOutDatumHash = Just $ toDatumHash stakeOutputDatum - } - in templateTxInfo - { txInfoInputs = TxInInfo stakeRef stakeInput : templateTxInfo.txInfoInputs - , txInfoOutputs = stakeOutput : templateTxInfo.txInfoOutputs - , txInfoData = - (datumPair <$> [stakeInputDatum, stakeOutputDatum]) - <> templateTxInfo.txInfoData - , txInfoSignatories = [stakeOwner] - } diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs new file mode 100644 index 00000000..ea3aaed1 --- /dev/null +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -0,0 +1,509 @@ +module Sample.Proposal.Advance ( + advanceToNextStateInTimeParameters, + advanceToFailedStateDueToTimeoutParameters, + insufficientVotesParameters, + insufficientCosignsParameters, + advanceFromFinishedParameters, + invalidOutputStakeParameters, + mkTestTree, + Parameters (..), +) where + +import Agora.Proposal ( + ProposalDatum (..), + ProposalId (ProposalId), + ProposalRedeemer (AdvanceProposal), + ProposalStatus (..), + ProposalThresholds (..), + ProposalVotes (ProposalVotes), + ResultTag (ResultTag), + emptyVotesFor, + ) +import Agora.Proposal.Scripts (proposalValidator) +import Agora.Proposal.Time ( + ProposalStartingTime (ProposalStartingTime), + ProposalTimingConfig ( + draftTime, + executingTime, + lockingTime, + votingTime + ), + ) +import Agora.SafeMoney (GTTag) +import Agora.Stake ( + ProposalLock (ProposalLock), + Stake (gtClassRef), + StakeDatum (..), + StakeRedeemer (WitnessStake), + ) +import Agora.Stake.Scripts (stakeValidator) +import Data.Coerce (coerce) +import Data.Default (def) +import Data.List (sort) +import Data.Tagged (Tagged (..), untag) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + output, + script, + signedWith, + timeRange, + txId, + withDatum, + withOutRef, + withTxId, + withValue, + ) +import PlutusLedgerApi.V1 ( + DatumHash, + POSIXTime, + POSIXTimeRange, + PubKeyHash, + ScriptContext (ScriptContext), + ScriptPurpose (Spending), + TxInfo, + TxOutRef (TxOutRef), + ValidatorHash, + always, + ) +import PlutusLedgerApi.V1.Value qualified as Value +import PlutusTx.AssocMap qualified as AssocMap +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Shared ( + minAda, + proposalPolicySymbol, + proposalValidatorHash, + stake, + stakeAssetClass, + stakeValidatorHash, + ) +import Sample.Shared qualified as Shared +import Test.Specification (SpecificationTree, group) +import Test.Util (closedBoundedInterval, pubKeyHashes, sortValue, updateMap) + +-- | Parameters for state transition of proposals. +data Parameters = Parameters + { fromStatus :: ProposalStatus + -- ^ Initial state of the proposal. + , toStatus :: ProposalStatus + -- ^ Next state of the proposal. + , votes :: ProposalVotes + -- ^ Votes. + , includeAllStakes :: Bool + -- ^ Whether to add an extra cosigner without stake or not. + , validTimeRange :: POSIXTimeRange + -- ^ Valid time range of the transaction. + , alterOutputStakes :: Bool + -- ^ Whether to alter th output stakes or not. + , stakeCount :: Integer + -- ^ The number of stakes. + , signByAllCosigners :: Bool + , perStakeGTs :: Tagged GTTag Integer + } + +--- + +proposalRef :: TxOutRef +proposalRef = TxOutRef proposalTxRef 1 + +mkStakeRef :: Int -> TxOutRef +mkStakeRef = TxOutRef stakeTxRef . (+ 2) . fromIntegral + +--- + +defEffects :: AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) +defEffects = + AssocMap.fromList + [ (ResultTag 0, AssocMap.empty) + , (ResultTag 1, AssocMap.empty) + ] + +emptyVotes :: ProposalVotes +emptyVotes = emptyVotesFor defEffects + +proposalStartingTime :: POSIXTime +proposalStartingTime = 0 + +--- + +mkProposalInputDatum :: Parameters -> ProposalDatum +mkProposalInputDatum ps = + ProposalDatum + { proposalId = ProposalId 0 + , effects = defEffects + , status = ps.fromStatus + , cosigners = mkStakeOwners ps + , thresholds = def + , votes = ps.votes + , timingConfig = def + , startingTime = ProposalStartingTime proposalStartingTime + } + +mkStakeInputDatums :: Parameters -> [StakeDatum] +mkStakeInputDatums ps = + map + ( \pk -> + StakeDatum + { stakedAmount = ps.perStakeGTs + , owner = pk + , lockedBy = existingLocks + } + ) + $ mkStakeOwners ps + where + existingLocks :: [ProposalLock] + existingLocks = + [ ProposalLock (ResultTag 0) (ProposalId 0) + , ProposalLock (ResultTag 2) (ProposalId 1) + ] + +--- + +proposalScriptPurpose :: ScriptPurpose +proposalScriptPurpose = Spending proposalRef + +mkStakeScriptPurpose :: Int -> ScriptPurpose +mkStakeScriptPurpose = Spending . mkStakeRef + +--- + +proposalRedeemer :: ProposalRedeemer +proposalRedeemer = AdvanceProposal + +stakeRedeemer :: StakeRedeemer +stakeRedeemer = WitnessStake + +--- + +mkStakeOwners :: Parameters -> [PubKeyHash] +mkStakeOwners ps = + sort $ + take + (fromIntegral ps.stakeCount) + pubKeyHashes + +--- + +-- | Create a 'TxInfo' that update the status of a proposal. +advance :: + Parameters -> + TxInfo +advance ps = + let pst = Value.singleton proposalPolicySymbol "" 1 + sst = Value.assetClassValue stakeAssetClass 1 + + proposalInputDatum :: ProposalDatum + proposalInputDatum = + mkProposalInputDatum ps + + proposalOutputDatum :: ProposalDatum + proposalOutputDatum = + proposalInputDatum + { status = ps.toStatus + } + + stakeInputDatums :: [StakeDatum] + stakeInputDatums = mkStakeInputDatums ps + + mkStakeOutputDatum :: StakeDatum -> StakeDatum + mkStakeOutputDatum si = + if ps.alterOutputStakes + then + si + { stakedAmount = ps.perStakeGTs + 1 + } + else si + + stakeValue = + let gts = + if ps.perStakeGTs == 0 + then mempty + else + Value.assetClassValue + (untag stake.gtClassRef) + (untag ps.perStakeGTs) + in sortValue $ + sst <> minAda + <> gts + + stakeBuilder :: BaseBuilder + stakeBuilder = + foldMap + ( \(si, idx) -> + let so = mkStakeOutputDatum si + in mconcat @BaseBuilder + [ input $ + script stakeValidatorHash + . withValue stakeValue + . withDatum si + . withOutRef (mkStakeRef idx) + , output $ + script stakeValidatorHash + . withValue stakeValue + . withDatum so + ] + ) + $ let withIds = zip stakeInputDatums [0 ..] + in if ps.includeAllStakes + then withIds + else [head withIds] + + signBuilder :: BaseBuilder + signBuilder = + let sos = mkStakeOwners ps + in if ps.signByAllCosigners + then foldMap signedWith sos + else signedWith $ head sos + + builder :: BaseBuilder + builder = + mconcat + [ txId "95ba4015e30aef16a3461ea97a779f814aeea6b8009d99a94add4b8293be737a" + , signBuilder + , timeRange ps.validTimeRange + , input $ + script proposalValidatorHash + . withValue pst + . withDatum proposalInputDatum + . withTxId proposalTxRef + , output $ + script proposalValidatorHash + . withValue (pst <> minAda) + . withDatum proposalOutputDatum + ] + in buildTxInfoUnsafe $ builder <> stakeBuilder + +--- + +mkInTimeTimeRange :: ProposalStatus -> POSIXTimeRange +mkInTimeTimeRange advanceFrom = + case advanceFrom of + -- [S + 1, S + D - 1] + Draft -> + closedBoundedInterval + (proposalStartingTime + 1) + (proposalStartingTime + (def :: ProposalTimingConfig).draftTime - 1) + -- [S + D + V + 1, S + D + V + L - 1] + VotingReady -> + closedBoundedInterval + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + 1 + ) + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + - 1 + ) + -- [S + D + V + L + 1, S + + D + V + L + E - 1] + Locked -> + closedBoundedInterval + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + + 1 + ) + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + + (def :: ProposalTimingConfig).executingTime - 1 + ) + Finished -> error "Cannot advance 'Finished' proposal" + +mkTooLateTimeRange :: ProposalStatus -> POSIXTimeRange +mkTooLateTimeRange advanceFrom = + case advanceFrom of + -- [S + D + 1, S + D + V - 1] + Draft -> + closedBoundedInterval + (proposalStartingTime + (def :: ProposalTimingConfig).draftTime + 1) + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime - 1 + ) + -- [S + D + V + L + 1, S + D + V + L + E -1] + VotingReady -> + closedBoundedInterval + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + + 1 + ) + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + + (def :: ProposalTimingConfig).executingTime + - 1 + ) + -- [S + D + V + L + E + 1, S + D + V + L + E + 100] + Locked -> + closedBoundedInterval + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + + (def :: ProposalTimingConfig).executingTime + + 1 + ) + ( proposalStartingTime + + (def :: ProposalTimingConfig).draftTime + + (def :: ProposalTimingConfig).votingTime + + (def :: ProposalTimingConfig).lockingTime + + (def :: ProposalTimingConfig).executingTime + + 100 + ) + Finished -> error "Cannot advance 'Finished' proposal" + +--- + +getNextState :: ProposalStatus -> ProposalStatus +getNextState = \case + Draft -> VotingReady + VotingReady -> Locked + Locked -> Finished + Finished -> error "Cannot advance 'Finished' proposal" + +--- + +advanceToNextStateInTimeParameters :: Int -> [Parameters] +advanceToNextStateInTimeParameters nCosigners = + map + ( \from -> + let -- Set the vote count of outcome 0 to @def.countingVoting + 1@, + -- meaning that outcome 0 will be the winner. + outcome0WinningVotes = + ProposalVotes $ + updateMap + (\_ -> Just $ untag (def :: ProposalThresholds).execute + 1) + (ResultTag 0) + (coerce emptyVotes) + + votes = case from of + Draft -> emptyVotes + -- With sufficient votes + _ -> outcome0WinningVotes + + includeAllStakes = case from of + Draft -> True + _ -> False + + signByAllCosigners = case from of + Draft -> True + _ -> False + in Parameters + { fromStatus = from + , toStatus = getNextState from + , votes = votes + , includeAllStakes = includeAllStakes + , validTimeRange = mkInTimeTimeRange from + , alterOutputStakes = False + , stakeCount = fromIntegral nCosigners + , signByAllCosigners = signByAllCosigners + , perStakeGTs = + (def :: ProposalThresholds).vote + `div` fromIntegral nCosigners + 1 + } + ) + [Draft, VotingReady, Locked] + +advanceToFailedStateDueToTimeoutParameters :: Int -> [Parameters] +advanceToFailedStateDueToTimeoutParameters nCosigners = + map + ( \from -> + Parameters + { fromStatus = from + , toStatus = Finished + , votes = emptyVotes + , includeAllStakes = False + , validTimeRange = mkTooLateTimeRange from + , alterOutputStakes = False + , stakeCount = fromIntegral nCosigners + , signByAllCosigners = False + , perStakeGTs = 1 + } + ) + [Draft, VotingReady, Locked] + +insufficientVotesParameters :: Parameters +insufficientVotesParameters = + let votes = emptyVotes + from = VotingReady + to = getNextState from + in Parameters + { fromStatus = from + , toStatus = to + , votes = votes + , includeAllStakes = False + , validTimeRange = mkInTimeTimeRange from + , alterOutputStakes = False + , stakeCount = 1 + , signByAllCosigners = True + , perStakeGTs = 20 + } + +insufficientCosignsParameters :: Int -> Parameters +insufficientCosignsParameters nCosigners = + (\ps -> ps {perStakeGTs = 0}) $ + head $ + advanceToNextStateInTimeParameters nCosigners + +advanceFromFinishedParameters :: Parameters +advanceFromFinishedParameters = + Parameters + { fromStatus = Finished + , toStatus = Finished + , votes = emptyVotes + , includeAllStakes = False + , validTimeRange = always + , alterOutputStakes = False + , stakeCount = 1 + , signByAllCosigners = True + , perStakeGTs = 20 + } + +invalidOutputStakeParameters :: Int -> [Parameters] +invalidOutputStakeParameters nCosigners = + (\ps -> ps {alterOutputStakes = True}) + <$> advanceToNextStateInTimeParameters nCosigners + +--- + +mkTestTree :: String -> Parameters -> Bool -> SpecificationTree +mkTestTree name ps isValidForProposalValidator = group name [proposal, stake] + where + txInfo = advance ps + + proposal = + let proposalInputDatum = mkProposalInputDatum ps + in testFunc + isValidForProposalValidator + "propsoal" + (proposalValidator Shared.proposal) + proposalInputDatum + proposalRedeemer + ( ScriptContext + txInfo + proposalScriptPurpose + ) + + stake = + let idx = 0 + stakeInputDatum = mkStakeInputDatums ps !! idx + isValid = not $ ps.alterOutputStakes + in testFunc + isValid + "stake" + (stakeValidator Shared.stake) + stakeInputDatum + stakeRedeemer + ( ScriptContext + txInfo + (mkStakeScriptPurpose idx) + ) diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs new file mode 100644 index 00000000..f04535ab --- /dev/null +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -0,0 +1,344 @@ +module Sample.Proposal.Cosign ( + Parameters (..), + validCosignNParameters, + duplicateCosignersParameters, + statusNotDraftCosignNParameters, + invalidStakeOutputParameters, + mkTestTree, +) where + +import Agora.Proposal ( + ProposalDatum (..), + ProposalId (ProposalId), + ProposalRedeemer (Cosign), + ProposalStatus (..), + ResultTag (ResultTag), + emptyVotesFor, + ) +import Agora.Proposal.Scripts (proposalValidator) +import Agora.Proposal.Time ( + ProposalStartingTime (ProposalStartingTime), + ProposalTimingConfig (draftTime), + ) +import Agora.SafeMoney (GTTag) +import Agora.Stake ( + Stake (gtClassRef), + StakeDatum (StakeDatum, owner), + StakeRedeemer (WitnessStake), + stakedAmount, + ) +import Agora.Stake.Scripts (stakeValidator) +import Data.Coerce (coerce) +import Data.Default (def) +import Data.List (sort) +import Data.Tagged (Tagged, untag) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + output, + script, + signedWith, + timeRange, + txId, + withDatum, + withRefIndex, + withTxId, + withValue, + ) +import PlutusLedgerApi.V1 ( + POSIXTimeRange, + PubKeyHash, + ScriptContext (ScriptContext), + ScriptPurpose (Spending), + TxInfo, + TxOutRef (..), + Value, + ) +import PlutusLedgerApi.V1.Value qualified as Value +import PlutusTx.AssocMap qualified as AssocMap +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Shared ( + minAda, + proposalPolicySymbol, + proposalValidatorHash, + signer, + stake, + stakeAssetClass, + stakeValidatorHash, + ) +import Sample.Shared qualified as Shared +import Test.Specification ( + SpecificationTree, + group, + ) +import Test.Util (closedBoundedInterval, pubKeyHashes, sortValue) + +-- | Parameters for cosigning a proposal. +data Parameters = Parameters + { newCosigners :: [PubKeyHash] + -- ^ New cosigners to be added, and the owners of the generated stakes. + , proposalStatus :: ProposalStatus + -- ^ Current state of the proposal. + , alterOutputStakes :: Bool + -- ^ Whether to generate invalid stake outputs. + -- In particular, the 'stakedAmount' of all the stake datums will be set to zero. + } + +-- | Owner of the creator stake, doesn't really matter in this case. +proposalCreator :: PubKeyHash +proposalCreator = signer + +-- | The amount of GTs every generated stake has, doesn't really matter in this case. +perStakedGTs :: Tagged GTTag Integer +perStakedGTs = 5 + +{- | Create input proposal datum given the parameters. + In particular, 'status' is set to 'proposalStstus'. +-} +mkProposalInputDatum :: Parameters -> ProposalDatum +mkProposalInputDatum ps = + let effects = + AssocMap.fromList + [ (ResultTag 0, AssocMap.empty) + , (ResultTag 1, AssocMap.empty) + ] + in ProposalDatum + { proposalId = ProposalId 0 + , effects = effects + , status = ps.proposalStatus + , cosigners = [proposalCreator] + , thresholds = def + , votes = emptyVotesFor effects + , timingConfig = def + , startingTime = ProposalStartingTime 0 + } + +{- | Create the output proposal datum given the parameters. + The 'newCosigners' is added to the exisiting list of cosigners, note the said list should be sorted in + ascending order. +-} +mkProposalOutputDatum :: Parameters -> ProposalDatum +mkProposalOutputDatum ps = + let inputDatum = mkProposalInputDatum ps + in inputDatum + { cosigners = sort $ inputDatum.cosigners <> ps.newCosigners + } + +-- | Create all the input stakes given the parameters. +mkStakeInputDatums :: Parameters -> [StakeDatum] +mkStakeInputDatums = fmap (\pk -> StakeDatum perStakedGTs pk []) . newCosigners + +-- | Create a 'TxInfo' that tries to cosign a proposal with new cosigners. +cosign :: Parameters -> TxInfo +cosign ps = buildTxInfoUnsafe builder + where + pst = Value.singleton proposalPolicySymbol "" 1 + sst = Value.assetClassValue stakeAssetClass 1 + + --- + + stakeInputDatums :: [StakeDatum] + stakeInputDatums = mkStakeInputDatums ps + + stakeValue :: Value + stakeValue = + sortValue $ + minAda + <> Value.assetClassValue + (untag stake.gtClassRef) + (untag perStakedGTs) + <> sst + + stakeBuilder :: BaseBuilder + stakeBuilder = + foldMap + ( \(stakeDatum, refIdx) -> + let stakeOutputDatum = + if ps.alterOutputStakes + then stakeDatum {stakedAmount = 0} + else stakeDatum + in mconcat @BaseBuilder + [ input $ + script stakeValidatorHash + . withValue stakeValue + . withDatum stakeDatum + . withTxId stakeTxRef + . withRefIndex refIdx + , output $ + script stakeValidatorHash + . withValue stakeValue + . withDatum stakeOutputDatum + , signedWith stakeDatum.owner + ] + ) + $ zip + stakeInputDatums + [2 ..] + + --- + + proposalInputDatum :: ProposalDatum + proposalInputDatum = mkProposalInputDatum ps + + proposalOutputDatum :: ProposalDatum + proposalOutputDatum = mkProposalOutputDatum ps + + proposalBuilder :: BaseBuilder + proposalBuilder = + mconcat + [ input $ + script proposalValidatorHash + . withValue pst + . withDatum proposalInputDatum + . withTxId proposalTxRef + . withRefIndex proposalRefIdx + , output $ + script proposalValidatorHash + . withValue (sortValue (pst <> minAda)) + . withDatum proposalOutputDatum + ] + + validTimeRange :: POSIXTimeRange + validTimeRange = + closedBoundedInterval + (coerce proposalInputDatum.startingTime + 1) + ( coerce proposalInputDatum.startingTime + + proposalInputDatum.timingConfig.draftTime - 1 + ) + + --- + + builder :: BaseBuilder + builder = + mconcat + [ txId "05c67819fc3381a2052b929ab439244b7b5fe3b3bd07f2134055bbbb21bd9e52" + , timeRange validTimeRange + , proposalBuilder + , stakeBuilder + ] + +-- | Reference index of the proposal UTXO. +proposalRefIdx :: Integer +proposalRefIdx = 1 + +-- | Spend the proposal ST. +proposalScriptPurpose :: ScriptPurpose +proposalScriptPurpose = + Spending + ( TxOutRef + proposalTxRef + proposalRefIdx + ) + +-- | Consume the given stake. +mkStakeScriptPurpose :: Int -> ScriptPurpose +mkStakeScriptPurpose idx = + Spending $ + TxOutRef + stakeTxRef + $ proposalRefIdx + 1 + fromIntegral idx + +-- | Create a proposal redeemer which cosigns with the new cosginers. +mkProposalRedeemer :: Parameters -> ProposalRedeemer +mkProposalRedeemer (sort . newCosigners -> cs) = Cosign cs + +-- | Stake redeemer for cosuming all the stakes generated in the module. +stakeRedeemer :: StakeRedeemer +stakeRedeemer = WitnessStake + +--- + +-- | Create a valid parameters that cosign the proposal with a given number of cosigners. +validCosignNParameters :: Int -> Parameters +validCosignNParameters n + | n > 0 = + Parameters + { newCosigners = take n pubKeyHashes + , proposalStatus = Draft + , alterOutputStakes = False + } + | otherwise = error "Number of cosigners should be positive" + +--- + +{- | Parameters that make 'cosign' yield duplicate cosigners. + Invalid for the ptoposal validator, perfectly valid for stake validator. +-} +duplicateCosignersParameters :: Parameters +duplicateCosignersParameters = + Parameters + { newCosigners = [proposalCreator] + , proposalStatus = Draft + , alterOutputStakes = False + } + +--- + +{- | Generate a list of parameters that sets proposal status to something other than 'Draft'. + Invalid for the ptoposal validator, perfectly valid for stake validator. +-} +statusNotDraftCosignNParameters :: Int -> [Parameters] +statusNotDraftCosignNParameters n = + map + ( \st -> + Parameters + { newCosigners = take n pubKeyHashes + , proposalStatus = st + , alterOutputStakes = False + } + ) + [VotingReady, Locked, Finished] + +--- + +{- | Parameters thet change the output stake datums. + Invalid for both proposal validator and stake validator. +-} +invalidStakeOutputParameters :: Parameters +invalidStakeOutputParameters = + (validCosignNParameters 2) + { alterOutputStakes = True + } + +--- + +-- | Create a test tree given the parameters. Both the proposal validator and stake validator will be run. +mkTestTree :: + -- | The name of the test group. + String -> + Parameters -> + -- | Are the parameters valid for the proposal validator? + Bool -> + SpecificationTree +mkTestTree name ps isValid = group name [proposal, stake] + where + txInfo = cosign ps + + proposal = + let proposalInputDatum = mkProposalInputDatum ps + in testFunc + isValid + "propsoal" + (proposalValidator Shared.proposal) + proposalInputDatum + (mkProposalRedeemer ps) + ( ScriptContext + txInfo + proposalScriptPurpose + ) + + stake = + let idx = 0 + stakeInputDatum = mkStakeInputDatums ps !! idx + isValid = not ps.alterOutputStakes + in testFunc + isValid + "stake" + (stakeValidator Shared.stake) + stakeInputDatum + stakeRedeemer + ( ScriptContext + txInfo + (mkStakeScriptPurpose idx) + ) diff --git a/agora-specs/Sample/Proposal/Shared.hs b/agora-specs/Sample/Proposal/Shared.hs index 1a2ee64e..17028ee4 100644 --- a/agora-specs/Sample/Proposal/Shared.hs +++ b/agora-specs/Sample/Proposal/Shared.hs @@ -1,9 +1,39 @@ -module Sample.Proposal.Shared (proposalRef, stakeRef) where +module Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) where -import PlutusLedgerApi.V1 (TxOutRef (..)) +import Plutarch.Api.V1 (PValidator) +import Plutarch.Lift (PUnsafeLiftDecl (..)) +import PlutusLedgerApi.V1 (ScriptContext, ToData, TxId) +import Test.Specification ( + SpecificationTree, + validatorFailsWith, + validatorSucceedsWith, + ) -proposalRef :: TxOutRef -proposalRef = TxOutRef "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" 1 +-- | 'TxId' of all the propsoal inputs in the samples. +proposalTxRef :: TxId +proposalTxRef = "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" -stakeRef :: TxOutRef -stakeRef = TxOutRef "0ca36f3a357bc69579ab2531aecd1e7d3714d993c7820f40b864be15" 0 +-- | 'TxId' of all the stake inputs in the samples. +stakeTxRef :: TxId +stakeTxRef = "0ca36f3a357bc69579ab2531aecd1e7d3714d993c7820f40b864be15" + +-- | Get the test function given whether a test case is valid. +testFunc :: + forall {datum :: PType} {redeemer :: PType}. + ( PUnsafeLiftDecl datum + , PUnsafeLiftDecl redeemer + , ToData (PLifted datum) + , ToData (PLifted redeemer) + ) => + -- | Should the validator pass? + Bool -> + String -> + ClosedTerm PValidator -> + PLifted datum -> + PLifted redeemer -> + ScriptContext -> + SpecificationTree +testFunc isValid = + if isValid + then validatorSucceedsWith + else validatorFailsWith diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index d8ac3964..da8b4e56 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -11,19 +11,6 @@ module Sample.Proposal.UnlockStake ( -------------------------------------------------------------------------------- -import PlutusLedgerApi.V1 ( - DatumHash, - ScriptContext (..), - ScriptPurpose (Spending), - TxInfo (..), - TxOutRef (..), - ValidatorHash, - ) -import PlutusLedgerApi.V1.Value qualified as Value -import PlutusTx.AssocMap qualified as AssocMap - --------------------------------------------------------------------------------- - import Agora.Proposal ( ProposalDatum (..), ProposalId (..), @@ -32,8 +19,36 @@ import Agora.Proposal ( ProposalVotes (..), ResultTag (..), ) +import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime)) import Agora.Stake (ProposalLock (ProposalLock), Stake (..), StakeDatum (..)) +import Control.Monad (join) +import Data.Coerce (coerce) +import Data.Default.Class (Default (def)) +import Data.Tagged (Tagged (..), untag) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + output, + script, + txId, + withDatum, + withRefIndex, + withTxId, + withValue, + ) +import PlutusLedgerApi.V1 ( + DatumHash, + ScriptContext (..), + ScriptPurpose (Spending), + TxInfo (..), + TxOutRef (..), + ValidatorHash, + ) +import PlutusLedgerApi.V1.Value qualified as Value +import PlutusTx.AssocMap qualified as AssocMap +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) import Sample.Shared ( minAda, proposalPolicySymbol, @@ -43,19 +58,9 @@ import Sample.Shared ( stakeAssetClass, stakeValidatorHash, ) -import Test.Util (sortValue, updateMap) - --------------------------------------------------------------------------------- - -import Agora.Proposal.Scripts (proposalValidator) -import Control.Monad (join) -import Data.Coerce (coerce) -import Data.Default.Class (Default (def)) -import Data.Tagged (Tagged (..), untag) -import Plutarch.Context (BaseBuilder, buildTxInfoUnsafe, input, output, script, txId, withDatum, withRefIndex, withTxId, withValue) -import Sample.Proposal.Shared (proposalRef, stakeRef) import Sample.Shared qualified as Shared -import Test.Specification (SpecificationTree, validatorFailsWith, validatorSucceedsWith) +import Test.Specification (SpecificationTree) +import Test.Util (sortValue, updateMap) -------------------------------------------------------------------------------- @@ -223,8 +228,8 @@ unlockStake p = script proposalValidatorHash . withValue pst . withDatum i - . withTxId (txOutRefId proposalRef) - . withRefIndex (txOutRefIdx proposalRef + coerce i.proposalId) + . withTxId proposalTxRef + . withRefIndex (coerce i.proposalId + 2) , output $ script proposalValidatorHash . withValue (sortValue $ pst <> minAda) @@ -249,8 +254,8 @@ unlockStake p = script stakeValidatorHash . withValue stakeValue . withDatum sInDatum - . withTxId (txOutRefId stakeRef) - . withRefIndex (txOutRefIdx stakeRef) + . withTxId stakeTxRef + . withRefIndex 1 , output $ script stakeValidatorHash . withValue stakeValue @@ -271,6 +276,14 @@ mkProposalValidatorTestCase p shouldSucceed = let datum = mkProposalInputDatum p $ ProposalId 0 redeemer = Unlock (ResultTag 0) name = show p - scriptContext = ScriptContext (unlockStake p) (Spending proposalRef) - f = if shouldSucceed then validatorSucceedsWith else validatorFailsWith - in f name (proposalValidator Shared.proposal) datum redeemer scriptContext + scriptContext = + ScriptContext + (unlockStake p) + (Spending (TxOutRef proposalTxRef 2)) + in testFunc + shouldSucceed + name + (proposalValidator Shared.proposal) + datum + redeemer + scriptContext diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs new file mode 100644 index 00000000..f06ac7e7 --- /dev/null +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -0,0 +1,249 @@ +module Sample.Proposal.Vote ( + validVoteParameters, + mkTestTree, +) where + +import Agora.Proposal ( + ProposalDatum (..), + ProposalId (ProposalId), + ProposalRedeemer (Vote), + ProposalStatus (VotingReady), + ProposalVotes (ProposalVotes), + ResultTag (ResultTag), + ) +import Agora.Proposal.Scripts (proposalValidator) +import Agora.Proposal.Time ( + ProposalStartingTime (ProposalStartingTime), + ProposalTimingConfig (draftTime, votingTime), + ) +import Agora.Stake ( + ProposalLock (ProposalLock), + Stake (gtClassRef), + StakeDatum (..), + StakeRedeemer (PermitVote), + ) +import Agora.Stake.Scripts (stakeValidator) +import Data.Default (Default (def)) +import Data.Tagged (Tagged (Tagged), untag) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + output, + script, + signedWith, + timeRange, + txId, + withDatum, + withOutRef, + withValue, + ) +import PlutusLedgerApi.V1 ( + PubKeyHash, + ScriptContext (..), + ScriptPurpose (Spending), + TxInfo, + TxOutRef (TxOutRef), + ) +import PlutusLedgerApi.V1.Value qualified as Value +import PlutusTx.AssocMap qualified as AssocMap +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Shared ( + minAda, + proposalPolicySymbol, + proposalValidatorHash, + signer, + stake, + stakeAssetClass, + stakeValidatorHash, + ) +import Sample.Shared qualified as Shared +import Test.Specification ( + SpecificationTree, + group, + validatorSucceedsWith, + ) +import Test.Util (closedBoundedInterval, sortValue, updateMap) + +proposalRef :: TxOutRef +proposalRef = TxOutRef proposalTxRef 0 + +stakeRef :: TxOutRef +stakeRef = TxOutRef stakeTxRef 1 + +-- | Parameters for creating a voting transaction. +data Parameters = Parameters + { voteFor :: ResultTag + -- ^ The outcome the transaction is voting for. + , voteCount :: Integer + -- ^ The count of votes. + } + +stakeOwner :: PubKeyHash +stakeOwner = signer + +initialVotes :: AssocMap.Map ResultTag Integer +initialVotes = + AssocMap.fromList + [ (ResultTag 0, 42) + , (ResultTag 1, 4242) + ] + +proposalInputDatum :: ProposalDatum +proposalInputDatum = + ProposalDatum + { proposalId = ProposalId 42 + , effects = + AssocMap.fromList + [ (ResultTag 0, AssocMap.empty) + , (ResultTag 1, AssocMap.empty) + ] + , status = VotingReady + , cosigners = [stakeOwner] + , thresholds = def + , votes = ProposalVotes initialVotes + , timingConfig = def + , startingTime = ProposalStartingTime 0 + } + +existingLocks :: [ProposalLock] +existingLocks = + [ ProposalLock (ResultTag 0) (ProposalId 0) + , ProposalLock (ResultTag 2) (ProposalId 1) + ] + +mkStakeInputDatum :: Parameters -> StakeDatum +mkStakeInputDatum params = + StakeDatum + { stakedAmount = Tagged params.voteCount + , owner = stakeOwner + , lockedBy = existingLocks + } + +mkProposalRedeemer :: Parameters -> ProposalRedeemer +mkProposalRedeemer = Vote . voteFor + +mkNewLock :: Parameters -> ProposalLock +mkNewLock ps = ProposalLock ps.voteFor proposalInputDatum.proposalId + +mkStakeRedeemer :: Parameters -> StakeRedeemer +mkStakeRedeemer = PermitVote . mkNewLock + +-- | Create a valid transaction that votes on a propsal, given the parameters. +vote :: Parameters -> TxInfo +vote params = + let pst = Value.singleton proposalPolicySymbol "" 1 + sst = Value.assetClassValue stakeAssetClass 1 + + --- + + stakeInputDatum = mkStakeInputDatum params + + --- + + updatedVotes :: AssocMap.Map ResultTag Integer + updatedVotes = updateMap (Just . (+ params.voteCount)) params.voteFor initialVotes + + --- + + proposalOutputDatum :: ProposalDatum + proposalOutputDatum = + proposalInputDatum + { votes = ProposalVotes updatedVotes + } + + --- + + -- Off-chain code should do exactly like this: prepend new lock toStatus the list. + updatedLocks :: [ProposalLock] + updatedLocks = mkNewLock params : existingLocks + + --- + + stakeOutputDatum :: StakeDatum + stakeOutputDatum = + stakeInputDatum + { lockedBy = updatedLocks + } + + --- + + validTimeRange = + closedBoundedInterval + ((def :: ProposalTimingConfig).draftTime + 1) + ((def :: ProposalTimingConfig).votingTime - 1) + + --- + + stakeValue = + sortValue $ + sst + <> Value.assetClassValue (untag stake.gtClassRef) params.voteCount + <> minAda + + builder :: BaseBuilder + builder = + mconcat + [ txId "827598fb2d69a896bbd9e645bb14c307df907f422b39eecbe4d6329bc30b428c" + , signedWith stakeOwner + , timeRange validTimeRange + , input $ + script proposalValidatorHash + . withValue pst + . withDatum proposalInputDatum + . withOutRef proposalRef + , input $ + script stakeValidatorHash + . withValue stakeValue + . withDatum stakeInputDatum + . withOutRef stakeRef + , output $ + script proposalValidatorHash + . withValue pst + . withDatum proposalOutputDatum + , output $ + script stakeValidatorHash + . withValue stakeValue + . withDatum stakeOutputDatum + ] + in buildTxInfoUnsafe builder + +--- + +validVoteParameters :: Parameters +validVoteParameters = + Parameters + { voteFor = ResultTag 0 + , voteCount = 27 + } + +--- + +mkTestTree :: String -> Parameters -> Bool -> SpecificationTree +mkTestTree name ps isValid = group name [proposal, stake] + where + txInfo = vote ps + + proposal = + testFunc + isValid + "propsoal" + (proposalValidator Shared.proposal) + proposalInputDatum + (mkProposalRedeemer ps) + ( ScriptContext + txInfo + (Spending proposalRef) + ) + + stake = + let stakeInputDatum = mkStakeInputDatum ps + in validatorSucceedsWith + "stake" + (stakeValidator Shared.stake) + stakeInputDatum + (mkStakeRedeemer ps) + ( ScriptContext + txInfo + (Spending stakeRef) + ) diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index 41234a1b..a3c54df6 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -1,5 +1,3 @@ -{-# LANGUAGE QuasiQuotes #-} - {- | Module : Spec.Proposal Maintainer : emi@haskell.fyi @@ -11,45 +9,19 @@ module Spec.Proposal (specs) where import Agora.Proposal ( Proposal (..), - ProposalDatum (..), - ProposalId (ProposalId), - ProposalRedeemer (..), ProposalStatus (..), - ProposalThresholds (..), - ProposalVotes (ProposalVotes), - ResultTag (ResultTag), - cosigners, - effects, - emptyVotesFor, - proposalId, - status, - thresholds, - votes, - ) -import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) -import Agora.Proposal.Time ( - ProposalStartingTime (ProposalStartingTime), - ) -import Agora.Stake ( - ProposalLock (ProposalLock), - StakeDatum (StakeDatum), - StakeRedeemer (PermitVote, WitnessStake), ) -import Agora.Stake.Scripts (stakeValidator) -import Data.Default.Class (Default (def)) -import Data.Tagged (Tagged (Tagged), untag) -import PlutusLedgerApi.V1 (ScriptContext (..), ScriptPurpose (..)) -import PlutusTx.AssocMap qualified as AssocMap +import Agora.Proposal.Scripts (proposalPolicy) import Sample.Proposal qualified as Proposal +import Sample.Proposal.Advance qualified as Advance +import Sample.Proposal.Cosign qualified as Cosign import Sample.Proposal.UnlockStake qualified as UnlockStake -import Sample.Shared (signer, signer2) -import Sample.Shared qualified as Shared (proposal, stake) +import Sample.Proposal.Vote qualified as Vote +import Sample.Shared qualified as Shared (proposal) import Test.Specification ( SpecificationTree, group, policySucceedsWith, - validatorFailsWith, - validatorSucceedsWith, ) -- | Stake specs. @@ -67,279 +39,133 @@ specs = "validator" [ group "cosignature" - [ validatorSucceedsWith - "proposal" - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 0 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - , status = Draft - , cosigners = [signer] - , thresholds = def - , votes = - emptyVotesFor $ - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - (Cosign [signer2]) - (ScriptContext (Proposal.cosignProposal [signer2]) (Spending Proposal.proposalRef)) - , validatorSucceedsWith - "stake" - (stakeValidator Shared.stake) - (StakeDatum (Tagged 50_000_000) signer2 []) - WitnessStake - (ScriptContext (Proposal.cosignProposal [signer2]) (Spending Proposal.stakeRef)) - ] + $ let cosignerCases = [1, 5, 10] + + mkLegalGroup nCosigners = + Cosign.mkTestTree + ("with " <> show nCosigners <> " cosigners") + (Cosign.validCosignNParameters nCosigners) + True + legalGroup = + group "legal" $ + map mkLegalGroup cosignerCases + + mkIllegalStatusNotDraftGroup nCosigners = + group ("with " <> show nCosigners <> " cosigners") $ + map + ( \ps -> + Cosign.mkTestTree + ("status: " <> show ps.proposalStatus) + ps + False + ) + (Cosign.statusNotDraftCosignNParameters nCosigners) + illegalStatusNotDraftGroup = + group "proposal status not Draft" $ + map mkIllegalStatusNotDraftGroup cosignerCases + + illegalGroup = + group + "illegal" + [ Cosign.mkTestTree + "duplicate cosigners" + Cosign.duplicateCosignersParameters + False + , Cosign.mkTestTree + "altered output stake" + Cosign.invalidStakeOutputParameters + False + , illegalStatusNotDraftGroup + ] + in [legalGroup, illegalGroup] , group "voting" - [ validatorSucceedsWith - "proposal" - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 42 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - , status = VotingReady - , cosigners = [signer] - , thresholds = def - , votes = - ProposalVotes - ( AssocMap.fromList - [ (ResultTag 0, 42) - , (ResultTag 1, 4242) - ] - ) - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - (Vote (ResultTag 0)) - ( ScriptContext - ( Proposal.voteOnProposal - Proposal.VotingParameters - { Proposal.voteFor = ResultTag 0 - , Proposal.voteCount = 27 - } - ) - (Spending Proposal.proposalRef) - ) - , validatorSucceedsWith - "stake" - (stakeValidator Shared.stake) - ( StakeDatum - (Tagged 27) - signer - [ ProposalLock (ResultTag 0) (ProposalId 0) - , ProposalLock (ResultTag 2) (ProposalId 1) - ] - ) - (PermitVote $ ProposalLock (ResultTag 0) (ProposalId 42)) - ( ScriptContext - ( Proposal.voteOnProposal - Proposal.VotingParameters - { Proposal.voteFor = ResultTag 0 - , Proposal.voteCount = 27 - } - ) - (Spending Proposal.stakeRef) - ) + [ Vote.mkTestTree "legal" Vote.validVoteParameters True + -- TODO: add negative test cases ] - , group - "advancing" - [ group "successfully advance to next state" $ - map - ( \(name, initialState) -> - validatorSucceedsWith - name - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 0 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - , status = initialState - , cosigners = [signer] - , thresholds = def - , votes = - ProposalVotes - ( AssocMap.fromList - [ - ( ResultTag 0 - , case initialState of - Draft -> 0 - _ -> untag (def :: ProposalThresholds).execute + 1 - ) - , (ResultTag 1, 0) - ] - ) - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - AdvanceProposal - ( ScriptContext - ( Proposal.advanceProposalSuccess - Proposal.TransitionParameters - { Proposal.initialProposalStatus = initialState - , Proposal.proposalStartingTime = ProposalStartingTime 0 - } - ) - (Spending Proposal.proposalRef) - ) - ) - [ ("Draft -> VotringReady", Draft) - , ("VotingReady -> Locked", VotingReady) - , ("Locked -> Finished", Locked) - ] - , group "successfully advance to failed state: timeout" $ - map - ( \(name, initialState) -> - validatorSucceedsWith - name - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 0 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - , status = initialState - , cosigners = [signer] - , thresholds = def - , votes = - ProposalVotes - ( AssocMap.fromList - [ - ( ResultTag 0 - , case initialState of - Draft -> 0 - _ -> untag (def :: ProposalThresholds).vote + 1 - ) - , (ResultTag 1, 0) - ] - ) - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - AdvanceProposal - ( ScriptContext - ( Proposal.advanceProposalFailureTimeout - Proposal.TransitionParameters - { Proposal.initialProposalStatus = initialState - , Proposal.proposalStartingTime = ProposalStartingTime 0 - } - ) - (Spending Proposal.proposalRef) - ) - ) - [ ("Draft -> Finished", Draft) - , ("VotingReady -> Finished", VotingReady) - , ("Locked -> Finished", Locked) - ] - , validatorFailsWith - "illegal: insufficient votes" - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 0 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) + , group "advancing" $ + let mkFromDraft nCosigners = + let name = "with " <> show nCosigners <> " cosigner(s)" + + legalGroup = + group + "legal" + [ Advance.mkTestTree + "to next state" + ( head $ + Advance.advanceToNextStateInTimeParameters + nCosigners + ) + True + , Advance.mkTestTree + "to failed state" + ( head $ + Advance.advanceToFailedStateDueToTimeoutParameters + nCosigners + ) + True ] - , status = VotingReady - , cosigners = [signer] - , thresholds = def - , votes = - ProposalVotes - ( AssocMap.fromList - [ (ResultTag 0, 1) - , (ResultTag 1, 0) - ] - ) - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - AdvanceProposal - ( ScriptContext - Proposal.advanceProposalInsufficientVotes - (Spending Proposal.proposalRef) - ) - , validatorFailsWith - "illegal: initial state is Finished" - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 0 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) + + illegalGroup = + group + "illegal" + [ Advance.mkTestTree + "insufficient cosigns" + (Advance.insufficientCosignsParameters nCosigners) + False + , Advance.mkTestTree + "invalid stake output" + (head $ Advance.invalidOutputStakeParameters nCosigners) + False ] - , status = Finished - , cosigners = [signer] - , thresholds = def - , votes = - ProposalVotes - ( AssocMap.fromList - [ (ResultTag 0, untag (def :: ProposalThresholds).vote + 1) - , (ResultTag 1, 0) - ] + in group name [legalGroup, illegalGroup] + + draftGroup = group "from draft" $ map mkFromDraft [1, 5, 10] + + legalGroup = + group + "legal" + [ group "advance to next state" $ + map + ( \ps -> + let name = "from: " <> show ps.fromStatus + in Advance.mkTestTree name ps True ) - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - AdvanceProposal - ( ScriptContext - Proposal.advanceFinishedProposal - (Spending Proposal.proposalRef) - ) - , validatorFailsWith - "illegal: with stake input" - (proposalValidator Shared.proposal) - ( ProposalDatum - { proposalId = ProposalId 0 - , effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - , status = VotingReady - , cosigners = [signer] - , thresholds = def - , votes = - ProposalVotes - ( AssocMap.fromList - [ (ResultTag 0, 0) - , (ResultTag 1, 0) - ] + (tail $ Advance.advanceToNextStateInTimeParameters 1) + , group "advance to failed state" $ + map + ( \ps -> + let name = "from: " <> show ps.fromStatus + in Advance.mkTestTree name ps True ) - , timingConfig = def - , startingTime = ProposalStartingTime 0 - } - ) - AdvanceProposal - ( ScriptContext - Proposal.advanceProposalWithInvalidOutputStake - (Spending Proposal.proposalRef) - ) - ] + (tail $ Advance.advanceToFailedStateDueToTimeoutParameters 1) + ] + + illegalGroup = + group + "illegal" + [ Advance.mkTestTree + "insufficient votes" + Advance.insufficientVotesParameters + False + , Advance.mkTestTree + "initial state is Finished" + Advance.advanceFromFinishedParameters + False + , group + "invalid stake output" + $ do + nStake <- [1, 5] + ps <- tail $ Advance.invalidOutputStakeParameters nStake + + let name = + "from " <> show ps.fromStatus <> "with " + <> show nStake + <> " stakes" + + pure $ Advance.mkTestTree name ps False + ] + in [draftGroup, legalGroup, illegalGroup] , group "unlocking" $ do proposalCount <- [1, 42] diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index 78600a55..b610dd73 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -13,22 +13,24 @@ module Test.Util ( updateMap, sortMap, sortValue, + blake2b_224, + pubKeyHashes, + userCredentials, + scriptCredentials, ) where -------------------------------------------------------------------------------- -import Prelude - --------------------------------------------------------------------------------- - import Codec.Serialise (serialise) -import Data.ByteString.Lazy qualified as ByteString.Lazy - --------------------------------------------------------------------------------- - +import Crypto.Hash qualified as Crypto import Data.Bifunctor (second) +import Data.ByteArray qualified as BA +import Data.ByteString qualified as BS +import Data.ByteString.Char8 qualified as C +import Data.ByteString.Lazy qualified as ByteString.Lazy import Data.List (sortOn) import Plutarch.Crypto (pblake2b_256) +import PlutusLedgerApi.V1 (Credential (PubKeyCredential, ScriptCredential), PubKeyHash (..), ValidatorHash (ValidatorHash)) import PlutusLedgerApi.V1.Interval qualified as PlutusTx import PlutusLedgerApi.V1.Scripts (Datum (Datum), DatumHash (DatumHash)) import PlutusLedgerApi.V1.Value (Value (..)) @@ -36,6 +38,7 @@ import PlutusTx.AssocMap qualified as AssocMap import PlutusTx.Builtins qualified as PlutusTx import PlutusTx.IsData qualified as PlutusTx import PlutusTx.Ord qualified as PlutusTx +import Prelude -------------------------------------------------------------------------------- @@ -106,3 +109,25 @@ sortValue = . fmap (second sortMap) . AssocMap.toList . getValue + +-------------------------------------------------------------------------------- + +-- | Compute the hash of a given byte string using blake2b_224 algorithm. +blake2b_224 :: BS.ByteString -> BS.ByteString +blake2b_224 = BS.pack . BA.unpack . Crypto.hashWith Crypto.Blake2b_224 + +-- | An infinite list of blake2b_224 hashes. +blake2b_224Hashes :: [BS.ByteString] +blake2b_224Hashes = blake2b_224 . C.pack . show @Integer <$> [0 ..] + +-- | An infinite list of *valid* 'PubKeyHash'. +pubKeyHashes :: [PubKeyHash] +pubKeyHashes = PubKeyHash . PlutusTx.toBuiltin <$> blake2b_224Hashes + +-- | An infinite list of *valid* user credentials. +userCredentials :: [Credential] +userCredentials = PubKeyCredential <$> pubKeyHashes + +-- | An infinite list of *valid* script credentials. +scriptCredentials :: [Credential] +scriptCredentials = ScriptCredential . ValidatorHash . PlutusTx.toBuiltin <$> blake2b_224Hashes diff --git a/agora.cabal b/agora.cabal index d20cf603..08f9e995 100644 --- a/agora.cabal +++ b/agora.cabal @@ -189,8 +189,11 @@ library agora-specs Sample.Effect.TreasuryWithdrawal Sample.Governor Sample.Proposal + Sample.Proposal.Advance + Sample.Proposal.Cosign Sample.Proposal.Shared Sample.Proposal.UnlockStake + Sample.Proposal.Vote Sample.Shared Sample.Stake Sample.Treasury diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index f9478176..7138d262 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -313,13 +313,13 @@ stakeValidator stake = -- -- Validation strategy I have tried/considered so far: -- 1. Check that the number of input stakes equals to the number of output stakes, and verify - -- that every input stake has an output stake with the exact same value and datum hash. - -- However this approach has a fatal vulnerability: let's say we have two totally identical stakes, - -- a malicious user can comsume these two stakes and remove GTs from one of them. + -- that there's an output stake with the exact same value and datum hash as the stake being + -- validated , However this approach has a fatal vulnerability: let's say we have two totally + -- identical stakes, a malicious user can comsume these two stakes and remove GTs from one of them. -- 2. Perform the same checks as the last approch does, while also checking that every output stake is -- valid(stakedAmount == actual value). However this requires that all the output stake datum are -- included in the transaction, and we have to find and go through them one by one to access the - -- 'stakedAmount' fields, meaning that computationally this approach is *very* expensive. + -- 'stakedAmount' fields, meaning that computationally this approach is *very* expensive. -- 3. The one implemented below. Find all the continuous input/output, sort them by 'datumHash', and -- ensure that the two sorted lists are equal. let ownInputs = diff --git a/bench.csv b/bench.csv index a596e6fc..1a8900e6 100644 --- a/bench.csv +++ b/bench.csv @@ -8,24 +8,57 @@ Agora/Stake/policy/stakeCreation,50939580,148729,2387 Agora/Stake/validator/stakeDepositWithdraw deposit,180222751,492217,5003 Agora/Stake/validator/stakeDepositWithdraw withdraw,180222751,492217,4991 Agora/Proposal/policy/proposalCreation,23140177,69194,1515 -Agora/Proposal/validator/cosignature/proposal,240482868,674626,8525 -Agora/Proposal/validator/cosignature/stake,136781411,336612,5528 -Agora/Proposal/validator/voting/proposal,243946100,678901,8443 -Agora/Proposal/validator/voting/stake,128972262,348186,5489 -Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady,219342631,620576,8350 -Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked,247748475,699343,8359 -Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished,236509366,666512,8359 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished,214287939,609855,8352 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished,233681921,660502,8353 -Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished,234812899,662906,8353 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,237484909,663370,8471 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,123296365,319226,5470 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,675336848,1882805,11101 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,554091553,1461634,7980 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1336993992,3667352,14389 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1102063894,2914419,11117 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,123296365,319226,5470 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,123296365,319226,5470 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,123296365,319226,5470 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,123296365,319226,5470 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,554091553,1461634,7980 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,554091553,1461634,7980 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,554091553,1461634,7980 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1102063894,2914419,11117 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1102063894,2914419,11117 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1102063894,2914419,11117 +Agora/Proposal/validator/voting/legal/propsoal,247594094,689025,8443 +Agora/Proposal/validator/voting/legal/stake,141390725,374830,5489 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222990625,630700,8426 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,123296365,319226,5467 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217935933,619979,8428 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,123296365,319226,5469 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117222929,305504,5397 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,600833052,1725797,11249 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,526604275,1381680,8170 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,240305281,682043,8789 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,123296365,319226,5710 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,445454241,1167344,7819 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1164574757,3363392,14778 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1154814568,3068129,11548 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,268266966,759623,9242 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,123296365,319226,6012 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1024215053,2732615,10845 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,251396469,709467,8435 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,123296365,319226,5474 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,240157360,676636,8435 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,123296365,319226,5474 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,237329915,670626,8429 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,123296365,319226,5470 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,238460893,673030,8429 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,123296365,319226,5470 +Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,123296365,319226,5470 +Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,123296365,319226,5462 "Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",245987595,688711,8403 "Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",215263333,612711,8405 "Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",212560614,604622,8407 "Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",212560614,604622,8407 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1775652167,5199490,29510 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1448293766,4317963,29694 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1340653392,3978430,29678 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1340653392,3978430,29678 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1775652167,5199490,29511 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1448293766,4317963,29695 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1340653392,3978430,29679 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1340653392,3978430,29679 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 @@ -33,5 +66,5 @@ Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,80 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51007235,144191,2034 Agora/Governor/validator/proposal creation,309689999,834675,9064 -Agora/Governor/validator/GATs minting,418560845,1137908,9187 +Agora/Governor/validator/GATs minting,421016677,1141838,9187 Agora/Governor/validator/mutate governor state,88986020,248491,8662 From f00cc6247609be1238ea6c6ffaa87cd1341223df Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 6 Jul 2022 21:55:39 +0800 Subject: [PATCH 27/78] apply Emily's suggestions --- agora/Agora/Proposal/Scripts.hs | 591 ++++++++++++++++---------------- agora/Agora/Stake/Scripts.hs | 17 +- bench.csv | 108 +++--- 3 files changed, 361 insertions(+), 355 deletions(-) diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index d31646a8..85ec3f1b 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -42,6 +42,7 @@ import Agora.Utils ( import Plutarch.Api.V1 ( PDatumHash, PMintingPolicy, + PPubKeyHash, PScriptContext (PScriptContext), PScriptPurpose (PMinting, PSpending), PTxInfo (PTxInfo), @@ -305,198 +306,272 @@ proposalValidator proposal = ---------------------------------------------------------------------------- - let acceptMultipleStakes = pmatch proposalRedeemer $ \case - PCosign _ -> pconstant True - PAdvanceProposal _ -> - currentStatus #== pconstant Draft - _ -> pconstant False - - pure $ - popaque $ - pif - acceptMultipleStakes - ( unTermCont $ do - -- The following code ensures that all the stake datums are not - -- changed. - -- - -- TODO: This is quite inefficient (O(nlogn)) but for now we don't - -- have a nice way to check this. In plutus v2 we'll have map of - -- (Script -> Redeemer) in ScriptContext, which should be the - -- straight up solution. - let sortDatumHashes = phoistAcyclic $ pmsortBy # pltAsData - - sortedStakeInputDatumHashes = - sortDatumHashes # stakeInputDatumHashes - - sortedStakeOutputDatumHashes = - sortDatumHashes # stakeOutputDatumHashes - - pguardC "All stake datum are unchanged" $ - plistEquals - # sortedStakeInputDatumHashes - # sortedStakeOutputDatumHashes - - PPair totalStakedAmount stakeOwners <- - pmatchC $ - pfoldl - # plam - ( \l dh -> unTermCont $ do - let stake = - pfromData $ - pfromJust - #$ ptryFindDatum - @(PAsData PStakeDatum) - # pfromData dh - # txInfoF.datums - - stakeF <- pletFieldsC @'["stakedAmount", "owner"] stake - - PPair amount owners <- pmatchC l - - let newAmount = amount + punsafeCoerce (pfromData stakeF.stakedAmount) - updatedOwners = pcons # stakeF.owner # owners - - pure $ pcon $ PPair newAmount updatedOwners - ) - # pcon (PPair (0 :: Term _ PInteger) (pnil @PBuiltinList)) - # stakeInputDatumHashes - - sortedStakeOwners <- pletC $ pmsortBy # pltAsData # stakeOwners - - redeemer <- pmatchC proposalRedeemer - - case redeemer of - PCosign r -> do - pguardC "Should be in draft state" $ - currentStatus #== pconstant Draft - - newSigs <- pletC $ pfield @"newCosigners" # r - - pguardC "Signed by all new cosigners" $ - pall # signedBy # newSigs - - updatedSigs <- - pletC $ - pmergeBy # pltAsData - # newSigs - # proposalF.cosigners - - pguardC "Cosigners are unique" $ - pisUniq' # updatedSigs - - pguardC "All new cosigners are witnessed by their Stake datums" $ - plistEquals # sortedStakeOwners # newSigs - - let expectedDatum = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalF.status - .& #cosigners .= pdata updatedSigs - .& #thresholds .= proposalF.thresholds - .& #votes .= proposalF.votes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) + withMultipleStakes' :: + Term + _ + ( ( PInteger + :--> PBuiltinList (PAsData PPubKeyHash) + :--> PUnit + ) + :--> PUnit + ) <- + pletC $ + plam $ \validationLogic -> unTermCont $ do + -- The following code ensures that all the stake datums are not + -- changed. + -- + -- TODO: This is quite inefficient (O(nlogn)) but for now we don't + -- have a nice way to check this. In plutus v2 we'll have map of + -- (Script -> Redeemer) in ScriptContext, which should be the + -- straight up solution. + let sortDatumHashes = phoistAcyclic $ pmsortBy # pltAsData + + sortedStakeInputDatumHashes = + sortDatumHashes # stakeInputDatumHashes + + sortedStakeOutputDatumHashes = + sortDatumHashes # stakeOutputDatumHashes + + pguardC "All stake datum are unchanged" $ + plistEquals + # sortedStakeInputDatumHashes + # sortedStakeOutputDatumHashes + + PPair totalStakedAmount stakeOwners <- + pmatchC $ + pfoldl + # plam + ( \l dh -> unTermCont $ do + let stake = + pfromData $ + pfromJust + #$ ptryFindDatum + @(PAsData PStakeDatum) + # pfromData dh + # txInfoF.datums + + stakeF <- pletFieldsC @'["stakedAmount", "owner"] stake + + PPair amount owners <- pmatchC l + + let newAmount = amount + punsafeCoerce (pfromData stakeF.stakedAmount) + updatedOwners = pcons # stakeF.owner # owners + + pure $ pcon $ PPair newAmount updatedOwners + ) + # pcon (PPair (0 :: Term _ PInteger) (pnil @PBuiltinList)) + # stakeInputDatumHashes + + sortedStakeOwners <- pletC $ pmsortBy # pltAsData # stakeOwners + + pure $ validationLogic # totalStakedAmount # sortedStakeOwners + + withSingleStake' :: + Term + _ + ( ( PStakeDatum :--> PStakeDatum :--> PBool :--> PUnit + ) + :--> PUnit + ) <- pletC $ + plam $ \validationLogic -> unTermCont $ do + pguardC "Can only deal with one stake" $ + stakeInputNum #== 1 - pguardC "Signatures are correctly added to cosignature list" $ - proposalOut #== expectedDatum + stakeInputHash <- pletC $ pfromData $ phead # stakeInputDatumHashes + stakeOutputHash <- pletC $ pfromData $ phead # stakeOutputDatumHashes - pure $ pconstant () + stakeIn :: Term _ PStakeDatum <- + pletC $ + pfromData $ + pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums - ------------------------------------------------------------------ + stakeOut :: Term _ PStakeDatum <- + pletC $ + pfromData $ + pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums - PAdvanceProposal _ -> do - inDraftPeriod <- - pletC $ - isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + stakeUnchanged <- pletC $ stakeInputHash #== stakeOutputHash - pure $ - pif - inDraftPeriod - ( unTermCont $ do - pguardC "More cosigns than minimum amount" $ - punsafeCoerce (pfromData thresholdsF.vote) #< totalStakedAmount + pure $ validationLogic # stakeIn # stakeOut # stakeUnchanged - pguardC "All new cosigners are witnessed by their Stake datums" $ - plistEquals # sortedStakeOwners # proposalF.cosigners + let withMultipleStakes val = + withMultipleStakes' #$ plam $ + \totalStakedAmount + sortedStakeOwner -> + unTermCont $ + val totalStakedAmount sortedStakeOwner - -- 'Draft' -> 'VotingReady' - pguardC "Proposal status set to VotingReady" $ - proposalOutStatus #== pconstant VotingReady + withSingleStake val = + withSingleStake' #$ plam $ \stakeIn stakeOut stakeUnchange -> unTermCont $ do + stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn - pure $ pconstant () - ) - ( unTermCont $ do - pguardC "Advance to failed state" $ proposalOutStatus #== pconstant Finished + val stakeInF stakeOut stakeUnchange - pure $ pconstant () - ) - - ------------------------------------------------------------------ + pure $ + popaque $ + pmatch proposalRedeemer $ \case + PCosign r -> withMultipleStakes $ \_ sortedStakeOwners -> do + pguardC "Should be in draft state" $ + currentStatus #== pconstant Draft + + newSigs <- pletC $ pfield @"newCosigners" # r + + pguardC "Signed by all new cosigners" $ + pall # signedBy # newSigs + + updatedSigs <- + pletC $ + pmergeBy # pltAsData + # newSigs + # proposalF.cosigners + + pguardC "Cosigners are unique" $ + pisUniq' # updatedSigs + + pguardC "All new cosigners are witnessed by their Stake datums" $ + plistEquals # sortedStakeOwners # newSigs + + let expectedDatum = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalF.status + .& #cosigners .= pdata updatedSigs + .& #thresholds .= proposalF.thresholds + .& #votes .= proposalF.votes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) + + pguardC "Signatures are correctly added to cosignature list" $ + proposalOut #== expectedDatum + + pure $ pconstant () + + ---------------------------------------------------------------------- + + PVote r -> withSingleStake $ \stakeInF stakeOut _ -> do + pguardC "Input proposal must be in VotingReady state" $ + currentStatus #== pconstant VotingReady + + pguardC "Proposal time should be wthin the voting period" $ + isVotingPeriod # proposalF.timingConfig + # proposalF.startingTime + # currentTime + + -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). + PProposalVotes voteMap <- pmatchC proposalF.votes + voteFor <- pletC $ pfromData $ pfield @"resultTag" # r + + pguardC "Vote option should be valid" $ + pisJust #$ plookup # voteFor # voteMap + + -- Ensure that no lock with the current proposal id has been put on the stake. + pguardC "Same stake shouldn't vote on the same proposal twice" $ + pnot #$ pany + # plam + ( \((pfield @"proposalTag" #) . pfromData -> pid) -> + pid #== proposalF.proposalId + ) + # pfromData stakeInF.lockedBy + + let -- The amount of new votes should be the 'stakedAmount'. + -- Update the vote counter of the proposal, and leave other stuff as is. + expectedNewVotes = pmatch (pfromData proposalF.votes) $ \(PProposalVotes m) -> + pcon $ + PProposalVotes $ + pupdate + # plam + ( \votes -> unTermCont $ do + PDiscrete v <- pmatchC stakeInF.stakedAmount + pure $ pcon $ PJust $ votes + (pextract # v) + ) + # voteFor + # m + expectedProposalOut = + mkRecordConstr + PProposalDatum + ( #proposalId .= proposalF.proposalId + .& #effects .= proposalF.effects + .& #status .= proposalF.status + .& #cosigners .= proposalF.cosigners + .& #thresholds .= proposalF.thresholds + .& #votes .= pdata expectedNewVotes + .& #timingConfig .= proposalF.timingConfig + .& #startingTime .= proposalF.startingTime + ) + + pguardC "Output proposal should be valid" $ proposalOut #== expectedProposalOut + + -- We validate the output stake datum here as well: We need the vote option + -- to create a valid 'ProposalLock', however the vote option is encoded + -- in the proposal redeemer, which is invisible for the stake validator. + + let newProposalLock = + mkRecordConstr + PProposalLock + ( #vote .= pdata voteFor + .& #proposalTag .= proposalF.proposalId + ) + -- Prepend the new lock to existing locks + expectedProposalLocks = + pcons + # pdata newProposalLock + # pfromData stakeInF.lockedBy + expectedStakeOut = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeInF.stakedAmount + .& #owner .= stakeInF.owner + .& #lockedBy .= pdata expectedProposalLocks + ) + + pguardC "Output stake should be locked by the proposal" $ expectedStakeOut #== stakeOut + + pure $ pconstant () + + ---------------------------------------------------------------------- + + PUnlock r -> withSingleStake $ \stakeInF stakeOut _ -> do + -- At draft stage, the votes should be empty. + pguardC "Shouldn't retract votes from a draft proposal" $ + pnot #$ currentStatus #== pconstant Draft + + -- This is the vote option we're retracting from. + retractFrom <- pletC $ pfield @"resultTag" # r + + -- Determine if the input stake is actually locked by this proposal. + stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId + + pguardC "Stake input relevant" $ + pmatch stakeUsage $ \case + PDidNothing -> + ptraceIfFalse "Stake should be relevant" $ + pconstant False + PCreated -> + ptraceIfFalse "Removing creator's locks means status is Finished" $ + currentStatus #== pconstant Finished + PVotedFor rt -> + ptraceIfFalse "Result tag should match the one given in the redeemer" $ + rt #== retractFrom + + -- The count of removing votes is equal to the 'stakeAmount' of input stake. + retractCount <- + pletC $ + pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v + + -- The votes can only change when the proposal still allows voting. + let shouldUpdateVotes = + currentStatus #== pconstant VotingReady + #&& pnot # (pcon PCreated #== stakeUsage) + + pguardC "Proposal output correct" $ + pif + shouldUpdateVotes + ( let -- Remove votes and leave other parts of the proposal as it. + expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes - _ -> pure $ pconstant () - ) - ( unTermCont $ do - pguardC "Can only deal with one stake" $ - stakeInputNum #== 1 - - let stakeInputHash = pfromData $ phead # stakeInputDatumHashes - stakeOutputHash = pfromData $ phead # stakeOutputDatumHashes - - stakeIn :: Term _ PStakeDatum <- - pletC $ - pfromData $ - pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums - stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn - - stakeOut :: Term _ PStakeDatum <- - pletC $ - pfromData $ - pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums - - redeemer <- pmatchC proposalRedeemer - - case redeemer of - PVote r -> do - pguardC "Input proposal must be in VotingReady state" $ - currentStatus #== pconstant VotingReady - - pguardC "Proposal time should be wthin the voting period" $ - isVotingPeriod # proposalF.timingConfig - # proposalF.startingTime - # currentTime - - -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). - PProposalVotes voteMap <- pmatchC proposalF.votes - voteFor <- pletC $ pfromData $ pfield @"resultTag" # r - - pguardC "Vote option should be valid" $ - pisJust #$ plookup # voteFor # voteMap - - -- Ensure that no lock with the current proposal id has been put on the stake. - pguardC "Same stake shouldn't vote on the same proposal twice" $ - pnot #$ pany - # plam - ( \((pfield @"proposalTag" #) . pfromData -> pid) -> - pid #== proposalF.proposalId - ) - # pfromData stakeInF.lockedBy - - let -- The amount of new votes should be the 'stakedAmount'. - -- Update the vote counter of the proposal, and leave other stuff as is. - expectedNewVotes = pmatch (pfromData proposalF.votes) $ \(PProposalVotes m) -> - pcon $ - PProposalVotes $ - pupdate - # plam - ( \votes -> unTermCont $ do - PDiscrete v <- pmatchC stakeInF.stakedAmount - pure $ pcon $ PJust $ votes + (pextract # v) - ) - # voteFor - # m expectedProposalOut = mkRecordConstr PProposalDatum @@ -505,122 +580,60 @@ proposalValidator proposal = .& #status .= proposalF.status .& #cosigners .= proposalF.cosigners .& #thresholds .= proposalF.thresholds - .& #votes .= pdata expectedNewVotes + .& #votes .= pdata expectedVotes .& #timingConfig .= proposalF.timingConfig .& #startingTime .= proposalF.startingTime ) + in ptraceIfFalse "Update votes" $ + expectedProposalOut #== proposalOut + ) + -- No change to the proposal is allowed. + $ ptraceIfFalse "Proposal unchanged" proposalUnchanged - pguardC "Output proposal should be valid" $ proposalOut #== expectedProposalOut + -- At last, we ensure that all locks belong to this proposal will be removed. + stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut - -- We validate the output stake datum here as well: We need the vote option - -- to create a valid 'ProposalLock', however the vote option is encoded - -- in the proposal redeemer, which is invisible for the stake validator. + let templateStakeOut = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeInF.stakedAmount + .& #owner .= stakeInF.owner + .& #lockedBy .= stakeOutputLocks + ) - let newProposalLock = - mkRecordConstr - PProposalLock - ( #vote .= pdata voteFor - .& #proposalTag .= proposalF.proposalId - ) - -- Prepend the new lock to existing locks - expectedProposalLocks = - pcons - # pdata newProposalLock - # pfromData stakeInF.lockedBy - expectedStakeOut = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInF.stakedAmount - .& #owner .= stakeInF.owner - .& #lockedBy .= pdata expectedProposalLocks - ) + pguardC "Only locks updated in the output stake" $ + templateStakeOut #== stakeOut - pguardC "Output stake should be locked by the proposal" $ expectedStakeOut #== stakeOut - - pure $ pconstant () - - ------------------------------------------------------------------ - PUnlock r -> do - -- At draft stage, the votes should be empty. - pguardC "Shouldn't retract votes from a draft proposal" $ - pnot #$ currentStatus #== pconstant Draft - - -- This is the vote option we're retracting from. - retractFrom <- pletC $ pfield @"resultTag" # r - - -- Determine if the input stake is actually locked by this proposal. - stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId - - pguardC "Stake input relevant" $ - pmatch stakeUsage $ \case - PDidNothing -> - ptraceIfFalse "Stake should be relevant" $ - pconstant False - PCreated -> - ptraceIfFalse "Removing creator's locks means status is Finished" $ - currentStatus #== pconstant Finished - PVotedFor rt -> - ptraceIfFalse "Result tag should match the one given in the redeemer" $ - rt #== retractFrom - - -- The count of removing votes is equal to the 'stakeAmount' of input stake. - retractCount <- - pletC $ - pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v - - -- The votes can only change when the proposal still allows voting. - let shouldUpdateVotes = - currentStatus #== pconstant VotingReady - #&& pnot # (pcon PCreated #== stakeUsage) - - pguardC "Proposal output correct" $ - pif - shouldUpdateVotes - ( let -- Remove votes and leave other parts of the proposal as it. - expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes - - expectedProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalF.proposalId - .& #effects .= proposalF.effects - .& #status .= proposalF.status - .& #cosigners .= proposalF.cosigners - .& #thresholds .= proposalF.thresholds - .& #votes .= pdata expectedVotes - .& #timingConfig .= proposalF.timingConfig - .& #startingTime .= proposalF.startingTime - ) - in ptraceIfFalse "Update votes" $ - expectedProposalOut #== proposalOut - ) - -- No change to the proposal is allowed. - $ ptraceIfFalse "Proposal unchanged" proposalUnchanged - - -- At last, we ensure that all locks belong to this proposal will be removed. - stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut - - let templateStakeOut = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInF.stakedAmount - .& #owner .= stakeInF.owner - .& #lockedBy .= stakeOutputLocks - ) + pguardC "All relevant locks removed from the stake" $ + pgetStakeUsage # pfromData stakeOutputLocks + # proposalF.proposalId #== pcon PDidNothing + + pure $ pconstant () - pguardC "Only locks updated in the output stake" $ - templateStakeOut #== stakeOut + ---------------------------------------------------------------------- + + PAdvanceProposal _ -> + let fromDraft = withMultipleStakes $ \totalStakedAmount sortedStakeOwners -> + pmatchC (isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime) >>= \case + PTrue -> do + pguardC "More cosigns than minimum amount" $ + punsafeCoerce (pfromData thresholdsF.vote) #< totalStakedAmount - pguardC "All relevant locks removed from the stake" $ - pgetStakeUsage # pfromData stakeOutputLocks - # proposalF.proposalId #== pcon PDidNothing + pguardC "All new cosigners are witnessed by their Stake datums" $ + plistEquals # sortedStakeOwners # proposalF.cosigners - pure $ pconstant () + -- 'Draft' -> 'VotingReady' + pguardC "Proposal status set to VotingReady" $ + proposalOutStatus #== pconstant VotingReady - ------------------------------------------------------------------ - PAdvanceProposal _ -> do - pguardC "Stake should not change" $ - stakeInputHash #== stakeOutputHash + pure $ pconstant () + PFalse -> do + pguardC "Advance to failed state" $ proposalOutStatus #== pconstant Finished + + pure $ pconstant () + + fromOther = withSingleStake $ \_ _ stakeUnchanged -> do + pguardC "Stake should not change" stakeUnchanged pguardC "Only status changes in the output proposal" @@ -655,6 +668,7 @@ proposalValidator proposal = -- TODO: Should check that the GST is not moved -- if the proposal is in 'Locked' state. + pure $ pconstant () toNextState = pmatchEnum proposalStatus $ \case @@ -685,5 +699,4 @@ proposalValidator proposal = toNextState -- Too late: failed proposal, status set to 'Finished'. toFailedState - _ -> pure $ pconstant () - ) + in pif (currentStatus #== pconstant Draft) fromDraft fromOther diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 7138d262..f84ec331 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -25,6 +25,7 @@ import Agora.Utils ( mustFindDatum', pvalidatorHashToTokenName, ) +import Data.Function (on) import Data.Tagged (Tagged (..), untag) import Plutarch.Api.V1 ( AmountGuarantees (Positive), @@ -303,10 +304,10 @@ stakeValidator stake = # pfromData txInfoF.outputs let witnessStake = unTermCont $ do - pguardC "Either owner signs the transaction or propsoal token moved" $ + pguardC "Either owner signs the transaction or proposal token moved" $ ownerSignsTransaction #|| proposalTokenMoved - -- FIXME: refactor this with reference input, once it's supported by plutarch. + -- FIXME: remove this once we have reference input. -- -- Our goal here is to allow multiple input stakes, and also ensure that every the input stakes has a -- corresponding output stake, which carries the same value and the same datum as the input stake. @@ -335,15 +336,7 @@ stakeValidator stake = # pfromData txInfoF.inputs sortTxOuts :: Term _ (PBuiltinList (PAsData PTxOut) :--> PBuiltinList (PAsData PTxOut)) - sortTxOuts = - plam - ( pmsortBy - # plam - ( \((getDatumHash #) -> dhX) - ((getDatumHash #) -> dhY) -> dhX #< dhY - ) - # - ) + sortTxOuts = phoistAcyclic $ plam (pmsortBy # plam ((#<) `on` (getDatumHash #)) #) where getDatumHash :: Term _ (PAsData PTxOut :--> PDatumHash) getDatumHash = phoistAcyclic $ plam ((pfromDJust #) . pfromData . (pfield @"datumHash" #)) @@ -464,7 +457,7 @@ stakeValidator stake = newStakedAmount <- pletC $ oldStakedAmount + delta - pguardC "New staked amount shoudl be greater than or equal to 0" $ + pguardC "New staked amount should be greater than or equal to 0" $ zero #<= newStakedAmount let expectedDatum = diff --git a/bench.csv b/bench.csv index 1a8900e6..7e8faf7e 100644 --- a/bench.csv +++ b/bench.csv @@ -5,60 +5,60 @@ Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,87839169,243032,8561 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609 Agora/Stake/policy/stakeCreation,50939580,148729,2387 -Agora/Stake/validator/stakeDepositWithdraw deposit,180222751,492217,5003 -Agora/Stake/validator/stakeDepositWithdraw withdraw,180222751,492217,4991 +Agora/Stake/validator/stakeDepositWithdraw deposit,150745141,416137,4995 +Agora/Stake/validator/stakeDepositWithdraw withdraw,150745141,416137,4983 Agora/Proposal/policy/proposalCreation,23140177,69194,1515 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,237484909,663370,8471 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,123296365,319226,5470 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,675336848,1882805,11101 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,554091553,1461634,7980 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1336993992,3667352,14389 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1102063894,2914419,11117 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,123296365,319226,5470 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,123296365,319226,5470 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,123296365,319226,5470 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,123296365,319226,5470 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,554091553,1461634,7980 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,554091553,1461634,7980 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,554091553,1461634,7980 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1102063894,2914419,11117 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1102063894,2914419,11117 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1102063894,2914419,11117 -Agora/Proposal/validator/voting/legal/propsoal,247594094,689025,8443 -Agora/Proposal/validator/voting/legal/stake,141390725,374830,5489 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222990625,630700,8426 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,123296365,319226,5467 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217935933,619979,8428 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,123296365,319226,5469 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117222929,305504,5397 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,600833052,1725797,11249 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,526604275,1381680,8170 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,240305281,682043,8789 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,123296365,319226,5710 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,445454241,1167344,7819 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1164574757,3363392,14778 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1154814568,3068129,11548 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,268266966,759623,9242 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,123296365,319226,6012 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1024215053,2732615,10845 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,251396469,709467,8435 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,123296365,319226,5474 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,240157360,676636,8435 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,123296365,319226,5474 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,237329915,670626,8429 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,123296365,319226,5470 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,238460893,673030,8429 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,123296365,319226,5470 -Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,123296365,319226,5470 -Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,123296365,319226,5462 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",245987595,688711,8403 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",215263333,612711,8405 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",212560614,604622,8407 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",212560614,604622,8407 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1775652167,5199490,29511 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1448293766,4317963,29695 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1340653392,3978430,29679 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1340653392,3978430,29679 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235408912,657765,8097 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,125665131,316762,5462 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,680441047,1897008,10727 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,576106975,1490610,7972 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1351073436,3706315,14015 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1148637636,2982695,11109 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,125665131,316762,5462 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,125665131,316762,5462 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,125665131,316762,5462 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,125665131,316762,5462 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,576106975,1490610,7972 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,576106975,1490610,7972 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,576106975,1490610,7972 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1148637636,2982695,11109 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1148637636,2982695,11109 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1148637636,2982695,11109 +Agora/Proposal/validator/voting/legal/propsoal,246896882,688919,8069 +Agora/Proposal/validator/voting/legal/stake,141234659,368136,5481 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222376736,631090,8052 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,125665131,316762,5459 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217322044,620369,8054 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,125665131,316762,5461 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,118020743,304972,5389 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,614587307,1766683,10875 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,548619697,1410656,8162 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239691392,682433,8415 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,125665131,316762,5702 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446252055,1166812,7811 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1196289192,3454898,14404 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1201388310,3136405,11540 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267653077,760013,8868 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,125665131,316762,6004 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1025012867,2732083,10837 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,250229153,709227,8061 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,125665131,316762,5466 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,238990044,676396,8061 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,125665131,316762,5466 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,236162599,670386,8055 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,125665131,316762,5462 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,237293577,672790,8055 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,125665131,316762,5462 +Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,125665131,316762,5462 +Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,125665131,316762,5454 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",245855872,689807,8029 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",215131610,613807,8031 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",212428891,605718,8033 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",212428891,605718,8033 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1775520444,5200586,29137 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1448162043,4319059,29321 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1340521669,3979526,29305 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1340521669,3979526,29305 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 @@ -66,5 +66,5 @@ Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,80 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51007235,144191,2034 Agora/Governor/validator/proposal creation,309689999,834675,9064 -Agora/Governor/validator/GATs minting,421016677,1141838,9187 +Agora/Governor/validator/GATs minting,418560845,1137908,9187 Agora/Governor/validator/mutate governor state,88986020,248491,8662 From 96a50419d114e85a93668382ba3a0539011fee30 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 8 Jul 2022 20:37:14 +0800 Subject: [PATCH 28/78] implement new stake locking mechanism --- agora/Agora/Governor.hs | 3 + agora/Agora/Governor/Scripts.hs | 34 ++- agora/Agora/Proposal.hs | 15 +- agora/Agora/Proposal/Scripts.hs | 71 +++--- agora/Agora/Stake.hs | 375 +++++++++++++++++++++++--------- agora/Agora/Stake/Scripts.hs | 62 +++--- 6 files changed, 359 insertions(+), 201 deletions(-) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 6a6771c8..4c093fe1 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -73,6 +73,8 @@ data GovernorDatum = GovernorDatum -- Will get copied over upon the creation of proposals. , createProposalTimeRangeMaxWidth :: MaxTimeRangeWidth -- ^ The maximum valid duration of a transaction that creats a proposal. + , maximumProposalsPerStake :: Integer + -- ^ The maximum number of *alive* proposals which were careated by a stake. } deriving stock (Show, GHC.Generic) @@ -149,6 +151,7 @@ newtype PGovernorDatum (s :: S) = PGovernorDatum , "nextProposalId" ':= PProposalId , "proposalTimings" ':= PProposalTimingConfig , "createProposalTimeRangeMaxWidth" ':= PMaxTimeRangeWidth + , "maximumProposalsPerStake" ':= PInteger ] ) } diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 2b5533e4..dc7a72be 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -46,8 +46,6 @@ import Agora.Governor ( ) import Agora.Proposal ( PProposalDatum (..), - PProposalId (..), - PResultTag, Proposal (..), ProposalStatus (Draft, Finished, Locked), pemptyVotesFor, @@ -65,6 +63,7 @@ import Agora.Stake ( PProposalLock (..), PStakeDatum (..), Stake (..), + pnumCreatedProposals, ) import Agora.Stake.Scripts ( stakePolicy, @@ -108,7 +107,6 @@ import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFin import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Extra.IsData (pmatchEnumFromData) import Plutarch.Extra.Map ( - pkeys, plookup, plookup', ) @@ -300,6 +298,7 @@ governorValidator gov = , "nextProposalId" , "proposalTimings" , "createProposalTimeRangeMaxWidth" + , "maximumProposalsPerStake" ] oldGovernorDatum @@ -341,6 +340,8 @@ governorValidator gov = .& #proposalTimings .= oldGovernorDatumF.proposalTimings .& #createProposalTimeRangeMaxWidth .= oldGovernorDatumF.createProposalTimeRangeMaxWidth + .& #maximumProposalsPerStake + .= oldGovernorDatumF.maximumProposalsPerStake ) pguardC "Unexpected governor state datum" $ newGovernorDatum #== expectedNewDatum @@ -377,6 +378,10 @@ governorValidator gov = stakeInputDatumF <- pletFieldsC @["stakedAmount", "owner", "lockedBy"] stakeInputDatum + pguardC "Didn't created too many proposals" $ + pnumCreatedProposals # stakeInputDatumF.lockedBy + #< oldGovernorDatumF.maximumProposalsPerStake + pguardC "Required amount of stake GTs should be presented" $ stakeInputDatumF.stakedAmount #== (pgtValueOf # stakeInputF.value) @@ -479,25 +484,14 @@ governorValidator gov = mustBePJust # "Stake output not found" #$ ptryFindDatum # stakeOutputDatumHash # txInfoF.datums -- The stake should be locked by the newly created proposal. - - let possibleVoteResults = pkeys #$ pto $ pfromData proposalOutputDatum.votes - - mkProposalLock :: Term _ (PProposalId :--> PAsData PResultTag :--> PAsData PProposalLock) - mkProposalLock = - phoistAcyclic $ - plam - ( \pid rt' -> - pdata $ - mkRecordConstr - PProposalLock - ( #vote .= rt' .& #proposalTag .= pdata pid - ) - ) + let newLock = + mkRecordConstr + PCreated + ( #created .= oldGovernorDatumF.nextProposalId + ) -- Append new locks to existing locks - expectedProposalLocks = - pconcat # stakeInputDatumF.lockedBy - #$ pmap # (mkProposalLock # proposalOutputDatum.proposalId) # possibleVoteResults + expectedProposalLocks = pcons # pdata newLock # stakeInputDatumF.lockedBy expectedStakeOutputDatum = pdata $ diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 922c3acc..95b2a5da 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -68,6 +68,7 @@ import Plutarch.Lift ( PUnsafeLiftDecl (..), ) import Plutarch.SafeMoney (PDiscrete) +import Plutarch.Show (PShow (..)) import PlutusLedgerApi.V1 (DatumHash, PubKeyHash, ValidatorHash) import PlutusLedgerApi.V1.Value (AssetClass) import PlutusTx qualified @@ -328,7 +329,7 @@ data ProposalRedeemer -- This list should be sorted in ascending order. Cosign [PubKeyHash] | -- | Allow unlocking one or more stakes with votes towards particular 'ResultTag'. - Unlock ResultTag + Unlock | -- | Advance the proposal, performing the required checks for whether that is legal. -- -- These are roughly the checks for each possible transition: @@ -426,6 +427,11 @@ deriving via instance PTryFrom PData (PAsData PResultTag) +-- | @since 0.2.0 +instance PShow PResultTag where + pshow' :: Bool -> Term s PResultTag -> Term s PString + pshow' _ x = pshow @PInteger $ pto x + {- | Plutarch-level version of 'PProposalId'. @since 0.1.0 @@ -458,6 +464,11 @@ deriving via instance (PConstantDecl ProposalId) +-- | @since 0.2.0 +instance PShow PProposalId where + pshow' :: Bool -> Term s PProposalId -> Term s PString + pshow' _ x = pshow @PInteger $ pto x + {- | Plutarch-level version of 'ProposalStatus'. @since 0.1.0 @@ -665,7 +676,7 @@ deriving via (DerivePConstantViaDataList ProposalDatum PProposalDatum) instance data PProposalRedeemer (s :: S) = PVote (Term s (PDataRecord '["resultTag" ':= PResultTag])) | PCosign (Term s (PDataRecord '["newCosigners" ':= PBuiltinList (PAsData PPubKeyHash)])) - | PUnlock (Term s (PDataRecord '["resultTag" ':= PResultTag])) + | PUnlock (Term s (PDataRecord '[])) | PAdvanceProposal (Term s (PDataRecord '[])) deriving stock ( -- | @since 0.1.0 diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 85ec3f1b..495c0edd 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -29,8 +29,12 @@ import Agora.Proposal.Time ( import Agora.Stake ( PProposalLock (..), PStakeDatum (..), - PStakeUsage (..), - pgetStakeUsage, + pextractVoteOption, + pgetStakeRole, + pisCreator, + pisIrrelevant, + pisPureCreator, + pisVoter, ) import Agora.Utils ( getMintingPolicySymbol, @@ -469,12 +473,7 @@ proposalValidator proposal = -- Ensure that no lock with the current proposal id has been put on the stake. pguardC "Same stake shouldn't vote on the same proposal twice" $ - pnot #$ pany - # plam - ( \((pfield @"proposalTag" #) . pfromData -> pid) -> - pid #== proposalF.proposalId - ) - # pfromData stakeInF.lockedBy + pnot #$ pisVoter #$ pgetStakeRole # proposalF.proposalId # pfromData stakeInF.lockedBy let -- The amount of new votes should be the 'stakedAmount'. -- Update the vote counter of the proposal, and leave other stuff as is. @@ -510,9 +509,9 @@ proposalValidator proposal = let newProposalLock = mkRecordConstr - PProposalLock - ( #vote .= pdata voteFor - .& #proposalTag .= proposalF.proposalId + PVoted + ( #votedOn .= proposalF.proposalId + .& #votedFor .= pdata voteFor ) -- Prepend the new lock to existing locks expectedProposalLocks = @@ -533,30 +532,16 @@ proposalValidator proposal = ---------------------------------------------------------------------- - PUnlock r -> withSingleStake $ \stakeInF stakeOut _ -> do + PUnlock _ -> withSingleStake $ \stakeInF stakeOut _ -> do -- At draft stage, the votes should be empty. pguardC "Shouldn't retract votes from a draft proposal" $ pnot #$ currentStatus #== pconstant Draft - -- This is the vote option we're retracting from. - retractFrom <- pletC $ pfield @"resultTag" # r - - -- Determine if the input stake is actually locked by this proposal. - stakeUsage <- pletC $ pgetStakeUsage # stakeInF.lockedBy # proposalF.proposalId - - pguardC "Stake input relevant" $ - pmatch stakeUsage $ \case - PDidNothing -> - ptraceIfFalse "Stake should be relevant" $ - pconstant False - PCreated -> - ptraceIfFalse "Removing creator's locks means status is Finished" $ - currentStatus #== pconstant Finished - PVotedFor rt -> - ptraceIfFalse "Result tag should match the one given in the redeemer" $ - rt #== retractFrom - - -- The count of removing votes is equal to the 'stakeAmount' of input stake. + stakeRole <- pletC $ pgetStakeRole # proposalF.proposalId # stakeInF.lockedBy + + pguardC "Stake input should be relevant" $ + pnot #$ pisIrrelevant # stakeRole + retractCount <- pletC $ pmatch stakeInF.stakedAmount $ \(PDiscrete v) -> pextract # v @@ -564,13 +549,28 @@ proposalValidator proposal = -- The votes can only change when the proposal still allows voting. let shouldUpdateVotes = currentStatus #== pconstant VotingReady - #&& pnot # (pcon PCreated #== stakeUsage) + #&& pnot # (pisPureCreator # stakeRole) + + allowRemovingCreatorLock = + currentStatus #== pconstant Finished + + isCreator = pisCreator # stakeRole + + validateOutputLocks = plam $ \locks -> + plet + ( pgetStakeRole # proposalF.proposalId # locks + ) + $ \newStakeRole -> + pif + (isCreator #&& pnot # allowRemovingCreatorLock) + (pisPureCreator # newStakeRole) + (pisIrrelevant # newStakeRole) pguardC "Proposal output correct" $ pif shouldUpdateVotes ( let -- Remove votes and leave other parts of the proposal as it. - expectedVotes = pretractVotes # retractFrom # retractCount # proposalF.votes + expectedVotes = pretractVotes # (pextractVoteOption # stakeRole) # retractCount # proposalF.votes expectedProposalOut = mkRecordConstr @@ -598,15 +598,14 @@ proposalValidator proposal = PStakeDatum ( #stakedAmount .= stakeInF.stakedAmount .& #owner .= stakeInF.owner - .& #lockedBy .= stakeOutputLocks + .& #lockedBy .= pdata stakeOutputLocks ) pguardC "Only locks updated in the output stake" $ templateStakeOut #== stakeOut pguardC "All relevant locks removed from the stake" $ - pgetStakeUsage # pfromData stakeOutputLocks - # proposalF.proposalId #== pcon PDidNothing + validateOutputLocks # stakeOutputLocks pure $ pconstant () diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index b5f5e168..329ace5e 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -18,11 +18,17 @@ module Agora.Stake ( PStakeDatum (..), PStakeRedeemer (..), PProposalLock (..), - PStakeUsage (..), + PStakeRole (..), -- * Utility functions - stakeLocked, - pgetStakeUsage, + pstakeLocked, + pnumCreatedProposals, + pextractVoteOption, + pgetStakeRole, + pisVoter, + pisCreator, + pisPureCreator, + pisIrrelevant, ) where import Agora.Plutarch.Orphans () @@ -43,14 +49,15 @@ import Plutarch.Extra.IsData ( DerivePConstantViaDataList (..), ProductIsData (ProductIsData), ) -import Plutarch.Extra.List (pmapMaybe, pnotNull) +import Plutarch.Extra.List (pnotNull) import Plutarch.Extra.Other (DerivePNewtype' (..)) -import Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.SafeMoney (PDiscrete) +import Plutarch.Show (PShow (..)) import PlutusLedgerApi.V1 (PubKeyHash) import PlutusLedgerApi.V1.Value (AssetClass) import PlutusTx qualified +import Prelude ((+)) import Prelude hiding (Num (..)) -------------------------------------------------------------------------------- @@ -69,8 +76,7 @@ data Stake = Stake GHC.Generic ) -{- | A lock placed on a Stake datum in order to prevent - depositing and withdrawing when votes are in place. +{- | Locks that are stored in the stake datums for various purposes. NOTE: Due to retracting votes always being possible, this lock will only lock with contention on the proposal. @@ -97,30 +103,47 @@ data Stake = Stake @since 0.1.0 -} -data ProposalLock = ProposalLock - { vote :: ResultTag - -- ^ What was voted on. This allows retracting votes to - -- undo their vote. - , proposalId :: ProposalId - -- ^ Identifies the proposal. See 'ProposalId' for further - -- comments on its significance. - } +data ProposalLock + = -- | The stake was used to create a proposal. + -- + -- This kind of lock is placed upon the creation of a proposal, in order + -- to limit creation of proposals per stake. + -- + -- See also: https://github.com/Liqwid-Labs/agora/issues/68 + -- + -- @since 0.2.0 + Created + { craeted :: ProposalId + -- ^ The identifier of the proposal. + } + | -- | The stake was used to vote on a proposal. + -- + -- This kind of lock is placed while voting on a propsoal, in order to + -- prevent depositing and withdrawing when votes are in place. + -- + -- @since 0.2.0 + Voted + { votedOn :: ProposalId + -- ^ The identifier of the proposal. + , votedFor :: ResultTag + -- ^ The option which was voted on. This allows votes to be retracted. + } deriving stock ( -- | @since 0.1.0 Show , -- | @since 0.1.0 GHC.Generic ) - deriving anyclass (Generic) - deriving + deriving anyclass ( -- | @since 0.1.0 - PlutusTx.ToData - , -- | @since 0.1.0 - PlutusTx.FromData - , -- | @since 0.1.0 - PlutusTx.UnsafeFromData + Generic ) - via (ProductIsData ProposalLock) + +PlutusTx.makeIsDataIndexed + ''ProposalLock + [ ('Created, 0) + , ('Voted, 1) + ] {- | Haskell-level redeemer for Stake scripts. @@ -138,12 +161,12 @@ data StakeRedeemer -- This needs to be done in sync with casting a vote, otherwise -- it's possible for a lock to be permanently placed on the stake, -- and then the funds are lost. - PermitVote ProposalLock + PermitVote | -- | Retract a vote, removing it from the 'lockedBy' field. See 'ProposalLock'. -- This action checks for permission of the 'Agora.Proposal.Proposal'. Finished proposals are -- always allowed to have votes retracted and won't affect the Proposal datum, -- allowing 'Stake's to be unlocked. - RetractVotes [ProposalLock] + RetractVotes | -- | The owner can consume stake if nothing is changed about it. -- If the proposal token moves, this is equivalent to the owner consuming it. WitnessStake @@ -165,7 +188,7 @@ PlutusTx.makeIsDataIndexed data StakeDatum = StakeDatum { stakedAmount :: Tagged GTTag Integer -- ^ Tracks the amount of governance token staked in the datum. - -- This also acts as the voting weight for 'Agora.Proposal.Proposal's. + -- This also acts as the voting weight for 'Agora.Proposal.Proposal's. , owner :: PubKeyHash -- ^ The hash of the public key this stake belongs to. -- @@ -173,7 +196,7 @@ data StakeDatum = StakeDatum -- https://github.com/Liqwid-Labs/agora/issues/45 , lockedBy :: [ProposalLock] -- ^ The current proposals locking this stake. This field must be empty - -- for the stake to be usable for deposits and withdrawals. + -- for the stake to be usable for deposits and withdrawals. } deriving stock (Show, GHC.Generic) deriving anyclass (Generic) @@ -227,13 +250,20 @@ newtype PStakeDatum (s :: S) = PStakeDatum via (DerivePNewtype' PStakeDatum) -- | @since 0.1.0 -instance Plutarch.Lift.PUnsafeLiftDecl PStakeDatum where type PLifted PStakeDatum = StakeDatum +instance Plutarch.Lift.PUnsafeLiftDecl PStakeDatum where + type PLifted PStakeDatum = StakeDatum -- | @since 0.1.0 -deriving via (DerivePConstantViaDataList StakeDatum PStakeDatum) instance (Plutarch.Lift.PConstantDecl StakeDatum) +deriving via + (DerivePConstantViaDataList StakeDatum PStakeDatum) + instance + (Plutarch.Lift.PConstantDecl StakeDatum) -- | @since 0.1.0 -deriving via PAsData (DerivePNewtype' PStakeDatum) instance PTryFrom PData (PAsData PStakeDatum) +deriving via + PAsData (DerivePNewtype' PStakeDatum) + instance + PTryFrom PData (PAsData PStakeDatum) {- | Plutarch-level redeemer for Stake scripts. @@ -244,8 +274,8 @@ data PStakeRedeemer (s :: S) PDepositWithdraw (Term s (PDataRecord '["delta" ':= PDiscrete GTTag])) | -- | Destroy a stake, retrieving its LQ, the minimum ADA and any other assets. PDestroy (Term s (PDataRecord '[])) - | PPermitVote (Term s (PDataRecord '["lock" ':= PProposalLock])) - | PRetractVotes (Term s (PDataRecord '["locks" ':= PBuiltinList (PAsData PProposalLock)])) + | PPermitVote (Term s (PDataRecord '[])) + | PRetractVotes (Term s (PDataRecord '[])) | PWitnessStake (Term s (PDataRecord '[])) deriving stock ( -- | @since 0.1.0 @@ -267,118 +297,251 @@ data PStakeRedeemer (s :: S) ) via PIsDataReprInstances PStakeRedeemer +-- | @since 0.1.0 deriving via PAsData (PIsDataReprInstances PStakeRedeemer) instance PTryFrom PData (PAsData PStakeRedeemer) -instance Plutarch.Lift.PUnsafeLiftDecl PStakeRedeemer where type PLifted PStakeRedeemer = StakeRedeemer -deriving via (DerivePConstantViaData StakeRedeemer PStakeRedeemer) instance (Plutarch.Lift.PConstantDecl StakeRedeemer) +-- | @since 0.1.0 +instance Plutarch.Lift.PUnsafeLiftDecl PStakeRedeemer where + type PLifted PStakeRedeemer = StakeRedeemer + +-- | @since 0.1.0 +deriving via + (DerivePConstantViaData StakeRedeemer PStakeRedeemer) + instance + (Plutarch.Lift.PConstantDecl StakeRedeemer) {- | Plutarch-level version of 'ProposalLock'. - @since 0.1.0 + @since 0.2.0 -} -newtype PProposalLock (s :: S) = PProposalLock - { getProposalLock :: - Term - s - ( PDataRecord - '[ "vote" ':= PResultTag - , "proposalTag" ':= PProposalId - ] - ) - } - deriving stock (GHC.Generic) - deriving anyclass (Generic) - deriving anyclass (PIsDataRepr) +data PProposalLock (s :: S) + = PCreated (Term s (PDataRecord '["created" ':= PProposalId])) + | PVoted + ( Term + s + ( PDataRecord + '[ "votedOn" ':= PProposalId + , "votedFor" ':= PResultTag + ] + ) + ) + deriving stock + ( -- | @since 0.1.0 + GHC.Generic + ) + deriving anyclass + ( -- | @since 0.1.0 + Generic + , -- | @since 0.1.0 + HasDatatypeInfo + ) + deriving anyclass + ( -- | @since 0.1.0 + PIsDataRepr + ) deriving - (PlutusType, PIsData, PDataFields, PEq) - via (DerivePNewtype' PProposalLock) + ( -- | @since 0.1.0 + PlutusType + , -- | @since 0.1.0 + PIsData + , -- | @since 0.1.0 + PEq + ) + via (PIsDataReprInstances PProposalLock) +-- | @since 0.1.0 deriving via - PAsData (DerivePNewtype' PProposalLock) + PAsData (PIsDataReprInstances PProposalLock) instance PTryFrom PData (PAsData PProposalLock) -instance Plutarch.Lift.PUnsafeLiftDecl PProposalLock where type PLifted PProposalLock = ProposalLock -deriving via (DerivePConstantViaDataList ProposalLock PProposalLock) instance (Plutarch.Lift.PConstantDecl ProposalLock) +-- | @since 0.1.0 +instance Plutarch.Lift.PUnsafeLiftDecl PProposalLock where + type PLifted PProposalLock = ProposalLock + +-- | @since 0.1.0 +deriving via + (DerivePConstantViaData ProposalLock PProposalLock) + instance + (Plutarch.Lift.PConstantDecl ProposalLock) + +-- | @since 0.2.0 +instance PShow PProposalLock where + pshow' :: Bool -> Term s PProposalLock -> Term s PString + pshow' True _ = "(..)" + pshow' False lock = pmatch lock $ \case + PCreated ((pfield @"created" #) -> pid) -> "Created " <> pshow pid + PVoted x -> pletFields @'["votedOn", "votedFor"] x $ \xF -> + "Voted on " <> pshow xF.votedOn <> " for " <> pshow xF.votedFor -------------------------------------------------------------------------------- {- | Check whether a Stake is locked. If it is locked, various actions are unavailable. - @since 0.1.0 + @since 0.2.0 -} -stakeLocked :: forall (s :: S). Term s (PStakeDatum :--> PBool) -stakeLocked = phoistAcyclic $ +pstakeLocked :: forall (s :: S). Term s (PStakeDatum :--> PBool) +pstakeLocked = phoistAcyclic $ plam $ \stakeDatum -> let locks :: Term _ (PBuiltinList (PAsData PProposalLock)) locks = pfield @"lockedBy" # stakeDatum in pnotNull # locks -{- | Represent the usage of a stake on a particular proposal. - A stake can be used to either create or vote on a proposal. +{- | Get the number of *alive* proposals that were created by the given stake. - @since 0.1.0 + @since 0.2.0 -} -data PStakeUsage (s :: S) - = PVotedFor (Term s PResultTag) - | PCreated - | PDidNothing +pnumCreatedProposals :: Term s (PBuiltinList (PAsData PProposalLock) :--> PInteger) +pnumCreatedProposals = + phoistAcyclic $ + plam $ \l -> + pfoldl + # phoistAcyclic + ( plam + ( \c (pfromData -> lock) -> + c + + pmatch + lock + ( \case + PCreated _ -> 1 + _ -> 0 + ) + ) + ) + # 0 + # l + +{- | The role of a stake for a particular proposal. Scott-encoded. + + @since 0.2.0 +-} +data PStakeRole (s :: S) + = -- | The stake was used to vote on the proposal. + PVoter + (Term s PResultTag) + -- ^ The option which was voted for. + | -- | The stake was used to create the propsoal. + PCreator + | -- | The stake was used to both create and vote on the proposal. + PBoth + (Term s PResultTag) + -- ^ The option which was voted for. + | -- | The stake has nothing to do with the given propsoal. + PIrrelevant deriving stock - ( -- | @since 0.1.0 + ( -- | @since 0.2.0 GHC.Generic ) deriving anyclass - ( -- | @since 0.1.0 + ( -- | @since 0.2.0 Generic - , -- | @since 0.1.0 + , -- | @since 0.2.0 PlutusType - , -- | @since 0.1.0 + , -- | @since 0.2.0 HasDatatypeInfo - , -- | @since 0.1.0 + , -- | @since 0.2.0 PEq ) -{- | / O(n) /.Return the usage of a stake on a particular proposal, - given the 'lockedBy' field of a stake and the target proposal. +{- | Retutn true if the stake was used to voted on the proposal. - @since 0.1.0 + @since 0.2.0 -} -pgetStakeUsage :: - Term - _ - ( PBuiltinList (PAsData PProposalLock) - :--> PProposalId - :--> PStakeUsage - ) -pgetStakeUsage = phoistAcyclic $ - plam $ \locks pid -> - let -- All locks from the given proposal. - filteredLocks = - pmapMaybe - # plam - ( \lock'@(pfromData -> lock) -> unTermCont $ do - lockF <- pletFieldsC @'["proposalTag"] lock - - pure $ +pisVoter :: Term s (PStakeRole :--> PBool) +pisVoter = phoistAcyclic $ + plam $ \sr -> pmatch sr $ \case + PVoter _ -> pconstant True + PBoth _ -> pconstant True + _ -> pconstant False + +{- | Retutn true if the stake was used to create the proposal. + + @since 0.2.0 +-} +pisCreator :: Term s (PStakeRole :--> PBool) +pisCreator = phoistAcyclic $ + plam $ \sr -> pmatch sr $ \case + PCreator -> pconstant True + PBoth _ -> pconstant True + _ -> pconstant False + +{- | Retutn true if the stake was used to create the proposal, but not vote on + the proposal. + + @since 0.2.0 +-} +pisPureCreator :: Term s (PStakeRole :--> PBool) +pisPureCreator = phoistAcyclic $ + plam $ \sr -> pmatch sr $ \case + PCreator -> pconstant True + _ -> pconstant False + +{- | Return true if the stake isn't related to the proposal. + + @since 0.2.0 +-} +pisIrrelevant :: Term s (PStakeRole :--> PBool) +pisIrrelevant = phoistAcyclic $ + plam $ \sr -> pmatch sr $ \case + PIrrelevant -> pconstant True + _ -> pconstant False + +{- | Get the role of a stake for the proposal specified by the poroposal id, + given the 'StakeDatum.lockedBy' field of the stake. + + Note that the list of locks is cosidered valid only if it contains at most + two locks from the given proposal: one voter lock and one creator lock. + + @since 0.2.0 +-} +pgetStakeRole :: Term s (PProposalId :--> PBuiltinList (PAsData PProposalLock) :--> PStakeRole) +pgetStakeRole = phoistAcyclic $ + plam $ \pid locks -> + pfoldl + # plam + ( \role (pfromData -> lock) -> + let thisRole = pmatch lock $ \case + PCreated ((pfield @"created" #) -> pid') -> pif - (lockF.proposalTag #== pid) - (pcon $ PJust lock') - (pcon PNothing) - ) - # locks - - lockCount' = plength # filteredLocks - in plet lockCount' $ \lockCount -> - pif (lockCount #== 0) (pcon PDidNothing) $ - pif - (lockCount #== 1) - ( pcon $ - PVotedFor $ - pfromData $ - pfield @"vote" #$ phead # filteredLocks - ) - -- Note: see the implementation of the governor. - (pcon PCreated) + (pid' #== pid) + (pcon PCreator) + (pcon PIrrelevant) + PVoted lock' -> pletFields @'["votedOn", "votedFor"] lock' $ \lockF -> + pif + (lockF.votedOn #== pid) + (pcon $ PVoter lockF.votedFor) + (pcon PIrrelevant) + in pcombineStakeRole # thisRole # role + ) + # pcon PIrrelevant + # locks + where + pcombineStakeRole :: Term s (PStakeRole :--> PStakeRole :--> PStakeRole) + pcombineStakeRole = phoistAcyclic $ + plam $ \x y -> + let cannotCombine = ptraceError "duplicate roles" + in pmatch x $ \case + PVoter r -> pmatch y $ \case + PCreator -> pcon $ PBoth r + PIrrelevant -> x + _ -> cannotCombine + PCreator -> pmatch y $ \case + PVoter r -> pcon $ PBoth r + PIrrelevant -> x + _ -> cannotCombine + PBoth _ -> cannotCombine + PIrrelevant -> y + +{- | Get the outcome that was voted for. + + @since 0.2.0 +-} +pextractVoteOption :: Term s (PStakeRole :--> PResultTag) +pextractVoteOption = phoistAcyclic $ + plam $ \sr -> pmatch sr $ \case + PVoter r -> r + PBoth r -> r + _ -> ptraceError "not voter" diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index f84ec331..50a3ddf5 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -18,7 +18,7 @@ import Agora.Stake ( ), Stake (gtClassRef, proposalSTClass), StakeRedeemer (WitnessStake), - stakeLocked, + pstakeLocked, ) import Agora.Utils ( mustBePJust, @@ -109,7 +109,7 @@ stakePolicy gtClassRef = pif (psymbolValueOf # ownSymbol # txOutF.value #== 1) ( let datum = mustFindDatum' @PStakeDatum # txOutF.datumHash # txInfoF.datums - in pnot # (stakeLocked # datum) + in pnot # (pstakeLocked # datum) ) (pconstant False) ) @@ -263,7 +263,7 @@ stakeValidator stake = spentST <- pletC $ psymbolValueOf # stCurrencySymbol #$ valueSpent -- Is the stake currently locked? - stakeIsLocked <- pletC $ stakeLocked # stakeDatum' + stakeIsLocked <- pletC $ pstakeLocked # stakeDatum' pure $ pmatch stakeRedeemer $ \case @@ -287,7 +287,7 @@ stakeValidator stake = proposalSTClass = passetClass # pconstant propCs # pconstant propTn spentProposalST = passetClassValueOf # valueSpent # proposalSTClass - proposalTokenMoved <- pletC $ spentProposalST #== 1 + proposalTokenMoved <- pletC $ 1 #<= spentProposalST -- Filter out own outputs using own address and ST. ownOutputs <- @@ -371,9 +371,20 @@ stakeValidator stake = pletC $ pdata resolvedF.value #== pdata ownOutputValue + onlyLocksUpdated <- + pletC $ + let templateStakeDatum = + mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeDatum.stakedAmount + .& #owner .= stakeDatum.owner + .& #lockedBy .= pfield @"lockedBy" # stakeOut + ) + in stakeOut #== templateStakeDatum + pure $ pmatch stakeRedeemer $ \case - PRetractVotes l -> unTermCont $ do + PRetractVotes _ -> unTermCont $ do pguardC "Owner signs this transaction" ownerSignsTransaction @@ -383,18 +394,8 @@ stakeValidator stake = pguardC "Proposal ST spent" proposalTokenMoved pguardC "A UTXO must exist with the correct output" $ - let expectedLocks = pfield @"locks" # l - - expectedDatum = - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeDatum.stakedAmount - .& #owner .= stakeDatum.owner - .& #lockedBy .= expectedLocks - ) - - valueCorrect = ownOutputValueUnchanged - outputDatumCorrect = stakeOut #== expectedDatum + let valueCorrect = ownOutputValueUnchanged + outputDatumCorrect = onlyLocksUpdated in foldl1 (#&&) [ ptraceIfFalse "valueCorrect" valueCorrect @@ -405,34 +406,21 @@ stakeValidator stake = ------------------------------------------------------------ - PPermitVote l -> unTermCont $ do + PPermitVote _ -> unTermCont $ do pguardC "Owner signs this transaction" ownerSignsTransaction + let proposalTokenMinted = + passetClassValueOf # txInfoF.mint # proposalSTClass #== 1 + -- This puts trust into the Proposal. The Proposal must necessarily check -- that this is not abused. - pguardC "Proposal ST spent" proposalTokenMoved - - -- Update the stake datum, but only the 'lockedBy' field. - - let -- We actually don't know whether the given lock is valid or not. - -- This is checked in the proposal validator. - newLock = pfield @"lock" # l - -- Prepend the new lock to the existing locks. - expectedLocks = pcons # newLock # stakeDatum.lockedBy - - expectedDatum <- - pletC $ - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeDatum.stakedAmount - .& #owner .= stakeDatum.owner - .& #lockedBy .= pdata expectedLocks - ) + pguardC "Proposal ST spent or minted" $ + proposalTokenMoved #|| proposalTokenMinted pguardC "A UTXO must exist with the correct output" $ - let correctOutputDatum = stakeOut #== expectedDatum + let correctOutputDatum = onlyLocksUpdated valueCorrect = ownOutputValueUnchanged in foldl1 (#&&) From 1865c5cf3821fcb089c1f9b408c83c409d96da44 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 8 Jul 2022 20:38:38 +0800 Subject: [PATCH 29/78] fix existing tests --- agora-specs/Property/Governor.hs | 3 +- agora-specs/Sample/Effect/GovernorMutation.hs | 3 + agora-specs/Sample/Governor.hs | 7 +- agora-specs/Sample/Proposal.hs | 1 + agora-specs/Sample/Proposal/Advance.hs | 36 +++++- agora-specs/Sample/Proposal/UnlockStake.hs | 10 +- agora-specs/Sample/Proposal/Vote.hs | 32 ++++- agora-specs/Spec/Effect/GovernorMutation.hs | 2 + agora-specs/Spec/Governor.hs | 3 + agora-testlib/Test/Util.hs | 4 + bench.csv | 122 +++++++++--------- 11 files changed, 143 insertions(+), 80 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index c4922a82..7d45d992 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -106,7 +106,7 @@ governorDatumValidProperty = thres <- genProposalThresholds c let timing = ProposalTimingConfig 0 0 0 0 - return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 0) + return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 0) 3 where taggedInteger p = Tagged <$> chooseInteger p genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds @@ -181,6 +181,7 @@ governorMintingProperty = , nextProposalId = ProposalId 0 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } gen :: GovernorPolicyCases -> Gen ScriptContext diff --git a/agora-specs/Sample/Effect/GovernorMutation.hs b/agora-specs/Sample/Effect/GovernorMutation.hs index 7394b704..bc3967a9 100644 --- a/agora-specs/Sample/Effect/GovernorMutation.hs +++ b/agora-specs/Sample/Effect/GovernorMutation.hs @@ -106,6 +106,7 @@ mkEffectTxInfo newGovDatum = , nextProposalId = ProposalId 0 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } governorInputDatum :: Datum governorInputDatum = Datum $ toBuiltinData governorInputDatum' @@ -168,6 +169,7 @@ validNewGovernorDatum = , nextProposalId = ProposalId 42 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } invalidNewGovernorDatum :: GovernorDatum @@ -180,4 +182,5 @@ invalidNewGovernorDatum = , nextProposalId = ProposalId 42 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } diff --git a/agora-specs/Sample/Governor.hs b/agora-specs/Sample/Governor.hs index 16416408..695526e1 100644 --- a/agora-specs/Sample/Governor.hs +++ b/agora-specs/Sample/Governor.hs @@ -119,6 +119,7 @@ mintGST = , nextProposalId = ProposalId 0 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } witness :: ValidatorHash @@ -183,6 +184,7 @@ createProposal = , nextProposalId = thisProposalId , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } effects = @@ -216,8 +218,7 @@ createProposal = proposalLocks :: [ProposalLock] proposalLocks = - [ ProposalLock (ResultTag 0) thisProposalId - , ProposalLock (ResultTag 1) thisProposalId + [ Created thisProposalId ] stakeOutputDatum :: StakeDatum stakeOutputDatum = stakeInputDatum {lockedBy = proposalLocks} @@ -304,6 +305,7 @@ mintGATs = , nextProposalId = ProposalId 5 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } effects = @@ -423,6 +425,7 @@ mutateState = , nextProposalId = ProposalId 5 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } governorOutputDatum :: GovernorDatum diff --git a/agora-specs/Sample/Proposal.hs b/agora-specs/Sample/Proposal.hs index 6d2d6a97..dc63fa5a 100644 --- a/agora-specs/Sample/Proposal.hs +++ b/agora-specs/Sample/Proposal.hs @@ -81,6 +81,7 @@ proposalCreation = , nextProposalId = ProposalId 0 , proposalTimings = def , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 } govAfter :: GovernorDatum diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index ea3aaed1..05b4fc4f 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -31,7 +31,7 @@ import Agora.Proposal.Time ( ) import Agora.SafeMoney (GTTag) import Agora.Stake ( - ProposalLock (ProposalLock), + ProposalLock (..), Stake (gtClassRef), StakeDatum (..), StakeRedeemer (WitnessStake), @@ -99,19 +99,24 @@ data Parameters = Parameters , stakeCount :: Integer -- ^ The number of stakes. , signByAllCosigners :: Bool + -- ^ Whether the transaction is signed by all the cosigners. , perStakeGTs :: Tagged GTTag Integer + -- ^ The staked amount of each stake. } --- +-- | Reference to the proposal UTXO. proposalRef :: TxOutRef proposalRef = TxOutRef proposalTxRef 1 +-- | Create the reference to a particular stake UTXO. mkStakeRef :: Int -> TxOutRef mkStakeRef = TxOutRef stakeTxRef . (+ 2) . fromIntegral --- +-- | Default effects of the propsoal. defEffects :: AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) defEffects = AssocMap.fromList @@ -119,14 +124,19 @@ defEffects = , (ResultTag 1, AssocMap.empty) ] +-- | Empty votes for the default effects. emptyVotes :: ProposalVotes emptyVotes = emptyVotesFor defEffects +{- | The default proposal statring time, which doesn't really matter in this + case. +-} proposalStartingTime :: POSIXTime proposalStartingTime = 0 --- +-- | Create the input proposal datum given the parameters. mkProposalInputDatum :: Parameters -> ProposalDatum mkProposalInputDatum ps = ProposalDatum @@ -140,6 +150,7 @@ mkProposalInputDatum ps = , startingTime = ProposalStartingTime proposalStartingTime } +-- | Create the input stake datums given the parameters. mkStakeInputDatums :: Parameters -> [StakeDatum] mkStakeInputDatums ps = map @@ -154,28 +165,37 @@ mkStakeInputDatums ps = where existingLocks :: [ProposalLock] existingLocks = - [ ProposalLock (ResultTag 0) (ProposalId 0) - , ProposalLock (ResultTag 2) (ProposalId 1) + [ Voted (ProposalId 0) (ResultTag 0) + , Voted (ProposalId 1) (ResultTag 2) ] --- +-- | Script purpose of the proposal validator. proposalScriptPurpose :: ScriptPurpose proposalScriptPurpose = Spending proposalRef +-- | Script purpose of the stake validator, given which stake we want to spend. mkStakeScriptPurpose :: Int -> ScriptPurpose mkStakeScriptPurpose = Spending . mkStakeRef --- +{- | The propsoal redeemer used to spend the proposal UTXO, which is always + 'AdvanceProposal' in this case. +-} proposalRedeemer :: ProposalRedeemer proposalRedeemer = AdvanceProposal +{- | The propsoal redeemer used to spend the stake UTXO, which is always + 'WitnessStake' in this case. +-} stakeRedeemer :: StakeRedeemer stakeRedeemer = WitnessStake --- +-- | Create some valid stake owners. mkStakeOwners :: Parameters -> [PubKeyHash] mkStakeOwners ps = sort $ @@ -276,6 +296,9 @@ advance ps = --- +{- | Given the proposal status, create a time range that is in time for + advacing to the next state. +-} mkInTimeTimeRange :: ProposalStatus -> POSIXTimeRange mkInTimeTimeRange advanceFrom = case advanceFrom of @@ -315,6 +338,9 @@ mkInTimeTimeRange advanceFrom = ) Finished -> error "Cannot advance 'Finished' proposal" +{- | Given the proposal status, create a time range that is too time for + advacing to the next state. +-} mkTooLateTimeRange :: ProposalStatus -> POSIXTimeRange mkTooLateTimeRange advanceFrom = case advanceFrom of @@ -363,6 +389,7 @@ mkTooLateTimeRange advanceFrom = --- +-- | Next state of the given proposal status. getNextState :: ProposalStatus -> ProposalStatus getNextState = \case Draft -> VotingReady @@ -475,6 +502,9 @@ invalidOutputStakeParameters nCosigners = --- +{- | Create a test tree that runs the stake validator and proposal validator to + test the advancing functionalities. +-} mkTestTree :: String -> Parameters -> Bool -> SpecificationTree mkTestTree name ps isValidForProposalValidator = group name [proposal, stake] where diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index da8b4e56..e453b31b 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -21,7 +21,7 @@ import Agora.Proposal ( ) import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime)) -import Agora.Stake (ProposalLock (ProposalLock), Stake (..), StakeDatum (..)) +import Agora.Stake (ProposalLock (..), Stake (..), StakeDatum (..)) import Control.Monad (join) import Data.Coerce (coerce) import Data.Default.Class (Default (def)) @@ -152,10 +152,8 @@ mkStakeDatumPair c = in (input, output) where mkStakeLocks :: StakeRole -> ProposalId -> [ProposalLock] - mkStakeLocks Voter pid = [ProposalLock defaultVoteFor pid] - mkStakeLocks Creator pid = - map (`ProposalLock` pid) $ - AssocMap.keys $ getProposalVotes votesTemplate + mkStakeLocks Voter pid = [Voted pid defaultVoteFor] + mkStakeLocks Creator pid = [Created pid] mkStakeLocks _ _ = [] -- | Create the input proposal datum. @@ -274,7 +272,7 @@ unlockStake p = mkProposalValidatorTestCase :: UnlockStakeParameters -> Bool -> SpecificationTree mkProposalValidatorTestCase p shouldSucceed = let datum = mkProposalInputDatum p $ ProposalId 0 - redeemer = Unlock (ResultTag 0) + redeemer = Unlock name = show p scriptContext = ScriptContext diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index f06ac7e7..3dbc9169 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -17,7 +17,7 @@ import Agora.Proposal.Time ( ProposalTimingConfig (draftTime, votingTime), ) import Agora.Stake ( - ProposalLock (ProposalLock), + ProposalLock (..), Stake (gtClassRef), StakeDatum (..), StakeRedeemer (PermitVote), @@ -65,9 +65,11 @@ import Test.Specification ( ) import Test.Util (closedBoundedInterval, sortValue, updateMap) +-- | Reference to the proposal UTXO. proposalRef :: TxOutRef proposalRef = TxOutRef proposalTxRef 0 +-- | Reference to the stake UTXO. stakeRef :: TxOutRef stakeRef = TxOutRef stakeTxRef 1 @@ -79,9 +81,11 @@ data Parameters = Parameters -- ^ The count of votes. } +-- | The public key hash of the stake owner. stakeOwner :: PubKeyHash stakeOwner = signer +-- | The votes of the input proposals. initialVotes :: AssocMap.Map ResultTag Integer initialVotes = AssocMap.fromList @@ -89,6 +93,7 @@ initialVotes = , (ResultTag 1, 4242) ] +-- | The input proposal datum. proposalInputDatum :: ProposalDatum proposalInputDatum = ProposalDatum @@ -106,12 +111,16 @@ proposalInputDatum = , startingTime = ProposalStartingTime 0 } +-- | The locks of the input stake. existingLocks :: [ProposalLock] existingLocks = - [ ProposalLock (ResultTag 0) (ProposalId 0) - , ProposalLock (ResultTag 2) (ProposalId 1) + [ Voted (ProposalId 0) (ResultTag 0) + , Voted (ProposalId 1) (ResultTag 2) ] +{- | Set the 'StakeDatum.stakedAmount' according to the number of votes being + casted. +-} mkStakeInputDatum :: Parameters -> StakeDatum mkStakeInputDatum params = StakeDatum @@ -120,14 +129,19 @@ mkStakeInputDatum params = , lockedBy = existingLocks } +-- | Create the proposal redeemer. In this case @'Vote' _@ will always be used. mkProposalRedeemer :: Parameters -> ProposalRedeemer mkProposalRedeemer = Vote . voteFor +-- | Place new proposal locks on the stake. mkNewLock :: Parameters -> ProposalLock -mkNewLock ps = ProposalLock ps.voteFor proposalInputDatum.proposalId +mkNewLock = Voted proposalInputDatum.proposalId . voteFor -mkStakeRedeemer :: Parameters -> StakeRedeemer -mkStakeRedeemer = PermitVote . mkNewLock +{- | The stake redeemer that is used in 'mkTestTree'. In this case it'll always be + 'PermitVote'. +-} +stakeRedeemer :: StakeRedeemer +stakeRedeemer = PermitVote -- | Create a valid transaction that votes on a propsal, given the parameters. vote :: Parameters -> TxInfo @@ -210,6 +224,7 @@ vote params = --- +-- | Valida parameters that vote on the proposal. validVoteParameters :: Parameters validVoteParameters = Parameters @@ -219,6 +234,9 @@ validVoteParameters = --- +{- | Create a test tree that runs the stake validator and proposal validator to + test the voting functionalities. +-} mkTestTree :: String -> Parameters -> Bool -> SpecificationTree mkTestTree name ps isValid = group name [proposal, stake] where @@ -242,7 +260,7 @@ mkTestTree name ps isValid = group name [proposal, stake] "stake" (stakeValidator Shared.stake) stakeInputDatum - (mkStakeRedeemer ps) + stakeRedeemer ( ScriptContext txInfo (Spending stakeRef) diff --git a/agora-specs/Spec/Effect/GovernorMutation.hs b/agora-specs/Spec/Effect/GovernorMutation.hs index 5bc7b87d..ebcf1206 100644 --- a/agora-specs/Spec/Effect/GovernorMutation.hs +++ b/agora-specs/Spec/Effect/GovernorMutation.hs @@ -38,6 +38,7 @@ specs = (ProposalId 0) def def + 3 ) MutateGovernor ( ScriptContext @@ -60,6 +61,7 @@ specs = (ProposalId 0) def def + 3 ) MutateGovernor ( ScriptContext diff --git a/agora-specs/Spec/Governor.hs b/agora-specs/Spec/Governor.hs index b4889282..cb905dee 100644 --- a/agora-specs/Spec/Governor.hs +++ b/agora-specs/Spec/Governor.hs @@ -47,6 +47,7 @@ specs = (ProposalId 0) def def + 3 ) CreateProposal createProposal @@ -58,6 +59,7 @@ specs = (ProposalId 5) def def + 3 ) MintGATs mintGATs @@ -69,6 +71,7 @@ specs = (ProposalId 5) def def + 3 ) MutateGovernor mutateState diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index b610dd73..3fffdc24 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -95,12 +95,16 @@ updateMap f k = -------------------------------------------------------------------------------- +-- | Sort the given 'AssocMap.Map' by keys in ascending order. sortMap :: forall k v. Ord k => AssocMap.Map k v -> AssocMap.Map k v sortMap = AssocMap.fromList . sortOn fst . AssocMap.toList +{- | Sort the given 'Value' in ascending order. Some plutarch functions that + work with plutarch's 'Sorted' 'PMap' require this to work correctly. +-} sortValue :: Value -> Value sortValue = Value diff --git a/bench.csv b/bench.csv index 7e8faf7e..4f9330d2 100644 --- a/bench.csv +++ b/bench.csv @@ -2,69 +2,69 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,87839169,243032,8561 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,106082031,292993,3609 -Agora/Stake/policy/stakeCreation,50939580,148729,2387 -Agora/Stake/validator/stakeDepositWithdraw deposit,150745141,416137,4995 -Agora/Stake/validator/stakeDepositWithdraw withdraw,150745141,416137,4983 -Agora/Proposal/policy/proposalCreation,23140177,69194,1515 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235408912,657765,8097 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,125665131,316762,5462 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,680441047,1897008,10727 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,576106975,1490610,7972 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1351073436,3706315,14015 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1148637636,2982695,11109 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,125665131,316762,5462 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,125665131,316762,5462 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,125665131,316762,5462 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,125665131,316762,5462 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,576106975,1490610,7972 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,576106975,1490610,7972 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,576106975,1490610,7972 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1148637636,2982695,11109 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1148637636,2982695,11109 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1148637636,2982695,11109 -Agora/Proposal/validator/voting/legal/propsoal,246896882,688919,8069 -Agora/Proposal/validator/voting/legal/stake,141234659,368136,5481 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222376736,631090,8052 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,125665131,316762,5459 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217322044,620369,8054 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,125665131,316762,5461 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,118020743,304972,5389 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,614587307,1766683,10875 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,548619697,1410656,8162 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239691392,682433,8415 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,125665131,316762,5702 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446252055,1166812,7811 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1196289192,3454898,14404 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1201388310,3136405,11540 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267653077,760013,8868 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,125665131,316762,6004 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1025012867,2732083,10837 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,250229153,709227,8061 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,125665131,316762,5466 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,238990044,676396,8061 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,125665131,316762,5466 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,236162599,670386,8055 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,125665131,316762,5462 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,237293577,672790,8055 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,125665131,316762,5462 -Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,125665131,316762,5462 -Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,125665131,316762,5454 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",245855872,689807,8029 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",215131610,613807,8031 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",212428891,605718,8033 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",212428891,605718,8033 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1775520444,5200586,29137 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1448162043,4319059,29321 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1340521669,3979526,29305 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1340521669,3979526,29305 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,88940927,246756,8843 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,107090537,296185,3627 +Agora/Stake/policy/stakeCreation,51008580,149029,2522 +Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 +Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 +Agora/Proposal/policy/proposalCreation,23140177,69194,1517 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,231665387,648239,8164 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,122255811,317464,5213 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,662329378,1846986,10794 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,553050999,1459872,7723 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1315001587,3605673,14082 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1101023340,2912657,10860 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,122255811,317464,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,122255811,317464,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,122255811,317464,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,122255811,317464,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,553050999,1459872,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,553050999,1459872,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,553050999,1459872,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1101023340,2912657,10860 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1101023340,2912657,10860 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1101023340,2912657,10860 +Agora/Proposal/validator/voting/legal/propsoal,254672808,713771,8146 +Agora/Proposal/validator/voting/legal/stake,139493011,366217,5239 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8127 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,122255811,317464,5222 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8129 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,122255811,317464,5224 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117978393,308804,5152 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10982 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,499559031,1304096,7957 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8490 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,122255811,317464,5465 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446950999,1172710,7606 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14551 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1129251912,2994677,11375 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8943 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,122255811,317464,5767 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013080113,2701103,10673 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8136 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,122255811,317464,5229 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8136 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,122255811,317464,5229 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8130 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,122255811,317464,5225 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8130 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,122255811,317464,5225 +Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,122255811,317464,5225 +Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,122255811,317464,5217 +"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",236724208,665425,8096 +"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",204516343,585280,8093 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",205832495,589164,8100 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",205832495,589164,8100 +"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1698797000,4895231,29286 +"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1312344666,3843304,29242 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1356230175,3961906,29455 +"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1356230175,3961906,29455 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Governor/policy/GST minting,51007235,144191,2034 -Agora/Governor/validator/proposal creation,309689999,834675,9064 -Agora/Governor/validator/GATs minting,418560845,1137908,9187 -Agora/Governor/validator/mutate governor state,88986020,248491,8662 +Agora/Governor/policy/GST minting,51480023,145787,2048 +Agora/Governor/validator/proposal creation,303114849,813451,9342 +Agora/Governor/validator/GATs minting,422654153,1147158,9468 +Agora/Governor/validator/mutate governor state,90087778,252215,8943 From 0495d27f869f331a0c53398167a507e1ba864573 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 8 Jul 2022 23:54:21 +0800 Subject: [PATCH 30/78] refactor and add more tests for unlocking stakes --- agora-specs/Sample/Proposal/UnlockStake.hs | 461 ++++++++++++++++----- agora-specs/Spec/Proposal.hs | 181 ++++---- bench.csv | 160 ++++++- 3 files changed, 590 insertions(+), 212 deletions(-) diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index e453b31b..46dd4910 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -1,12 +1,19 @@ module Sample.Proposal.UnlockStake ( - unlockStake, StakeRole (..), - UnlockStakeParameters (..), - votesTemplate, - emptyEffectFor, - mkProposalInputDatum, - mkStakeInputDatum, - mkProposalValidatorTestCase, + Parameters (..), + unlockStake, + mkTestTree, + mkVoterRetractVotesWhileVotingParameters, + mkVoterCreatorRetractVotesWhileVotingParameters, + mkCreatorRemoveCreatorLocksWhenFinishedParameters, + mkVoterCreatorRemoveAllLocksWhenFinishedParameters, + mkVoterUnlockStakeAfterVotingParameters, + mkVoterCreatorRemoveVoteLocksWhenLockedParameters, + mkRetractVotesWhileNotVoting, + mkUnockIrrelevantStakeParameters, + mkRemoveCreatorLockBeforeFinishedParameters, + mkRetractVotesWithCreatorStakeParamaters, + mkAlterStakeParameters, ) where -------------------------------------------------------------------------------- @@ -21,9 +28,8 @@ import Agora.Proposal ( ) import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime)) -import Agora.Stake (ProposalLock (..), Stake (..), StakeDatum (..)) -import Control.Monad (join) -import Data.Coerce (coerce) +import Agora.Stake (ProposalLock (..), Stake (..), StakeDatum (..), StakeRedeemer (RetractVotes)) +import Agora.Stake.Scripts (stakeValidator) import Data.Default.Class (Default (def)) import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( @@ -32,14 +38,15 @@ import Plutarch.Context ( input, output, script, + signedWith, txId, withDatum, - withRefIndex, - withTxId, + withOutRef, withValue, ) import PlutusLedgerApi.V1 ( DatumHash, + PubKeyHash, ScriptContext (..), ScriptPurpose (Spending), TxInfo (..), @@ -48,7 +55,7 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Proposal.Shared (stakeTxRef, testFunc) import Sample.Shared ( minAda, proposalPolicySymbol, @@ -59,7 +66,7 @@ import Sample.Shared ( stakeValidatorHash, ) import Sample.Shared qualified as Shared -import Test.Specification (SpecificationTree) +import Test.Specification (SpecificationTree, group) import Test.Util (sortValue, updateMap) -------------------------------------------------------------------------------- @@ -82,104 +89,130 @@ emptyEffectFor (ProposalVotes vs) = map (,AssocMap.empty) (AssocMap.keys vs) -- | The default vote option that will be used by functions in this module. -defaultVoteFor :: ResultTag -defaultVoteFor = ResultTag 0 +defVoteFor :: ResultTag +defVoteFor = ResultTag 0 -- | The default number of GTs the stake will have. -defaultStakedGTs :: Tagged _ Integer -defaultStakedGTs = Tagged 100000 +defStakedGTs :: Tagged _ Integer +defStakedGTs = 100000 + +{- | If 'Parameters.alterOutputStake' is set to true, the + 'StakeDatum.stakedAmount' will be set to this. +-} +alteredStakedGTs :: Tagged _ Integer +alteredStakedGTs = 100 + +-- | Default owner of the stakes. +defOwner :: PubKeyHash +defOwner = signer -- | How a stake has been used on a particular proposal. data StakeRole = -- | The stake was spent to vote for a paraticular option. Voter - | -- | The stake was used to created the proposal. + | -- | The stake was used to create the proposal. Creator + | -- | The stake was used to both create and vote for the proposal. + Both | -- | The stake has nothing to do with the proposal. Irrelevant + deriving stock (Bounded, Enum, Show) -- | Parameters for creating a 'TxOut' that unlocks a stake. -data UnlockStakeParameters = UnlockStakeParameters +data Parameters = Parameters { proposalCount :: Integer -- ^ The number of proposals in the 'TxOut'. - , stakeUsage :: StakeRole + , stakeRole :: StakeRole -- ^ The role of the stake we're unlocking. , retractVotes :: Bool -- ^ Whether to retract votes or not. + , removeVoterLock :: Bool + -- ^ Remove the voter locks from the input stake. + , removeCreatorLock :: Bool + -- ^ Remove the creator locks from the input stake. , proposalStatus :: ProposalStatus -- ^ The state of all the proposals. + , alterOutputStake :: Bool } -instance Show UnlockStakeParameters where - show p = - let role = case p.stakeUsage of - Voter -> "voter" - Creator -> "creator" - _ -> "irrelevant stake" - - action = - if p.retractVotes - then "unlock stake + retract votes" - else "unlock stake" - - while = show p.proposalStatus +-- | Iterate over the proposal id of every proposal, given the number of proposals. +forEachProposalId :: Parameters -> (ProposalId -> a) -> [a] +forEachProposalId ps = forEachProposalId' ps.proposalCount + where + forEachProposalId' :: Integer -> (ProposalId -> a) -> [a] + forEachProposalId' 0 _ = error "zero proposal" + forEachProposalId' n f = f . ProposalId <$> [0 .. n - 1] - proposalInfo = mconcat [show p.proposalCount, " proposals"] - in mconcat [proposalInfo, ", ", role, ", ", action, ", ", while] +-- | Create locks for the input stake given the parameters. +mkInputStakeLocks :: Parameters -> [ProposalLock] +mkInputStakeLocks ps = mconcat $ forEachProposalId ps $ mkStakeLocksFor ps.stakeRole + where + mkStakeLocksFor :: StakeRole -> ProposalId -> [ProposalLock] + mkStakeLocksFor sr pid = + let voted = [Voted pid defVoteFor] + created = [Created pid] + in case sr of + Voter -> voted + Creator -> created + Both -> voted <> created + _ -> [] --- | Generate some input proposals and their corresponding output proposals. -mkProposals :: UnlockStakeParameters -> [(ProposalDatum, ProposalDatum)] -mkProposals p = forEachProposalId p.proposalCount $ mkProposalDatumPair p +-- | Create locks for the output stake by removing locks from the input locks. +mkOutputStakeLocks :: Parameters -> [ProposalLock] +mkOutputStakeLocks ps = + filter + ( \lock -> not $ case lock of + Voted _ _ -> ps.removeVoterLock + Created _ -> ps.removeCreatorLock + ) + inputLocks + where + inputLocks = mkInputStakeLocks ps --- | Iterate over the proposal id of every proposal, given the number of proposals. -forEachProposalId :: Integer -> (ProposalId -> a) -> [a] -forEachProposalId 0 _ = error "zero proposal" -forEachProposalId n f = f . ProposalId <$> [0 .. n - 1] - --- | Create the input stake and its corresponding output stake. -mkStakeDatumPair :: UnlockStakeParameters -> (StakeDatum, StakeDatum) -mkStakeDatumPair c = - let output = - StakeDatum - { stakedAmount = defaultStakedGTs - , owner = signer - , lockedBy = [] - } +-- | Create the stake input datum given the parameters. +mkStakeInputDatum :: Parameters -> StakeDatum +mkStakeInputDatum ps = + StakeDatum + { stakedAmount = defStakedGTs + , owner = defOwner + , lockedBy = mkInputStakeLocks ps + } - inputLocks = join $ forEachProposalId c.proposalCount (mkStakeLocks c.stakeUsage) +-- | Create stake output datum given the parameters. +mkStakeOutputDatum :: Parameters -> StakeDatum +mkStakeOutputDatum ps = + let template = mkStakeInputDatum ps + stakedAmount' = + if ps.alterOutputStake + then alteredStakedGTs + else defStakedGTs + in template + { stakedAmount = stakedAmount' + , lockedBy = mkOutputStakeLocks ps + } - input = output {lockedBy = inputLocks} - in (input, output) - where - mkStakeLocks :: StakeRole -> ProposalId -> [ProposalLock] - mkStakeLocks Voter pid = [Voted pid defaultVoteFor] - mkStakeLocks Creator pid = [Created pid] - mkStakeLocks _ _ = [] +-- | Generate some input proposals and their corresponding output proposals. +mkProposals :: Parameters -> [(ProposalDatum, ProposalDatum)] +mkProposals ps = forEachProposalId ps $ mkProposalDatumPair ps -- | Create the input proposal datum. -mkProposalInputDatum :: UnlockStakeParameters -> ProposalId -> ProposalDatum +mkProposalInputDatum :: Parameters -> ProposalId -> ProposalDatum mkProposalInputDatum p pid = fst $ mkProposalDatumPair p pid --- | Create the input stake datum. -mkStakeInputDatum :: UnlockStakeParameters -> StakeDatum -mkStakeInputDatum = fst . mkStakeDatumPair - -- | Create a input proposal and its corresponding output proposal. mkProposalDatumPair :: - UnlockStakeParameters -> + Parameters -> ProposalId -> (ProposalDatum, ProposalDatum) mkProposalDatumPair params pid = - let owner = signer - - inputVotes = mkInputVotes params.stakeUsage $ untag defaultStakedGTs + let inputVotes = mkInputVotes params.stakeRole $ untag defStakedGTs input = ProposalDatum { proposalId = pid , effects = emptyEffectFor votesTemplate , status = params.proposalStatus - , cosigners = [owner] + , cosigners = [defOwner] , thresholds = def , votes = inputVotes , timingConfig = def @@ -198,62 +231,62 @@ mkProposalDatumPair params pid = -- The staked amount/votes. Integer -> ProposalVotes - mkInputVotes Voter vc = + mkInputVotes Creator _ = ProposalVotes $ - updateMap (Just . const vc) defaultVoteFor $ + updateMap (Just . const 1000) defVoteFor $ getProposalVotes votesTemplate - mkInputVotes Creator _ = + mkInputVotes Irrelevant _ = votesTemplate + mkInputVotes _ vc = ProposalVotes $ - updateMap (Just . const 1000) defaultVoteFor $ + updateMap (Just . const vc) defVoteFor $ getProposalVotes votesTemplate - mkInputVotes _ _ = votesTemplate -- | Create a 'TxInfo' that tries to unlock a stake. -unlockStake :: UnlockStakeParameters -> TxInfo -unlockStake p = +unlockStake :: Parameters -> TxInfo +unlockStake ps = let pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 - pIODatums = mkProposals p - (sInDatum, sOutDatum) = mkStakeDatumPair p + pIODatums = mkProposals ps proposals = foldMap - ( \(i, o) -> + ( \((i, o), idx) -> mconcat @BaseBuilder [ input $ script proposalValidatorHash . withValue pst . withDatum i - . withTxId proposalTxRef - . withRefIndex (coerce i.proposalId + 2) + . withOutRef (mkProposalRef idx) , output $ script proposalValidatorHash . withValue (sortValue $ pst <> minAda) . withDatum o ] ) - pIODatums + (zip pIODatums [0 ..]) stakeValue = sortValue $ mconcat [ Value.assetClassValue (untag stake.gtClassRef) - (untag defaultStakedGTs) + (untag defStakedGTs) , sst , minAda ] + sInDatum = mkStakeInputDatum ps + sOutDatum = mkStakeOutputDatum ps + stakes = mconcat @BaseBuilder [ input $ script stakeValidatorHash . withValue stakeValue . withDatum sInDatum - . withTxId stakeTxRef - . withRefIndex 1 + . withOutRef stakeRef , output $ script stakeValidatorHash . withValue stakeValue @@ -265,23 +298,243 @@ unlockStake p = [ txId "388bc0b897b3dadcd479da4c88291de4113a50b72ddbed001faf7fc03f11bc52" , proposals , stakes + , signedWith defOwner ] in buildTxInfoUnsafe builder --- | Create a test case that tests the proposal validator's @'Unlock' _@ redeemer. -mkProposalValidatorTestCase :: UnlockStakeParameters -> Bool -> SpecificationTree -mkProposalValidatorTestCase p shouldSucceed = - let datum = mkProposalInputDatum p $ ProposalId 0 - redeemer = Unlock - name = show p - scriptContext = - ScriptContext - (unlockStake p) - (Spending (TxOutRef proposalTxRef 2)) - in testFunc - shouldSucceed - name - (proposalValidator Shared.proposal) - datum - redeemer - scriptContext +-- | Reference to the stake UTXO. +stakeRef :: TxOutRef +stakeRef = TxOutRef stakeTxRef 1 + +-- | Generate the reference to a proposal UTXOs, given the index of the proposal. +mkProposalRef :: Int -> TxOutRef +mkProposalRef offset = TxOutRef stakeTxRef $ 2 + fromIntegral offset + +-- | Proposal redeemer used by 'mkTestTree', in this case it's always 'Unlock'. +proposalRedeemer :: ProposalRedeemer +proposalRedeemer = Unlock + +-- | Stake redeemer used by 'mkTestTree', in this case it's always 'RetractVotes'. +stakeRedeemer :: StakeRedeemer +stakeRedeemer = RetractVotes + +-------------------------------------------------------------------------------- + +{- | Legal parameters that retract votes while the proposals is in 'VotingReady' + state, and also remove voter locks from the stake, which is + used to vote on the proposals. +-} +mkVoterRetractVotesWhileVotingParameters :: Integer -> Parameters +mkVoterRetractVotesWhileVotingParameters nProposals = + Parameters + { proposalCount = nProposals + , stakeRole = Voter + , retractVotes = True + , removeVoterLock = True + , removeCreatorLock = False + , proposalStatus = VotingReady + , alterOutputStake = False + } + +{- | Legal parameters that retract votes while the proposals is in 'VotingReady' + state, and also remove voter locks from the stake, which is + used to both create and vote on the proposals. +-} +mkVoterCreatorRetractVotesWhileVotingParameters :: Integer -> Parameters +mkVoterCreatorRetractVotesWhileVotingParameters nProposals = + Parameters + { proposalCount = nProposals + , stakeRole = Both + , retractVotes = True + , removeVoterLock = True + , removeCreatorLock = False + , proposalStatus = VotingReady + , alterOutputStake = False + } + +{- | Legal parameters that remove creator locks from the stake while the + proposals is in 'Finished' state. The stake was only used for creating + the proposals. +-} +mkCreatorRemoveCreatorLocksWhenFinishedParameters :: Integer -> Parameters +mkCreatorRemoveCreatorLocksWhenFinishedParameters nProposals = + Parameters + { proposalCount = nProposals + , stakeRole = Creator + , retractVotes = False + , removeVoterLock = False + , removeCreatorLock = True + , proposalStatus = Finished + , alterOutputStake = False + } + +{- | Legal parameters that remove voter and creator locks from the stake while + the proposals is in 'Finished' state. The stake was used for creating + and voting on the proposals. +-} +mkVoterCreatorRemoveAllLocksWhenFinishedParameters :: Integer -> Parameters +mkVoterCreatorRemoveAllLocksWhenFinishedParameters nProposals = + Parameters + { proposalCount = nProposals + , stakeRole = Both + , retractVotes = False + , removeVoterLock = True + , removeCreatorLock = True + , proposalStatus = Finished + , alterOutputStake = False + } + +{- Legal parameters that remove voter locks from the stake after the voting + phrase. The stake was used only for voting on the proposals. +-} +mkVoterUnlockStakeAfterVotingParameters :: Integer -> [Parameters] +mkVoterUnlockStakeAfterVotingParameters nProposals = + map + ( \st -> + Parameters + { proposalCount = nProposals + , stakeRole = Voter + , retractVotes = False + , removeVoterLock = True + , removeCreatorLock = False + , proposalStatus = st + , alterOutputStake = False + } + ) + [Locked, Finished] + +{- Legal parameters that remove voter locks whenproposals are in phrase. + The stake was used for crating and voting on the proposals. +-} +mkVoterCreatorRemoveVoteLocksWhenLockedParameters :: Integer -> Parameters +mkVoterCreatorRemoveVoteLocksWhenLockedParameters nProposals = + Parameters + { proposalCount = nProposals + , stakeRole = Both + , retractVotes = False + , removeVoterLock = True + , removeCreatorLock = False + , proposalStatus = Locked + , alterOutputStake = False + } + +{- | Illegal parameters that retract votes when the proposals are not in voting + phrase. +-} +mkRetractVotesWhileNotVoting :: Integer -> [Parameters] +mkRetractVotesWhileNotVoting nProposals = do + role <- enumFrom Voter + status <- [Draft, Locked, Finished] + + pure $ + Parameters + { proposalCount = nProposals + , stakeRole = role + , retractVotes = True + , removeVoterLock = True + , removeCreatorLock = False + , proposalStatus = status + , alterOutputStake = False + } + +{- | Illegal parameter that try to unlock a stake that has nothing to do with + the proposals. +-} +mkUnockIrrelevantStakeParameters :: Integer -> [Parameters] +mkUnockIrrelevantStakeParameters nProposals = do + status <- [Draft, VotingReady, Locked, Finished] + retractVotes <- [True, False] + + pure $ + Parameters + { proposalCount = nProposals + , stakeRole = Irrelevant + , retractVotes = retractVotes + , removeVoterLock = True + , removeCreatorLock = True + , proposalStatus = status + , alterOutputStake = False + } + +{- | Illegal parameters that remove the creator locks before the proposals are + 'Finished'. +-} +mkRemoveCreatorLockBeforeFinishedParameters :: Integer -> [Parameters] +mkRemoveCreatorLockBeforeFinishedParameters nProposals = do + status <- [Draft, VotingReady, Locked] + + pure $ + Parameters + { proposalCount = nProposals + , stakeRole = Creator + , retractVotes = False + , removeVoterLock = False + , removeCreatorLock = True + , proposalStatus = status + , alterOutputStake = False + } + +{- | Illegal parameters that try to retract votes with a stake that was only used + for creating the proposals. +-} +mkRetractVotesWithCreatorStakeParamaters :: Integer -> Parameters +mkRetractVotesWithCreatorStakeParamaters nProposals = + Parameters + { proposalCount = nProposals + , stakeRole = Creator + , retractVotes = True + , removeVoterLock = True + , removeCreatorLock = True + , proposalStatus = VotingReady + , alterOutputStake = False + } + +{- | Illegal parameters that try to change the 'StakeDatum.stakedAmount' field of + the output stake datum. +-} +mkAlterStakeParameters :: Integer -> [Parameters] +mkAlterStakeParameters nProposals = do + role <- enumFrom Voter + status <- [Draft, Locked, Finished] + + pure $ + Parameters + { proposalCount = nProposals + , stakeRole = role + , retractVotes = True + , removeVoterLock = True + , removeCreatorLock = False + , proposalStatus = status + , alterOutputStake = True + } + +-------------------------------------------------------------------------------- + +{- | Create a test tree that runs both the stake validator and the proposal + validator. +-} +mkTestTree :: String -> Parameters -> Bool -> SpecificationTree +mkTestTree name ps isValid = group name [stake, proposal] + where + txInfo = unlockStake ps + + stake = + testFunc + (not ps.alterOutputStake) + "stake" + (stakeValidator Shared.stake) + (mkStakeInputDatum ps) + stakeRedeemer + (ScriptContext txInfo (Spending stakeRef)) + + proposal = + let idx = 0 + pid = ProposalId $ fromIntegral idx + ref = mkProposalRef idx + in testFunc + isValid + "propsoal" + (proposalValidator Shared.proposal) + (mkProposalInputDatum ps pid) + proposalRedeemer + (ScriptContext txInfo (Spending ref)) diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index a3c54df6..0e5b0adb 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -9,7 +9,6 @@ module Spec.Proposal (specs) where import Agora.Proposal ( Proposal (..), - ProposalStatus (..), ) import Agora.Proposal.Scripts (proposalPolicy) import Sample.Proposal qualified as Proposal @@ -166,110 +165,92 @@ specs = pure $ Advance.mkTestTree name ps False ] in [draftGroup, legalGroup, illegalGroup] - , group "unlocking" $ do - proposalCount <- [1, 42] + , group "unlocking" $ + let proposalCountCases = [1, 5, 10, 42] - let legalGroup = group "legal" $ do - let voterRetractVotesAndUnlockStakeWhileVoting = - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Voter - , UnlockStake.retractVotes = True - , UnlockStake.proposalStatus = VotingReady - } - True - creatorUnlockStakeWhileFinished = - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Creator - , UnlockStake.retractVotes = False - , UnlockStake.proposalStatus = Finished - } - True + mkSubgroupName nProposals = "with " <> show nProposals <> " proposals" - let voterUnlockStakeAfterVoting = group "voter unlocks stake after voting" $ do - status <- [Finished, Locked] - - pure $ - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Voter - , UnlockStake.retractVotes = False - , UnlockStake.proposalStatus = status - } - True - - [ voterRetractVotesAndUnlockStakeWhileVoting - , creatorUnlockStakeWhileFinished - , voterUnlockStakeAfterVoting + mkLegalGroup nProposals = + group + (mkSubgroupName nProposals) + [ UnlockStake.mkTestTree + "voter: retract votes while voting" + (UnlockStake.mkVoterRetractVotesWhileVotingParameters nProposals) + True + , UnlockStake.mkTestTree + "voter/creator: retract votes while voting" + (UnlockStake.mkVoterCreatorRetractVotesWhileVotingParameters nProposals) + True + , UnlockStake.mkTestTree + "creator: remove creator locks when finished" + (UnlockStake.mkCreatorRemoveCreatorLocksWhenFinishedParameters nProposals) + True + , UnlockStake.mkTestTree + "voter/creator: remove all locks when finished" + (UnlockStake.mkVoterCreatorRemoveAllLocksWhenFinishedParameters nProposals) + True + , group "voter: unlock after voting" $ + map + ( \ps -> + let name = show ps.proposalStatus + in UnlockStake.mkTestTree name ps True + ) + (UnlockStake.mkVoterUnlockStakeAfterVotingParameters nProposals) + , UnlockStake.mkTestTree + "voter/creator: remove vote locks when locked" + (UnlockStake.mkVoterCreatorRemoveVoteLocksWhenLockedParameters nProposals) + True ] - let illegalGroup = group "illegal" $ do - let retractsVotesWhileNotVotingReady = - group "voter retracts votes while not voting" $ do - status <- [Draft, Locked, Finished] - - pure $ - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Voter - , UnlockStake.retractVotes = True - , UnlockStake.proposalStatus = status - } - False - - unlockIrrelevantStake = - group "unlock an irrelevant stake" $ do - status <- [Draft, VotingReady, Locked, Finished] - shouldRetractVotes <- [True, False] - - pure $ - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Irrelevant - , UnlockStake.retractVotes = shouldRetractVotes - , UnlockStake.proposalStatus = status - } - False - - unlockCreatorStakeBeforeFinished = - group "unlock creator stake before finished" $ do - status <- [Draft, VotingReady, Locked] - - pure $ - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Creator - , UnlockStake.retractVotes = False - , UnlockStake.proposalStatus = status - } - False - retractVotesWithCreatorStake = - group "creator stake retracts votes" $ do - status <- [Draft, VotingReady, Locked, Finished] - - pure $ - UnlockStake.mkProposalValidatorTestCase - UnlockStake.UnlockStakeParameters - { UnlockStake.proposalCount = proposalCount - , UnlockStake.stakeUsage = UnlockStake.Creator - , UnlockStake.retractVotes = True - , UnlockStake.proposalStatus = status - } - False - - [ retractsVotesWhileNotVotingReady - , unlockIrrelevantStake - , unlockCreatorStakeBeforeFinished - , retractVotesWithCreatorStake + mkIllegalGroup nProposals = + group + (mkSubgroupName nProposals) + [ group "retract votes while not voting" $ + map + ( \ps -> + let name = + "role: " <> show ps.stakeRole + <> ", status: " + <> show ps.proposalStatus + in UnlockStake.mkTestTree name ps False + ) + (UnlockStake.mkRetractVotesWhileNotVoting nProposals) + , group "unlock an irrelevant stake" $ + map + ( \ps -> + let name = + "status: " <> show ps.proposalStatus + <> "retract votes: " + <> show ps.retractVotes + in UnlockStake.mkTestTree name ps False + ) + (UnlockStake.mkUnockIrrelevantStakeParameters nProposals) + , group "remove creator too early" $ + map + ( \ps -> + let name = + "status: " <> show ps.proposalStatus + in UnlockStake.mkTestTree name ps False + ) + (UnlockStake.mkRemoveCreatorLockBeforeFinishedParameters nProposals) + , UnlockStake.mkTestTree + "creator: retract votes" + (UnlockStake.mkRetractVotesWithCreatorStakeParamaters nProposals) + False + , group "alter output stake datum" $ + map + ( \ps -> + let name = + "role: " <> show ps.stakeRole + <> ", status: " + <> show ps.proposalStatus + in UnlockStake.mkTestTree name ps False + ) + (UnlockStake.mkAlterStakeParameters nProposals) ] - [legalGroup, illegalGroup] + legalGroup = group "legal" $ map mkLegalGroup proposalCountCases + illegalGroup = group "illegal" $ map mkIllegalGroup proposalCountCases + in [legalGroup, illegalGroup] ] ] diff --git a/bench.csv b/bench.csv index 4f9330d2..ccb52389 100644 --- a/bench.csv +++ b/bench.csv @@ -51,14 +51,158 @@ Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/pr Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,122255811,317464,5225 Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,122255811,317464,5225 Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,122255811,317464,5217 -"Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady",236724208,665425,8096 -"Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished",204516343,585280,8093 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished",205832495,589164,8100 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked",205832495,589164,8100 -"Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady",1698797000,4895231,29286 -"Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished",1312344666,3843304,29242 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished",1356230175,3961906,29455 -"Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked",1356230175,3961906,29455 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,128424052,334368,5219 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236724208,665425,8127 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,131655298,343422,5235 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,250196415,705367,8138 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,128424052,334368,5217 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204516343,585280,8124 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,128424052,334368,5233 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212950600,610184,8136 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,128424052,334368,5223 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205832495,589164,8131 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,128424052,334368,5223 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205832495,589164,8131 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,131655298,343422,5239 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219836278,630498,8142 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,279213296,711004,7303 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379365456,1078089,10187 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,295369526,756274,7380 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444893991,1269343,10239 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,279213296,711004,7293 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312597155,903136,10180 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,279213296,711004,7374 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350986136,1014888,10233 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,279213296,711004,7324 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,318066415,918212,10208 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,279213296,711004,7324 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,318066415,918212,10208 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,295369526,756274,7400 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,384126526,1110858,10259 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,467699851,1181799,9909 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557667016,1593919,12763 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,500012311,1272339,10060 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,688265961,1974313,12864 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,467699851,1181799,9888 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447698170,1300456,12750 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,467699851,1181799,10049 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523530556,1520768,12853 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,467699851,1181799,9949 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458358815,1329522,12803 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,467699851,1181799,9949 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458358815,1329522,12803 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,500012311,1272339,10100 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589489336,1711308,12904 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1674013803,4194887,26674 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698797000,4895231,29317 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1809726135,4575155,27362 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245846569,6486121,29776 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1674013803,4194887,26590 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312344666,3843304,29273 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1674013803,4194887,27301 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627814844,4758400,29715 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1674013803,4194887,26843 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1356230175,3961906,29486 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1674013803,4194887,26843 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1356230175,3961906,29486 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1809726135,4575155,27531 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903811320,5554188,29945 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",128424052,334368,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",128424052,334368,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",128424052,334368,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Draft/stake",124053466,322518,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Locked/stake",124053466,322518,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Finished/stake",124053466,322518,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Draft/stake",131655298,343422,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Locked/stake",131655298,343422,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Finished/stake",131655298,343422,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",120822220,313464,5201 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",120822220,313464,5201 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,120822220,313464,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,128424052,334368,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,128424052,334368,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,128424052,334368,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,128424052,334368,5215 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Draft/stake",279213296,711004,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Locked/stake",279213296,711004,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Finished/stake",279213296,711004,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Draft/stake",272564030,693562,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Locked/stake",272564030,693562,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Finished/stake",272564030,693562,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Draft/stake",295369526,756274,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Locked/stake",295369526,756274,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Finished/stake",295369526,756274,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",256407800,648292,7221 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",256407800,648292,7221 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,256407800,648292,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,279213296,711004,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,279213296,711004,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,279213296,711004,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,279213296,711004,7283 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Draft/stake",467699851,1181799,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Locked/stake",467699851,1181799,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Finished/stake",467699851,1181799,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Draft/stake",458202235,1157367,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Locked/stake",458202235,1157367,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Finished/stake",458202235,1157367,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Draft/stake",500012311,1272339,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Locked/stake",500012311,1272339,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Finished/stake",500012311,1272339,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",425889775,1066827,9746 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",425889775,1066827,9746 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,425889775,1066827,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,467699851,1181799,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,467699851,1181799,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,467699851,1181799,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,467699851,1181799,9868 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Draft/stake",1674013803,4194887,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Locked/stake",1674013803,4194887,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Finished/stake",1674013803,4194887,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Draft/stake",1646286747,4125719,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Locked/stake",1646286747,4125719,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Finished/stake",1646286747,4125719,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Draft/stake",1809726135,4575155,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Locked/stake",1809726135,4575155,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Finished/stake",1809726135,4575155,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",1510574415,3745451,25961 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",1510574415,3745451,25961 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,1510574415,3745451,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1674013803,4194887,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1674013803,4194887,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1674013803,4194887,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1674013803,4194887,26506 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 From f0d0188812714c208ae8e52d7e140c40f6e6818d Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 9 Jul 2022 03:39:54 +0800 Subject: [PATCH 31/78] add new tests for creating proposals --- agora-specs/Sample/Proposal.hs | 115 ------ agora-specs/Sample/Proposal/Advance.hs | 8 +- agora-specs/Sample/Proposal/Cosign.hs | 7 +- agora-specs/Sample/Proposal/Create.hs | 454 +++++++++++++++++++++ agora-specs/Sample/Proposal/Shared.hs | 32 +- agora-specs/Sample/Proposal/UnlockStake.hs | 8 +- agora-specs/Sample/Proposal/Vote.hs | 5 +- agora-specs/Spec/Proposal.hs | 77 +++- agora-testlib/Test/Specification.hs | 36 ++ agora.cabal | 2 +- bench.csv | 22 +- 11 files changed, 593 insertions(+), 173 deletions(-) delete mode 100644 agora-specs/Sample/Proposal.hs create mode 100644 agora-specs/Sample/Proposal/Create.hs diff --git a/agora-specs/Sample/Proposal.hs b/agora-specs/Sample/Proposal.hs deleted file mode 100644 index dc63fa5a..00000000 --- a/agora-specs/Sample/Proposal.hs +++ /dev/null @@ -1,115 +0,0 @@ -{- | -Module : Sample.Proposal -Maintainer : emi@haskell.fyi -Description: Sample based testing for Proposal utxos - -This module tests primarily the happy path for Proposal interactions --} -module Sample.Proposal ( - -- * Script contexts - proposalCreation, -) where - -import Agora.Governor (GovernorDatum (..)) -import Agora.Proposal ( - Proposal (..), - ProposalDatum (..), - ProposalId (..), - ProposalStatus (..), - ResultTag (..), - emptyVotesFor, - ) -import Data.Default.Class (Default (def)) -import Plutarch.Context ( - MintingBuilder, - buildMintingUnsafe, - input, - mint, - output, - script, - signedWith, - txId, - withDatum, - withTxId, - withValue, - ) -import PlutusLedgerApi.V1 ( - ScriptContext (..), - ) -import PlutusLedgerApi.V1.Value qualified as Value ( - assetClassValue, - singleton, - ) -import PlutusTx.AssocMap qualified as AssocMap -import Sample.Shared ( - govValidatorHash, - proposal, - proposalPolicySymbol, - proposalStartingTimeFromTimeRange, - proposalValidatorHash, - signer, - ) -import Test.Util ( - closedBoundedInterval, - ) - -proposalCreation :: ScriptContext -proposalCreation = - let st = Value.singleton proposalPolicySymbol "" 1 -- Proposal ST - effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - proposalDatum :: ProposalDatum - proposalDatum = - ProposalDatum - { proposalId = ProposalId 0 - , effects = effects - , status = Draft - , cosigners = [signer] - , thresholds = def - , votes = emptyVotesFor effects - , timingConfig = def - , startingTime = proposalStartingTimeFromTimeRange validTimeRange - } - - govBefore :: GovernorDatum - govBefore = - GovernorDatum - { proposalThresholds = def - , nextProposalId = ProposalId 0 - , proposalTimings = def - , createProposalTimeRangeMaxWidth = def - , maximumProposalsPerStake = 3 - } - - govAfter :: GovernorDatum - govAfter = govBefore {nextProposalId = ProposalId 1} - - validTimeRange = closedBoundedInterval 10 15 - - builder :: MintingBuilder - builder = - mconcat - [ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" - , signedWith signer - , mint st - , input $ - script govValidatorHash - . withValue (Value.assetClassValue proposal.governorSTAssetClass 1) - . withDatum govBefore - . withTxId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" - , output $ - script proposalValidatorHash - . withValue (st <> Value.singleton "" "" 10_000_000) - . withDatum proposalDatum - , output $ - script govValidatorHash - . withValue - ( Value.assetClassValue proposal.governorSTAssetClass 1 - <> Value.singleton "" "" 10_000_000 - ) - . withDatum govAfter - ] - in buildMintingUnsafe builder diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 05b4fc4f..7d7b673b 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -69,7 +69,7 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef) import Sample.Shared ( minAda, proposalPolicySymbol, @@ -79,7 +79,7 @@ import Sample.Shared ( stakeValidatorHash, ) import Sample.Shared qualified as Shared -import Test.Specification (SpecificationTree, group) +import Test.Specification (SpecificationTree, group, testValidator) import Test.Util (closedBoundedInterval, pubKeyHashes, sortValue, updateMap) -- | Parameters for state transition of proposals. @@ -512,7 +512,7 @@ mkTestTree name ps isValidForProposalValidator = group name [proposal, stake] proposal = let proposalInputDatum = mkProposalInputDatum ps - in testFunc + in testValidator isValidForProposalValidator "propsoal" (proposalValidator Shared.proposal) @@ -527,7 +527,7 @@ mkTestTree name ps isValidForProposalValidator = group name [proposal, stake] let idx = 0 stakeInputDatum = mkStakeInputDatums ps !! idx isValid = not $ ps.alterOutputStakes - in testFunc + in testValidator isValid "stake" (stakeValidator Shared.stake) diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index f04535ab..3ce7609b 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -57,7 +57,7 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef) import Sample.Shared ( minAda, proposalPolicySymbol, @@ -71,6 +71,7 @@ import Sample.Shared qualified as Shared import Test.Specification ( SpecificationTree, group, + testValidator, ) import Test.Util (closedBoundedInterval, pubKeyHashes, sortValue) @@ -317,7 +318,7 @@ mkTestTree name ps isValid = group name [proposal, stake] proposal = let proposalInputDatum = mkProposalInputDatum ps - in testFunc + in testValidator isValid "propsoal" (proposalValidator Shared.proposal) @@ -332,7 +333,7 @@ mkTestTree name ps isValid = group name [proposal, stake] let idx = 0 stakeInputDatum = mkStakeInputDatums ps !! idx isValid = not ps.alterOutputStakes - in testFunc + in testValidator isValid "stake" (stakeValidator Shared.stake) diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs new file mode 100644 index 00000000..44eacfa1 --- /dev/null +++ b/agora-specs/Sample/Proposal/Create.hs @@ -0,0 +1,454 @@ +module Sample.Proposal.Create ( + Parameters (..), + mkTestTree, + totallyValidParameters, + invalidOutputGovernorDatumParameters, + useStakeOwnBySomeoneElseParameters, + invalidOutputStakeParameters, + addInvalidLocksParameters, + exceedMaximumProposalsParameters, + timeRangeNotTightParameters, + timeRangeNotClosedParameters, + invalidProposalStatusParameters, +) where + +import Agora.Governor ( + GovernorDatum (..), + GovernorRedeemer (CreateProposal), + ) +import Agora.Governor.Scripts (governorValidator) +import Agora.Proposal ( + Proposal (governorSTAssetClass), + ProposalDatum (..), + ProposalId (ProposalId), + ProposalStatus (..), + ResultTag (ResultTag), + emptyVotesFor, + ) +import Agora.Proposal.Scripts (proposalPolicy) +import Agora.Proposal.Time (MaxTimeRangeWidth (MaxTimeRangeWidth), ProposalStartingTime (..)) +import Agora.Stake ( + ProposalLock (..), + Stake (gtClassRef), + StakeDatum (..), + StakeRedeemer (PermitVote), + ) +import Agora.Stake.Scripts (stakeValidator) +import Data.Coerce (coerce) +import Data.Default (Default (def)) +import Data.Tagged (Tagged, untag) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + mint, + output, + script, + signedWith, + timeRange, + txId, + withDatum, + withOutRef, + withValue, + ) +import PlutusLedgerApi.V1 ( + DatumHash, + POSIXTime (POSIXTime), + POSIXTimeRange, + PubKeyHash, + ScriptContext (ScriptContext), + ScriptPurpose (Minting, Spending), + TxInfo, + TxOutRef (TxOutRef), + ValidatorHash, + always, + ) +import PlutusLedgerApi.V1.Value qualified as Value +import PlutusTx.AssocMap qualified as AssocMap +import Sample.Proposal.Shared (stakeTxRef) +import Sample.Shared ( + govValidatorHash, + minAda, + proposal, + proposalPolicySymbol, + proposalStartingTimeFromTimeRange, + proposalValidatorHash, + signer, + signer2, + stake, + stakeAssetClass, + stakeValidatorHash, + ) +import Sample.Shared qualified as Shared +import Test.Specification (SpecificationTree, group, testPolicy, testValidator) +import Test.Util (closedBoundedInterval, sortValue) + +-- | Parameters for creating a proposal. +data Parameters = Parameters + { advanceNextProposalId :: Bool + -- ^ Whether to advance 'GovernorDatum.nextProposalId'. + , createdMoreThanMaximumProposals :: Bool + -- ^ Try creating more than maximum amount of proposals. + , stakeOwnerSignsTheTransaction :: Bool + -- ^ Should the stake owner sign the transaction? + , invalidNewLocks :: Bool + -- ^ Place invalid new locks on the output stake. + , alterOutputStakeOwner :: Bool + -- ^ Whether to change the 'owner' field of the output stake datum. + , timeRangeTightEnough :: Bool + -- ^ Is 'TxInfo.validTimeRange' tight enough? + , timeRangeClosed :: Bool + -- ^ Is 'TxInfo.validTimeRange' closed? + , proposalStatus :: ProposalStatus + -- ^ The status of the newly created proposal. + } + +-------------------------------------------------------------------------------- + +-- | See 'GovernorDatum.maximumProposalsPerStake'. +maxProposalPerStake :: Integer +maxProposalPerStake = 3 + +-- | The id of the proposal we are creating. +thisProposalId :: ProposalId +thisProposalId = ProposalId 25 + +-- | The arbitrary staked amount. Doesn;t really matter in this case. +stakedGTs :: Tagged _ Integer +stakedGTs = 5 + +-- | The owner of the stake. +stakeOwner :: PubKeyHash +stakeOwner = signer + +{- | The invalid stake owner. If the 'alterOutputStakeOwner' is set to true, + the output stake owner will be set to this. +-} +alteredStakeOwner :: PubKeyHash +alteredStakeOwner = signer2 + +-- | Locks the stake that the input stake already has. +defLocks :: [ProposalLock] +defLocks = [Created (ProposalId 0)] + +-- | The effect of the newly created proposal. +defEffects :: AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) +defEffects = + AssocMap.fromList + [ (ResultTag 0, AssocMap.empty) + , (ResultTag 1, AssocMap.empty) + ] + +-------------------------------------------------------------------------------- + +-- | The governor input datum. +governorInputDatum :: GovernorDatum +governorInputDatum = + GovernorDatum + { proposalThresholds = def + , nextProposalId = thisProposalId + , proposalTimings = def + , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = maxProposalPerStake + } + +-- | Create governor output datum given the parameters. +mkGovernorOutputDatum :: Parameters -> GovernorDatum +mkGovernorOutputDatum ps = + let nextPid = + if ps.advanceNextProposalId + then ProposalId $ coerce thisProposalId + 1 + else thisProposalId + in GovernorDatum + { proposalThresholds = def + , nextProposalId = nextPid + , proposalTimings = def + , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = maxProposalPerStake + } + +-------------------------------------------------------------------------------- + +-- | Create the stake input datum given the parameters. +mkStakeInputDatum :: Parameters -> StakeDatum +mkStakeInputDatum ps = + let locks = + if ps.createdMoreThanMaximumProposals + then + Created . ProposalId + <$> take + (fromInteger maxProposalPerStake) + [1 ..] + else defLocks + in StakeDatum + { stakedAmount = stakedGTs + , owner = stakeOwner + , lockedBy = locks + } + +-- | Create the stake output datum given the parameters. +mkStakeOutputDatum :: Parameters -> StakeDatum +mkStakeOutputDatum ps = + let inputDatum = mkStakeInputDatum ps + newLocks = + if ps.invalidNewLocks + then + [ Voted thisProposalId (ResultTag 0) + , Voted thisProposalId (ResultTag 1) + ] + else [Created thisProposalId] + locks = newLocks <> inputDatum.lockedBy + newOwner = mkOwner ps + in inputDatum + { owner = newOwner + , lockedBy = locks + } + +-------------------------------------------------------------------------------- + +{- | Create the proposal datum for the newly created proposal, given the + parameters. +-} +mkProposalOutputDatum :: Parameters -> ProposalDatum +mkProposalOutputDatum ps = + ProposalDatum + { proposalId = thisProposalId + , effects = defEffects + , status = ps.proposalStatus + , cosigners = [mkOwner ps] + , thresholds = def + , votes = emptyVotesFor defEffects + , timingConfig = def + , startingTime = mkProposalStartingTime ps + } + +-------------------------------------------------------------------------------- + +-- | Create time range for 'TxInfo.validTimeRange'. +mkTimeRange :: Parameters -> POSIXTimeRange +mkTimeRange ps = + if ps.timeRangeClosed + then + let s = 0 + di :: POSIXTime = coerce (def @MaxTimeRangeWidth) + o = if ps.timeRangeTightEnough then (-1) else 1 + in closedBoundedInterval s $ o + di + else always + +-- | Get the starting time of the propsoal. +mkProposalStartingTime :: Parameters -> ProposalStartingTime +mkProposalStartingTime ps = + if ps.timeRangeClosed + then proposalStartingTimeFromTimeRange $ mkTimeRange ps + else ProposalStartingTime 0 + +-- | Who should be the 'owner' of the output stake. +mkOwner :: Parameters -> PubKeyHash +mkOwner ps = + if ps.alterOutputStakeOwner + then alteredStakeOwner + else stakeOwner + +-------------------------------------------------------------------------------- + +-- | Reference to the input stake UTXO. +stakeRef :: TxOutRef +stakeRef = TxOutRef stakeTxRef 1 + +-- | Reference to the input governor UTXO. +governorRef :: TxOutRef +governorRef = TxOutRef "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" 3 + +-------------------------------------------------------------------------------- + +-- | Create a 'TxInfo' that spends a stake to create a new proposal. +createProposal :: Parameters -> TxInfo +createProposal ps = buildTxInfoUnsafe builder + where + pst = Value.singleton proposalPolicySymbol "" 1 + sst = Value.assetClassValue stakeAssetClass 1 + gst = Value.assetClassValue proposal.governorSTAssetClass 1 + + --- + + governorValue = sortValue $ gst <> minAda + stakeValue = + sortValue $ + sortValue $ + sst + <> Value.assetClassValue (untag stake.gtClassRef) (untag stakedGTs) + <> minAda + proposalValue = sortValue $ pst <> minAda + + --- + + withSig = + if ps.stakeOwnerSignsTheTransaction + then signedWith stakeOwner + else mempty + + --- + + builder :: BaseBuilder + builder = + mconcat + [ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" + , --- + withSig + , --- + mint pst + , --- + timeRange $ mkTimeRange ps + , input $ + script govValidatorHash + . withValue governorValue + . withDatum governorInputDatum + . withOutRef governorRef + , output $ + script govValidatorHash + . withValue governorValue + . withDatum (mkGovernorOutputDatum ps) + , --- + input $ + script stakeValidatorHash + . withValue stakeValue + . withDatum (mkStakeInputDatum ps) + . withOutRef stakeRef + , output $ + script stakeValidatorHash + . withValue stakeValue + . withDatum (mkStakeOutputDatum ps) + , --- + output $ + script proposalValidatorHash + . withValue proposalValue + . withDatum (mkProposalOutputDatum ps) + ] + +-------------------------------------------------------------------------------- + +-- | Spend the stake with the 'PermitVote' redeemer. +stakeRedeemer :: StakeRedeemer +stakeRedeemer = PermitVote + +-- | Spend the governor with the 'CreateProposal' redeemer. +governorRedeemer :: GovernorRedeemer +governorRedeemer = CreateProposal + +-- | Mint the PST with an arbitrary redeemer. Doesn't really matter. +proposalPolicyRedeemer :: () +proposalPolicyRedeemer = () + +-------------------------------------------------------------------------------- + +totallyValidParameters :: Parameters +totallyValidParameters = + Parameters + { advanceNextProposalId = True + , createdMoreThanMaximumProposals = False + , stakeOwnerSignsTheTransaction = True + , invalidNewLocks = False + , alterOutputStakeOwner = False + , timeRangeTightEnough = True + , timeRangeClosed = True + , proposalStatus = Draft + } + +invalidOutputGovernorDatumParameters :: Parameters +invalidOutputGovernorDatumParameters = + totallyValidParameters + { advanceNextProposalId = False + } + +useStakeOwnBySomeoneElseParameters :: Parameters +useStakeOwnBySomeoneElseParameters = + totallyValidParameters + { stakeOwnerSignsTheTransaction = False + } + +invalidOutputStakeParameters :: Parameters +invalidOutputStakeParameters = + totallyValidParameters + { alterOutputStakeOwner = True + } + +addInvalidLocksParameters :: Parameters +addInvalidLocksParameters = + totallyValidParameters + { invalidNewLocks = True + } + +exceedMaximumProposalsParameters :: Parameters +exceedMaximumProposalsParameters = + totallyValidParameters + { createdMoreThanMaximumProposals = True + } + +timeRangeNotTightParameters :: Parameters +timeRangeNotTightParameters = + totallyValidParameters + { timeRangeTightEnough = False + } + +timeRangeNotClosedParameters :: Parameters +timeRangeNotClosedParameters = + totallyValidParameters + { timeRangeClosed = False + } + +invalidProposalStatusParameters :: [Parameters] +invalidProposalStatusParameters = + map + ( \st -> + totallyValidParameters {proposalStatus = st} + ) + [VotingReady, Locked, Finished] + +-------------------------------------------------------------------------------- + +{- | Create a test tree that runs the propsoal minting policy, the governor + validator and the stake validator to test the functionalities of creting + proposals +-} +mkTestTree :: String -> Parameters -> Bool -> Bool -> Bool -> SpecificationTree +mkTestTree + name + ps + validForProposalPolicy + validForGovernorValidator + validForStakeValidator = + group name [proposalTest, governorTest, stakeTest] + where + txInfo = createProposal ps + + proposalTest = + testPolicy + validForProposalPolicy + "proposal" + (proposalPolicy Shared.proposal.governorSTAssetClass) + proposalPolicyRedeemer + (ScriptContext txInfo (Minting proposalPolicySymbol)) + + governorTest = + testValidator + validForGovernorValidator + "governor" + (governorValidator Shared.governor) + governorInputDatum + governorRedeemer + ( ScriptContext + txInfo + (Spending governorRef) + ) + + stakeTest = + testValidator + validForStakeValidator + "stake" + (stakeValidator Shared.stake) + (mkStakeInputDatum ps) + stakeRedeemer + ( ScriptContext + txInfo + (Spending stakeRef) + ) diff --git a/agora-specs/Sample/Proposal/Shared.hs b/agora-specs/Sample/Proposal/Shared.hs index 17028ee4..21b2ce12 100644 --- a/agora-specs/Sample/Proposal/Shared.hs +++ b/agora-specs/Sample/Proposal/Shared.hs @@ -1,13 +1,6 @@ -module Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) where +module Sample.Proposal.Shared (proposalTxRef, stakeTxRef) where -import Plutarch.Api.V1 (PValidator) -import Plutarch.Lift (PUnsafeLiftDecl (..)) -import PlutusLedgerApi.V1 (ScriptContext, ToData, TxId) -import Test.Specification ( - SpecificationTree, - validatorFailsWith, - validatorSucceedsWith, - ) +import PlutusLedgerApi.V1 (TxId) -- | 'TxId' of all the propsoal inputs in the samples. proposalTxRef :: TxId @@ -16,24 +9,3 @@ proposalTxRef = "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" -- | 'TxId' of all the stake inputs in the samples. stakeTxRef :: TxId stakeTxRef = "0ca36f3a357bc69579ab2531aecd1e7d3714d993c7820f40b864be15" - --- | Get the test function given whether a test case is valid. -testFunc :: - forall {datum :: PType} {redeemer :: PType}. - ( PUnsafeLiftDecl datum - , PUnsafeLiftDecl redeemer - , ToData (PLifted datum) - , ToData (PLifted redeemer) - ) => - -- | Should the validator pass? - Bool -> - String -> - ClosedTerm PValidator -> - PLifted datum -> - PLifted redeemer -> - ScriptContext -> - SpecificationTree -testFunc isValid = - if isValid - then validatorSucceedsWith - else validatorFailsWith diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index 46dd4910..529e3973 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -55,7 +55,7 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (stakeTxRef, testFunc) +import Sample.Proposal.Shared (stakeTxRef) import Sample.Shared ( minAda, proposalPolicySymbol, @@ -66,7 +66,7 @@ import Sample.Shared ( stakeValidatorHash, ) import Sample.Shared qualified as Shared -import Test.Specification (SpecificationTree, group) +import Test.Specification (SpecificationTree, group, testValidator) import Test.Util (sortValue, updateMap) -------------------------------------------------------------------------------- @@ -519,7 +519,7 @@ mkTestTree name ps isValid = group name [stake, proposal] txInfo = unlockStake ps stake = - testFunc + testValidator (not ps.alterOutputStake) "stake" (stakeValidator Shared.stake) @@ -531,7 +531,7 @@ mkTestTree name ps isValid = group name [stake, proposal] let idx = 0 pid = ProposalId $ fromIntegral idx ref = mkProposalRef idx - in testFunc + in testValidator isValid "propsoal" (proposalValidator Shared.proposal) diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index 3dbc9169..c2af036e 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -47,7 +47,7 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (proposalTxRef, stakeTxRef, testFunc) +import Sample.Proposal.Shared (proposalTxRef, stakeTxRef) import Sample.Shared ( minAda, proposalPolicySymbol, @@ -61,6 +61,7 @@ import Sample.Shared qualified as Shared import Test.Specification ( SpecificationTree, group, + testValidator, validatorSucceedsWith, ) import Test.Util (closedBoundedInterval, sortValue, updateMap) @@ -243,7 +244,7 @@ mkTestTree name ps isValid = group name [proposal, stake] txInfo = vote ps proposal = - testFunc + testValidator isValid "propsoal" (proposalValidator Shared.proposal) diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index 0e5b0adb..9ef2416c 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -7,32 +7,83 @@ Tests for Proposal policy and validator -} module Spec.Proposal (specs) where -import Agora.Proposal ( - Proposal (..), - ) -import Agora.Proposal.Scripts (proposalPolicy) -import Sample.Proposal qualified as Proposal import Sample.Proposal.Advance qualified as Advance import Sample.Proposal.Cosign qualified as Cosign +import Sample.Proposal.Create qualified as Create import Sample.Proposal.UnlockStake qualified as UnlockStake import Sample.Proposal.Vote qualified as Vote -import Sample.Shared qualified as Shared (proposal) import Test.Specification ( SpecificationTree, group, - policySucceedsWith, ) -- | Stake specs. specs :: [SpecificationTree] specs = [ group - "policy" - [ policySucceedsWith - "proposalCreation" - (proposalPolicy Shared.proposal.governorSTAssetClass) - () - Proposal.proposalCreation + "policy (proposal creation)" + [ Create.mkTestTree + "legal" + Create.totallyValidParameters + True + True + True + , group + "illegal" + [ Create.mkTestTree + "invalid next proposal id" + Create.invalidOutputGovernorDatumParameters + True + False + True + , Create.mkTestTree + "use other's stake" + Create.useStakeOwnBySomeoneElseParameters + True + False + False + , Create.mkTestTree + "altered stake" + Create.invalidOutputStakeParameters + True + False + False + , Create.mkTestTree + "invalid stake locks" + Create.addInvalidLocksParameters + True + False + True + , Create.mkTestTree + "has reached maximum proposals limit" + Create.exceedMaximumProposalsParameters + True + False + True + , Create.mkTestTree + "loose time range" + Create.timeRangeNotTightParameters + True + False + True + , Create.mkTestTree + "open time range" + Create.timeRangeNotClosedParameters + True + False + True + , group "invalid proposal status" $ + map + ( \ps -> + Create.mkTestTree + (show ps.proposalStatus) + ps + True + False + True + ) + Create.invalidProposalStatusParameters + ] ] , group "validator" diff --git a/agora-testlib/Test/Specification.hs b/agora-testlib/Test/Specification.hs index e228a688..2594b010 100644 --- a/agora-testlib/Test/Specification.hs +++ b/agora-testlib/Test/Specification.hs @@ -42,6 +42,8 @@ module Test.Specification ( validatorFailsWith, effectSucceedsWith, effectFailsWith, + testValidator, + testPolicy, -- * Converters toTestTree, @@ -253,3 +255,37 @@ effectFailsWith :: ScriptContext -> SpecificationTree effectFailsWith tag eff datum = validatorFailsWith tag eff datum () + +testValidator :: + ( PLift datum + , PlutusTx.ToData (PLifted datum) + , PLift redeemer + , PlutusTx.ToData (PLifted redeemer) + ) => + -- | Should the validator pass? + Bool -> + String -> + ClosedTerm PValidator -> + PLifted datum -> + PLifted redeemer -> + ScriptContext -> + SpecificationTree +testValidator isValid = + if isValid + then validatorSucceedsWith + else validatorFailsWith + +testPolicy :: + ( PLift redeemer + , PlutusTx.ToData (PLifted redeemer) + ) => + Bool -> + String -> + ClosedTerm PMintingPolicy -> + PLifted redeemer -> + ScriptContext -> + SpecificationTree +testPolicy isValid = + if isValid + then policySucceedsWith + else policyFailsWith diff --git a/agora.cabal b/agora.cabal index 08f9e995..cb0283cf 100644 --- a/agora.cabal +++ b/agora.cabal @@ -188,9 +188,9 @@ library agora-specs Sample.Effect.GovernorMutation Sample.Effect.TreasuryWithdrawal Sample.Governor - Sample.Proposal Sample.Proposal.Advance Sample.Proposal.Cosign + Sample.Proposal.Create Sample.Proposal.Shared Sample.Proposal.UnlockStake Sample.Proposal.Vote diff --git a/bench.csv b/bench.csv index ccb52389..cc604373 100644 --- a/bench.csv +++ b/bench.csv @@ -7,7 +7,27 @@ Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 -Agora/Proposal/policy/proposalCreation,23140177,69194,1517 +Agora/Proposal/policy (proposal creation)/legal/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/legal/governor,327971301,871386,9322 +Agora/Proposal/policy (proposal creation)/legal/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,34975627,103548,2086 +Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,34975627,103548,2125 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,157849465,413053,5412 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,34975627,103548,2137 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,158878297,416511,5434 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,34975627,103548,2113 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,152415805,398403,5400 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,152415805,398403,5404 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,231665387,648239,8164 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,122255811,317464,5213 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,662329378,1846986,10794 From 4b3003fdc8e2a928cedcb9a78c4e77bd38a930c2 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 11 Jul 2022 23:21:29 +0800 Subject: [PATCH 32/78] add missing module headers --- agora-specs/Sample/Governor.hs | 2 +- agora-specs/Sample/Proposal/Advance.hs | 7 +++++++ agora-specs/Sample/Proposal/Cosign.hs | 7 +++++++ agora-specs/Sample/Proposal/Create.hs | 7 +++++++ agora-specs/Sample/Proposal/Shared.hs | 7 +++++++ agora-specs/Sample/Proposal/UnlockStake.hs | 7 +++++++ agora-specs/Sample/Proposal/Vote.hs | 7 +++++++ 7 files changed, 43 insertions(+), 1 deletion(-) diff --git a/agora-specs/Sample/Governor.hs b/agora-specs/Sample/Governor.hs index 695526e1..44d0105f 100644 --- a/agora-specs/Sample/Governor.hs +++ b/agora-specs/Sample/Governor.hs @@ -1,5 +1,5 @@ {- | -Module : Spec.Sample.Governor +Module : Sample.Governor Maintainer : connor@mlabs.city Description: Sample based testing for Governor utxos diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 7d7b673b..73c2ab60 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -1,3 +1,10 @@ +{- | +Module : Sample.Proposal.Advance +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of advancing proposals + +Sample and utilities for testing the functionalities of advancing proposals. +-} module Sample.Proposal.Advance ( advanceToNextStateInTimeParameters, advanceToFailedStateDueToTimeoutParameters, diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index 3ce7609b..f9a3865d 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -1,3 +1,10 @@ +{- | +Module : Sample.Proposal.Cosign +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of cosigning proposals + +Sample and utilities for testing the functionalities of cosigning proposals. +-} module Sample.Proposal.Cosign ( Parameters (..), validCosignNParameters, diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index 44eacfa1..35562565 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -1,3 +1,10 @@ +{- | +Module : Sample.Proposal.Create +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of creating proposals + +Sample and utilities for testing the functionalities of creating proposals. +-} module Sample.Proposal.Create ( Parameters (..), mkTestTree, diff --git a/agora-specs/Sample/Proposal/Shared.hs b/agora-specs/Sample/Proposal/Shared.hs index 21b2ce12..0082f68a 100644 --- a/agora-specs/Sample/Proposal/Shared.hs +++ b/agora-specs/Sample/Proposal/Shared.hs @@ -1,3 +1,10 @@ +{- | +Module : Sample.Proposal.Shared +Maintainer : connor@mlabs.city +Description: Shared constants for propsoal samples + +Shared constants for propsoal samples. +-} module Sample.Proposal.Shared (proposalTxRef, stakeTxRef) where import PlutusLedgerApi.V1 (TxId) diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index 529e3973..20b1be52 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -1,3 +1,10 @@ +{- | +Module : Sample.Proposal.UnlockStake +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of unlocking stake and retracting votes + +Sample and utilities for testing the functionalities of unlocking stake and retracting votes +-} module Sample.Proposal.UnlockStake ( StakeRole (..), Parameters (..), diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index c2af036e..36ed93db 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -1,3 +1,10 @@ +{- | +Module : Sample.Proposal.Vote +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of voting on proposals. + +Sample and utilities for testing the functionalities of voting on proposals. +-} module Sample.Proposal.Vote ( validVoteParameters, mkTestTree, From 77894c02283005e37b63a7f33575d78aa675be35 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 13 Jul 2022 01:47:15 +0800 Subject: [PATCH 33/78] apply Emily's suggestions * Comment on `validateOutputLocks` * Assertion message rewording * Some comment rewording * Fix Typos * Correct `PShow` instances, derive as much we can * Remove redundant checks --- agora/Agora/Governor.hs | 3 +- agora/Agora/Governor/Scripts.hs | 2 +- agora/Agora/Proposal.hs | 14 ++--- agora/Agora/Proposal/Scripts.hs | 10 ++-- agora/Agora/Stake.hs | 6 +-- bench.csv | 94 ++++++++++++++++----------------- 6 files changed, 63 insertions(+), 66 deletions(-) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 4c093fe1..7378fe78 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -74,7 +74,8 @@ data GovernorDatum = GovernorDatum , createProposalTimeRangeMaxWidth :: MaxTimeRangeWidth -- ^ The maximum valid duration of a transaction that creats a proposal. , maximumProposalsPerStake :: Integer - -- ^ The maximum number of *alive* proposals which were careated by a stake. + -- ^ The maximum number of unfinished proposals that a stake is allowed to be + -- associated to. } deriving stock (Show, GHC.Generic) diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index dc7a72be..6f8c7786 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -378,7 +378,7 @@ governorValidator gov = stakeInputDatumF <- pletFieldsC @["stakedAmount", "owner", "lockedBy"] stakeInputDatum - pguardC "Didn't created too many proposals" $ + pguardC "Proposals created by the stake must not exceed the number stored in the governor." $ pnumCreatedProposals # stakeInputDatumF.lockedBy #< oldGovernorDatumF.maximumProposalsPerStake diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 95b2a5da..45758d4e 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -409,6 +409,8 @@ newtype PResultTag (s :: S) = PResultTag (Term s PInteger) PEq , -- | @since 0.1.0 POrd + , -- | @since 0.2.0 + PShow ) via (DerivePNewtype PResultTag PInteger) @@ -427,11 +429,6 @@ deriving via instance PTryFrom PData (PAsData PResultTag) --- | @since 0.2.0 -instance PShow PResultTag where - pshow' :: Bool -> Term s PResultTag -> Term s PString - pshow' _ x = pshow @PInteger $ pto x - {- | Plutarch-level version of 'PProposalId'. @since 0.1.0 @@ -446,6 +443,8 @@ newtype PProposalId (s :: S) = PProposalId (Term s PInteger) PEq , -- | @since 0.1.0 POrd + , -- | @since 0.2.0 + PShow ) via (DerivePNewtype PProposalId PInteger) @@ -464,11 +463,6 @@ deriving via instance (PConstantDecl ProposalId) --- | @since 0.2.0 -instance PShow PProposalId where - pshow' :: Bool -> Term s PProposalId -> Term s PString - pshow' _ x = pshow @PInteger $ pto x - {- | Plutarch-level version of 'ProposalStatus'. @since 0.1.0 diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 495c0edd..e6424b28 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -533,10 +533,6 @@ proposalValidator proposal = ---------------------------------------------------------------------- PUnlock _ -> withSingleStake $ \stakeInF stakeOut _ -> do - -- At draft stage, the votes should be empty. - pguardC "Shouldn't retract votes from a draft proposal" $ - pnot #$ currentStatus #== pconstant Draft - stakeRole <- pletC $ pgetStakeRole # proposalF.proposalId # stakeInF.lockedBy pguardC "Stake input should be relevant" $ @@ -556,6 +552,12 @@ proposalValidator proposal = isCreator = pisCreator # stakeRole + -- If the stake has been used for creating the proposal, + -- the creator lock can only be removed when the proposal + -- is finished. + -- + -- In other cases, all the locks related to this + -- proposal should be removed. validateOutputLocks = plam $ \locks -> plet ( pgetStakeRole # proposalF.proposalId # locks diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 329ace5e..b680ae73 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -371,11 +371,11 @@ deriving via -- | @since 0.2.0 instance PShow PProposalLock where pshow' :: Bool -> Term s PProposalLock -> Term s PString - pshow' True _ = "(..)" + pshow' True x = "(" <> pshow' False x <> ")" pshow' False lock = pmatch lock $ \case - PCreated ((pfield @"created" #) -> pid) -> "Created " <> pshow pid + PCreated ((pfield @"created" #) -> pid) -> "PCreated " <> pshow' True pid PVoted x -> pletFields @'["votedOn", "votedFor"] x $ \xF -> - "Voted on " <> pshow xF.votedOn <> " for " <> pshow xF.votedFor + "PVoted " <> pshow' True xF.votedOn <> " " <> pshow' True xF.votedFor -------------------------------------------------------------------------------- diff --git a/bench.csv b/bench.csv index cc604373..8dd401c5 100644 --- a/bench.csv +++ b/bench.csv @@ -2,13 +2,13 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,88940927,246756,8843 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,88940927,246756,8891 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,107090537,296185,3627 Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 Agora/Proposal/policy (proposal creation)/legal/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/legal/governor,327971301,871386,9322 +Agora/Proposal/policy (proposal creation)/legal/governor,327971301,871386,9370 Agora/Proposal/policy (proposal creation)/legal/stake,152415805,398403,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,34975627,103548,2117 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,152415805,398403,5404 @@ -28,11 +28,11 @@ Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,152415805,398403,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,34975627,103548,2117 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,152415805,398403,5404 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,231665387,648239,8164 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,232230876,649441,8097 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,122255811,317464,5213 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,662329378,1846986,10794 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,662894867,1848188,10727 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,553050999,1459872,7723 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1315001587,3605673,14082 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1315567076,3606875,14015 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1101023340,2912657,10860 Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,122255811,317464,5213 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,122255811,317464,5213 @@ -44,89 +44,89 @@ Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 co Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1101023340,2912657,10860 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1101023340,2912657,10860 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1101023340,2912657,10860 -Agora/Proposal/validator/voting/legal/propsoal,254672808,713771,8146 +Agora/Proposal/validator/voting/legal/propsoal,253541830,711367,8079 Agora/Proposal/validator/voting/legal/stake,139493011,366217,5239 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8127 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8060 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,122255811,317464,5222 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8129 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8062 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,122255811,317464,5224 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117978393,308804,5152 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10982 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10915 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,499559031,1304096,7957 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8490 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8423 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,122255811,317464,5465 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446950999,1172710,7606 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14551 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14484 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1129251912,2994677,11375 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8943 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8876 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,122255811,317464,5767 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013080113,2701103,10673 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8136 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8069 Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,122255811,317464,5229 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8136 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8069 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,122255811,317464,5229 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8130 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8063 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,122255811,317464,5225 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8130 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8063 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,122255811,317464,5225 Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,122255811,317464,5225 Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,122255811,317464,5217 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,128424052,334368,5219 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236724208,665425,8127 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236436652,664524,8060 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,131655298,343422,5235 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,250196415,705367,8138 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,249908859,704466,8071 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,128424052,334368,5217 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204516343,585280,8124 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204228787,584379,8057 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,128424052,334368,5233 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212950600,610184,8136 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212663044,609283,8069 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,128424052,334368,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205832495,589164,8131 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205544939,588263,8064 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,128424052,334368,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205832495,589164,8131 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205544939,588263,8064 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,131655298,343422,5239 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219836278,630498,8142 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219548722,629597,8075 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,279213296,711004,7303 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379365456,1078089,10187 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379077900,1077188,10120 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,295369526,756274,7380 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444893991,1269343,10239 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444606435,1268442,10172 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,279213296,711004,7293 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312597155,903136,10180 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312309599,902235,10113 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,279213296,711004,7374 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350986136,1014888,10233 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350698580,1013987,10166 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,279213296,711004,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,318066415,918212,10208 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317778859,917311,10141 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,279213296,711004,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,318066415,918212,10208 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317778859,917311,10141 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,295369526,756274,7400 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,384126526,1110858,10259 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383838970,1109957,10192 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,467699851,1181799,9909 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557667016,1593919,12763 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557379460,1593018,12696 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,500012311,1272339,10060 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,688265961,1974313,12864 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,687978405,1973412,12797 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,467699851,1181799,9888 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447698170,1300456,12750 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447410614,1299555,12683 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,467699851,1181799,10049 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523530556,1520768,12853 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523243000,1519867,12786 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,467699851,1181799,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458358815,1329522,12803 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458071259,1328621,12736 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,467699851,1181799,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458358815,1329522,12803 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458071259,1328621,12736 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,500012311,1272339,10100 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589489336,1711308,12904 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589201780,1710407,12837 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1674013803,4194887,26674 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698797000,4895231,29317 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698509444,4894330,29250 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1809726135,4575155,27362 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245846569,6486121,29776 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245559013,6485220,29709 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1674013803,4194887,26590 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312344666,3843304,29273 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312057110,3842403,29206 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1674013803,4194887,27301 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627814844,4758400,29715 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627527288,4757499,29648 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1674013803,4194887,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1356230175,3961906,29486 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1355942619,3961005,29419 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1674013803,4194887,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1356230175,3961906,29486 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1355942619,3961005,29419 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1809726135,4575155,27531 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903811320,5554188,29945 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903523764,5553287,29878 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",128424052,334368,5219 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",128424052,334368,5219 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",128424052,334368,5219 @@ -229,6 +229,6 @@ Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 Agora/Governor/policy/GST minting,51480023,145787,2048 -Agora/Governor/validator/proposal creation,303114849,813451,9342 -Agora/Governor/validator/GATs minting,422654153,1147158,9468 -Agora/Governor/validator/mutate governor state,90087778,252215,8943 +Agora/Governor/validator/proposal creation,303114849,813451,9390 +Agora/Governor/validator/GATs minting,422654153,1147158,9516 +Agora/Governor/validator/mutate governor state,90087778,252215,8991 From a54a809a05ccb8aa0ce6c72b313831151d9abfb1 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 13 Jul 2022 16:58:13 +0800 Subject: [PATCH 34/78] remove field names from `ProposalLock` so that ps-bridge works correctly --- agora/Agora/Stake.hs | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index b680ae73..cb142294 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -113,9 +113,8 @@ data ProposalLock -- -- @since 0.2.0 Created - { craeted :: ProposalId + ProposalId -- ^ The identifier of the proposal. - } | -- | The stake was used to vote on a proposal. -- -- This kind of lock is placed while voting on a propsoal, in order to @@ -123,11 +122,10 @@ data ProposalLock -- -- @since 0.2.0 Voted - { votedOn :: ProposalId + ProposalId -- ^ The identifier of the proposal. - , votedFor :: ResultTag + ResultTag -- ^ The option which was voted on. This allows votes to be retracted. - } deriving stock ( -- | @since 0.1.0 Show From d3db5552ffa55923e4de23f4383ea50ae3950271 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Wed, 13 Jul 2022 16:29:43 +0200 Subject: [PATCH 35/78] add trivial scripts to export --- agora-scripts/Main.hs | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index 0fdc5aed..c6008c91 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -50,6 +50,7 @@ main = builders :: Builders builders = def + -- Agora scripts & insertBuilder "governorPolicy" ((.governorPolicyInfo) . agoraScripts) & insertBuilder "governorValidator" ((.governorValidatorInfo) . agoraScripts) & insertBuilder "stakePolicy" ((.stakePolicyInfo) . agoraScripts) @@ -59,6 +60,17 @@ builders = & insertBuilder "treasuryValidator" ((.treasuryValidatorInfo) . agoraScripts) & insertBuilder "authorityTokenPolicy" ((.authorityTokenPolicyInfo) . agoraScripts) + -- Trivial scripts. These are useful for testing, but they likely aren't useful + -- to you if you are actually interested in deploying to mainnet. + & insertBuilder "alwaysSucceedsPolicy" + (\() -> mkPolicyInfo $ plam $ \_ _ -> popaque (pconstant ()) ) + & insertBuilder "alwaysSucceedsValidator" + (\() -> mkValidatorInfo $ plam $ \_ _ _ -> popaque (pconstant ()) ) + & insertBuilder "neverSucceedsPolicy" + (\() -> mkPolicyInfo $ plam $ \_ _ -> perror ) + & insertBuilder "neverSucceedsValidator" + (\() -> mkValidatorInfo $ plam $ \_ _ _ -> perror ) + {- | Create scripts from params. @since 0.2.0 From 731011d0843c2038c98b626e47cd9813485358f8 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Wed, 13 Jul 2022 16:29:56 +0200 Subject: [PATCH 36/78] add unreleased section to CHANGELOG.md --- CHANGELOG.md | 30 ++++++++++++++++++++++++++++++ agora-scripts/Main.hs | 21 ++++++++++++--------- 2 files changed, 42 insertions(+), 9 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 787db68a..a26e5e76 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,6 +2,36 @@ This format is based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0). + +## Unreleased (Candidate for 0.2.0) + +### Added + +- Script exporting with `plutarch-script-export` + +### Modified + +- Draft phase and cosigning for Proposals. + + Included by [#136](https://github.com/Liqwid-Labs/agora/pull/136). + +- Fixed bug with regards to moving from `VotingReady`. + + Included by [#134](https://github.com/Liqwid-Labs/agora/pull/134). + +- Fixed bug that made it impossible to create proposals. Added new stake locking mechanism for creating proposals. + + Included by [#142](https://github.com/Liqwid-Labs/agora/pull/142). + + NOTE: This changes the representation of the following types: + + - `PProposalLock` + - `PStakeDatum` + - `PStakeRedeemer` + - `PProposalRedeemer` + - `PTreasuryRedeemer` + - `PGovernorDatum` + ## 0.1.0 -- 2022-06-22 ### Added diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index c6008c91..4811ab52 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -59,17 +59,20 @@ builders = & insertBuilder "proposalValidator" ((.proposalValidatorInfo) . agoraScripts) & insertBuilder "treasuryValidator" ((.treasuryValidatorInfo) . agoraScripts) & insertBuilder "authorityTokenPolicy" ((.authorityTokenPolicyInfo) . agoraScripts) - -- Trivial scripts. These are useful for testing, but they likely aren't useful -- to you if you are actually interested in deploying to mainnet. - & insertBuilder "alwaysSucceedsPolicy" - (\() -> mkPolicyInfo $ plam $ \_ _ -> popaque (pconstant ()) ) - & insertBuilder "alwaysSucceedsValidator" - (\() -> mkValidatorInfo $ plam $ \_ _ _ -> popaque (pconstant ()) ) - & insertBuilder "neverSucceedsPolicy" - (\() -> mkPolicyInfo $ plam $ \_ _ -> perror ) - & insertBuilder "neverSucceedsValidator" - (\() -> mkValidatorInfo $ plam $ \_ _ _ -> perror ) + & insertBuilder + "alwaysSucceedsPolicy" + (\() -> mkPolicyInfo $ plam $ \_ _ -> popaque (pconstant ())) + & insertBuilder + "alwaysSucceedsValidator" + (\() -> mkValidatorInfo $ plam $ \_ _ _ -> popaque (pconstant ())) + & insertBuilder + "neverSucceedsPolicy" + (\() -> mkPolicyInfo $ plam $ \_ _ -> perror) + & insertBuilder + "neverSucceedsValidator" + (\() -> mkValidatorInfo $ plam $ \_ _ _ -> perror) {- | Create scripts from params. From 8017b0df1774898e2af7c73dd6a1b7faf18f983a Mon Sep 17 00:00:00 2001 From: Seungheon Oh Date: Thu, 14 Jul 2022 11:21:31 -0500 Subject: [PATCH 37/78] Deprecate Github CI; using Hydra instead --- .github/workflows/integrate.yaml | 76 -------------------------------- 1 file changed, 76 deletions(-) delete mode 100644 .github/workflows/integrate.yaml diff --git a/.github/workflows/integrate.yaml b/.github/workflows/integrate.yaml deleted file mode 100644 index 47f58863..00000000 --- a/.github/workflows/integrate.yaml +++ /dev/null @@ -1,76 +0,0 @@ -on: - push: - paths: - - ".github/workflows/integrate.yaml" - - "**.hs" - - "**.nix" - - "flake.lock" - - "agora.cabal" - branches: - - main - - staging - pull_request: - paths: - - ".github/workflows/integrate.yaml" - - "**.hs" - - "**.nix" - - "flake.lock" - - "agora.cabal" -jobs: - flake: - runs-on: ubuntu-latest - strategy: - matrix: - tasks: - - agora - - formatCheck - - benchCheck - - agora-test - steps: - - uses: actions/checkout@v2.4.0 - - - uses: cachix/install-nix-action@v16 - name: Set up Nix and IOHK caches - with: - nix_path: nixpkgs=channel:nixos-unstable - extra_nix_config: | - trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= - substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/ - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v10 - with: - name: mlabs - authToken: ${{ secrets.CACHIX_KEY }} - - - run: nix build .#checks.x86_64-linux.${{ matrix.tasks }} - name: Run '${{ matrix.tasks }}' from flake.nix - - haddock: - runs-on: ubuntu-latest - steps: - - uses: actions/checkout@v2.4.0 - - - uses: cachix/install-nix-action@v16 - name: Set up Nix and IOHK caches - with: - nix_path: nixpkgs=channel:nixos-unstable - extra_nix_config: | - trusted-public-keys = hydra.iohk.io:f/Ea+s+dFdN+3Y/G+FDgSq+a5NEWhJGzdjvKNGv0/EQ= iohk.cachix.org-1:DpRUyj7h7V830dp/i6Nti+NEO2/nhblbov/8MW7Rqoo= cache.nixos.org-1:6NCHdD59X431o0gWypbMrAURkbJ16ZPMQFGspcDShjY= - substituters = https://hydra.iohk.io https://iohk.cachix.org https://cache.nixos.org/ - experimental-features = nix-command flakes - - uses: cachix/cachix-action@v10 - with: - name: mlabs - authToken: ${{ secrets.CACHIX_KEY }} - - - run: nix build .#packages.x86_64-linux.haddock - name: Run 'haddock' from flake.nix - - # This publishes the haddock result to the branch 'gh-pages', - # which is set to automatically deploy to https://liqwid-labs.github.io/agora/. - - name: Publish Documentation - uses: peaceiris/actions-gh-pages@v3 - if: github.ref == 'refs/heads/main' - with: - github_token: ${{ secrets.GITHUB_TOKEN }} - publish_dir: ./result/agora/html \ No newline at end of file From 915e772c622d0a0e698ef088a325f3ac3ee1f84b Mon Sep 17 00:00:00 2001 From: SeungheonOh Date: Thu, 14 Jul 2022 14:37:18 -0500 Subject: [PATCH 38/78] Removed GH action bedge --- README.md | 1 - 1 file changed, 1 deletion(-) diff --git a/README.md b/README.md index d2887259..afcaff5c 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,4 @@ # Agora :classical_building: -![integrate.yaml badge](https://github.com/Liqwid-Labs/agora/actions/workflows/integrate.yaml/badge.svg?branch=master) Agora is a set of Plutus scripts that compose together to form a governance system. From 6d7bee611a836e3c7bbb56a5e826413bfb22e961 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 13 Jul 2022 17:58:18 +0800 Subject: [PATCH 39/78] check the amount of cosigners while cosigning --- agora-specs/Sample/Shared.hs | 2 +- agora/Agora/Proposal/Scripts.hs | 5 +- bench.csv | 84 ++++++++++++++++----------------- 3 files changed, 47 insertions(+), 44 deletions(-) diff --git a/agora-specs/Sample/Shared.hs b/agora-specs/Sample/Shared.hs index c1197e31..4cc917e2 100644 --- a/agora-specs/Sample/Shared.hs +++ b/agora-specs/Sample/Shared.hs @@ -138,7 +138,7 @@ governor = Governor oref gt mc Value.assetClass "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" "LQ" - mc = 6 + mc = 20 govPolicy :: MintingPolicy govPolicy = mkMintingPolicy (governorPolicy governor) diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index e6424b28..9412b1eb 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -14,7 +14,7 @@ import Agora.Proposal ( PProposalDatum (PProposalDatum), PProposalRedeemer (..), PProposalVotes (PProposalVotes), - Proposal (governorSTAssetClass, stakeSTAssetClass), + Proposal (..), ProposalStatus (..), pretractVotes, pwinner', @@ -429,6 +429,9 @@ proposalValidator proposal = # newSigs # proposalF.cosigners + pguardC "Less cosigners than maximum limit" $ + plength # updatedSigs #< pconstant proposal.maximumCosigners + pguardC "Cosigners are unique" $ pisUniq' # updatedSigs diff --git a/bench.csv b/bench.csv index 8dd401c5..0caf6cfe 100644 --- a/bench.csv +++ b/bench.csv @@ -28,11 +28,11 @@ Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,152415805,398403,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,34975627,103548,2117 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,152415805,398403,5404 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,232230876,649441,8097 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235405219,657707,8151 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,122255811,317464,5213 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,662894867,1848188,10727 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,670429262,1868318,10781 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,553050999,1459872,7723 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1315567076,3606875,14015 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1328551536,3641835,14069 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1101023340,2912657,10860 Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,122255811,317464,5213 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,122255811,317464,5213 @@ -44,89 +44,89 @@ Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 co Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1101023340,2912657,10860 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1101023340,2912657,10860 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1101023340,2912657,10860 -Agora/Proposal/validator/voting/legal/propsoal,253541830,711367,8079 +Agora/Proposal/validator/voting/legal/propsoal,253541830,711367,8133 Agora/Proposal/validator/voting/legal/stake,139493011,366217,5239 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8060 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8114 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,122255811,317464,5222 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8062 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8116 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,122255811,317464,5224 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117978393,308804,5152 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10915 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10969 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,499559031,1304096,7957 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8423 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8477 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,122255811,317464,5465 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446950999,1172710,7606 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14484 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14538 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1129251912,2994677,11375 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8876 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8930 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,122255811,317464,5767 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013080113,2701103,10673 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8069 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8123 Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,122255811,317464,5229 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8069 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8123 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,122255811,317464,5229 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8063 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8117 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,122255811,317464,5225 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8063 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8117 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,122255811,317464,5225 Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,122255811,317464,5225 Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,122255811,317464,5217 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,128424052,334368,5219 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236436652,664524,8060 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236436652,664524,8114 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,131655298,343422,5235 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,249908859,704466,8071 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,249908859,704466,8125 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,128424052,334368,5217 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204228787,584379,8057 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204228787,584379,8111 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,128424052,334368,5233 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212663044,609283,8069 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212663044,609283,8123 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,128424052,334368,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205544939,588263,8064 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205544939,588263,8118 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,128424052,334368,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205544939,588263,8064 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205544939,588263,8118 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,131655298,343422,5239 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219548722,629597,8075 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219548722,629597,8129 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,279213296,711004,7303 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379077900,1077188,10120 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379077900,1077188,10174 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,295369526,756274,7380 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444606435,1268442,10172 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444606435,1268442,10226 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,279213296,711004,7293 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312309599,902235,10113 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312309599,902235,10167 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,279213296,711004,7374 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350698580,1013987,10166 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350698580,1013987,10220 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,279213296,711004,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317778859,917311,10141 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317778859,917311,10195 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,279213296,711004,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317778859,917311,10141 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317778859,917311,10195 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,295369526,756274,7400 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383838970,1109957,10192 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383838970,1109957,10246 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,467699851,1181799,9909 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557379460,1593018,12696 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557379460,1593018,12750 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,500012311,1272339,10060 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,687978405,1973412,12797 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,687978405,1973412,12851 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,467699851,1181799,9888 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447410614,1299555,12683 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447410614,1299555,12737 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,467699851,1181799,10049 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523243000,1519867,12786 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523243000,1519867,12840 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,467699851,1181799,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458071259,1328621,12736 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458071259,1328621,12790 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,467699851,1181799,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458071259,1328621,12736 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458071259,1328621,12790 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,500012311,1272339,10100 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589201780,1710407,12837 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589201780,1710407,12891 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1674013803,4194887,26674 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698509444,4894330,29250 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698509444,4894330,29304 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1809726135,4575155,27362 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245559013,6485220,29709 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245559013,6485220,29763 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1674013803,4194887,26590 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312057110,3842403,29206 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312057110,3842403,29260 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1674013803,4194887,27301 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627527288,4757499,29648 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627527288,4757499,29702 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1674013803,4194887,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1355942619,3961005,29419 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1355942619,3961005,29473 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1674013803,4194887,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1355942619,3961005,29419 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1355942619,3961005,29473 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1809726135,4575155,27531 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903523764,5553287,29878 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903523764,5553287,29932 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",128424052,334368,5219 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",128424052,334368,5219 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",128424052,334368,5219 From a19bbce198671b391246b223d902edc0803161f7 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 16 Jul 2022 16:33:24 +0800 Subject: [PATCH 40/78] bump `liqwid-plutarch-extra` --- flake.lock | 8 ++++---- flake.nix | 2 +- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/flake.lock b/flake.lock index 34e3e2ca..b6fdbdab 100644 --- a/flake.lock +++ b/flake.lock @@ -7429,17 +7429,17 @@ "plutarch-quickcheck": "plutarch-quickcheck" }, "locked": { - "lastModified": 1656396683, - "narHash": "sha256-Elk16j7kZcO9U9phqrY915rTEqkPchDZ9QydH+VmiC8=", + "lastModified": 1657959892, + "narHash": "sha256-DKIu0T87UjhaQ96NdibFiIfvnQLN/eJYuLMiPgQmmT8=", "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "6bcd6068593b00adc4a1afd59b127398ea37d770", + "rev": "a951b85d15e7cca1a03dd2a8e36b60fae561d74a", "type": "github" }, "original": { "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "6bcd6068593b00adc4a1afd59b127398ea37d770", + "rev": "a951b85d15e7cca1a03dd2a8e36b60fae561d74a", "type": "github" } }, diff --git a/flake.nix b/flake.nix index c4849e79..6d915d79 100644 --- a/flake.nix +++ b/flake.nix @@ -17,7 +17,7 @@ "plutarch/haskell-nix/nixpkgs-unstable"; inputs.liqwid-plutarch-extra.url = - "github:Liqwid-Labs/liqwid-plutarch-extra?rev=6bcd6068593b00adc4a1afd59b127398ea37d770"; + "github:Liqwid-Labs/liqwid-plutarch-extra?rev=a951b85d15e7cca1a03dd2a8e36b60fae561d74a"; inputs.plutarch-numeric.url = "github:Liqwid-Labs/plutarch-numeric?ref=main"; inputs.plutarch-safe-money.url = From b6fb23975ceb0fb6bdfe9d857892f586feb49daf Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 13 Jul 2022 19:01:51 +0800 Subject: [PATCH 41/78] improve performance of the governor validator --- agora-specs/Property/Governor.hs | 16 -- agora-specs/Spec/AuthorityToken.hs | 25 +-- agora-specs/Spec/Proposal.hs | 2 +- agora/Agora/AuthorityToken.hs | 10 +- agora/Agora/Effect.hs | 7 +- agora/Agora/Governor.hs | 2 - agora/Agora/Governor/Scripts.hs | 244 +++++++++-------------------- agora/Agora/Proposal.hs | 87 +++++----- agora/Agora/Proposal/Scripts.hs | 3 +- agora/Agora/Stake.hs | 26 ++- agora/Agora/Treasury.hs | 5 +- agora/Agora/Utils.hs | 35 ----- bench.csv | 31 ++-- 13 files changed, 170 insertions(+), 323 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 7d45d992..81df6590 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -62,8 +62,6 @@ data GovernorDatumCases = ExecuteLE0 | CreateLE0 | VoteLE0 - | CreateLEVote - | ExecuteLVote | Correct deriving stock (Eq, Show) @@ -72,8 +70,6 @@ instance Universe GovernorDatumCases where [ ExecuteLE0 , CreateLE0 , VoteLE0 - , CreateLEVote - , ExecuteLVote , Correct ] @@ -94,8 +90,6 @@ governorDatumValidProperty = | e < 0 = ExecuteLE0 | c < 0 = CreateLE0 | v < 0 = VoteLE0 - | c > v = CreateLEVote - | v >= e = ExecuteLVote | otherwise = Correct expected :: GovernorDatum -> Maybe Bool @@ -127,16 +121,6 @@ governorDatumValidProperty = VoteLE0 -> -- vote < 0 return $ ProposalThresholds execute create le0 - CreateLEVote -> do - -- c > vote - nv <- taggedInteger (0, untag create - 1) - ne <- taggedInteger (untag nv + 1, 1000000000) - return $ ProposalThresholds ne create nv - ExecuteLVote -> do - -- vote >= execute - ne <- taggedInteger (0, untag vote) - nc <- taggedInteger (0, untag vote) - return $ ProposalThresholds ne nc vote Correct -> do -- c <= vote < execute nv <- taggedInteger (0, untag execute - 1) diff --git a/agora-specs/Spec/AuthorityToken.hs b/agora-specs/Spec/AuthorityToken.hs index 46b74233..93d7beab 100644 --- a/agora-specs/Spec/AuthorityToken.hs +++ b/agora-specs/Spec/AuthorityToken.hs @@ -11,19 +11,18 @@ module Spec.AuthorityToken (specs) where import Agora.AuthorityToken (singleAuthorityTokenBurned) import Plutarch (ClosedTerm, POpaque, compile, perror, popaque) +import Plutarch.Unsafe (punsafeCoerce) import PlutusLedgerApi.V1 ( Address (Address), Credential (PubKeyCredential, ScriptCredential), CurrencySymbol, Script, TxInInfo (TxInInfo), - TxInfo (..), TxOut (TxOut), TxOutRef (TxOutRef), ValidatorHash (ValidatorHash), Value, ) -import PlutusLedgerApi.V1.Interval qualified as Interval (always) import PlutusLedgerApi.V1.Value qualified as Value ( Value (Value), singleton, @@ -36,37 +35,25 @@ import Test.Specification ( scriptSucceeds, ) import Prelude ( - Functor (fmap), Maybe (Nothing), PBool, Semigroup ((<>)), + fmap, pconstant, - pconstantData, pif, + ($), ) currencySymbol :: CurrencySymbol currencySymbol = "deadbeef" -mkTxInfo :: Value -> [TxOut] -> TxInfo -mkTxInfo mint outs = - TxInfo - { txInfoInputs = fmap (TxInInfo (TxOutRef "" 0)) outs - , txInfoOutputs = [] - , txInfoFee = Value.singleton "" "" 1000 - , txInfoMint = mint - , txInfoDCert = [] - , txInfoWdrl = [] - , txInfoValidRange = Interval.always - , txInfoSignatories = [] - , txInfoData = [] - , txInfoId = "" - } +mkInputs :: [TxOut] -> [TxInInfo] +mkInputs = fmap (TxInInfo (TxOutRef "" 0)) singleAuthorityTokenBurnedTest :: Value -> [TxOut] -> Script singleAuthorityTokenBurnedTest mint outs = let actual :: ClosedTerm PBool - actual = singleAuthorityTokenBurned (pconstant currencySymbol) (pconstantData (mkTxInfo mint outs)) (pconstant mint) + actual = singleAuthorityTokenBurned (pconstant currencySymbol) (punsafeCoerce $ pconstant $ mkInputs outs) (pconstant mint) s :: ClosedTerm POpaque s = pif diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index 9ef2416c..a05d147e 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -40,7 +40,7 @@ specs = "use other's stake" Create.useStakeOwnBySomeoneElseParameters True - False + True False , Create.mkTestTree "altered stake" diff --git a/agora/Agora/AuthorityToken.hs b/agora/Agora/AuthorityToken.hs index 79b88692..448a215e 100644 --- a/agora/Agora/AuthorityToken.hs +++ b/agora/Agora/AuthorityToken.hs @@ -100,20 +100,18 @@ authorityTokensValidIn = phoistAcyclic $ {- | Assert that a single authority token has been burned. - @since 0.1.0 + @since 0.2.0 -} singleAuthorityTokenBurned :: forall (keys :: KeyGuarantees) (amounts :: AmountGuarantees) (s :: S). Term s PCurrencySymbol -> - Term s (PAsData PTxInfo) -> + Term s (PBuiltinList (PAsData PTxInInfo)) -> Term s (PValue keys amounts) -> Term s PBool -singleAuthorityTokenBurned gatCs txInfo mint = unTermCont $ do +singleAuthorityTokenBurned gatCs inputs mint = unTermCont $ do let gatAmountMinted :: Term _ PInteger gatAmountMinted = psymbolValueOf # gatCs # mint - txInfoF <- pletFieldsC @'["inputs"] $ txInfo - pure $ foldr1 (#&&) @@ -126,7 +124,7 @@ singleAuthorityTokenBurned gatCs txInfo mint = unTermCont $ do let txOut' = pfield @"resolved" # txInInfo pure $ authorityTokensValidIn # gatCs # pfromData txOut' ) - # txInfoF.inputs + # inputs ] {- | Policy given 'AuthorityToken' params. diff --git a/agora/Agora/Effect.hs b/agora/Agora/Effect.hs index 2239d246..ad4776dc 100644 --- a/agora/Agora/Effect.hs +++ b/agora/Agora/Effect.hs @@ -30,7 +30,6 @@ makeEffect :: makeEffect gatCs' f = plam $ \datum _redeemer ctx' -> unTermCont $ do ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' - txInfo' <- pletC ctx.txInfo -- convert input datum, PData, into desierable type -- the way this conversion is performed should be defined @@ -42,14 +41,14 @@ makeEffect gatCs' f = txOutRef' <- pletC (pfield @"_0" # txOutRef) -- fetch minted values to ensure single GAT is burned - txInfo <- pletFieldsC @'["mint"] txInfo' + txInfo <- pletFieldsC @'["mint", "inputs"] ctx.txInfo let mint :: Term _ (PValue _ _) mint = txInfo.mint -- fetch script context gatCs <- pletC $ pconstant gatCs' - pguardC "A single authority token has been burned" $ singleAuthorityTokenBurned gatCs txInfo' mint + pguardC "A single authority token has been burned" $ singleAuthorityTokenBurned gatCs txInfo.inputs mint -- run effect function - pure $ f gatCs datum' txOutRef' txInfo' + pure $ f gatCs datum' txOutRef' ctx.txInfo diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 7378fe78..f7fb1443 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -260,6 +260,4 @@ governorDatumValid = phoistAcyclic $ [ ptraceIfFalse "Execute threshold is less than or equal to" $ 0 #<= execute , ptraceIfFalse "Draft threshold is less than or equal to " $ 0 #<= draft , ptraceIfFalse "Vote threshold is less than or equal to " $ 0 #<= vote - , ptraceIfFalse "Draft threshold is less than vote threshold" $ draft #<= vote - , ptraceIfFalse "Execute threshold is less than vote threshold" $ vote #< execute ] diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 6f8c7786..89b96fd0 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -47,10 +47,11 @@ import Agora.Governor ( import Agora.Proposal ( PProposalDatum (..), Proposal (..), - ProposalStatus (Draft, Finished, Locked), - pemptyVotesFor, + ProposalStatus (Draft, Locked), + phasNeutralEffect, + pisEffectsVotesCompatible, + pisVotesEmpty, pneutralOption, - proposalDatumValid, pwinner, ) import Agora.Proposal.Scripts ( @@ -58,7 +59,6 @@ import Agora.Proposal.Scripts ( proposalValidator, ) import Agora.Proposal.Time (createProposalStartingTime) -import Agora.SafeMoney (GTTag) import Agora.Stake ( PProposalLock (..), PStakeDatum (..), @@ -79,10 +79,6 @@ import Agora.Utils ( validatorHashToAddress, validatorHashToTokenName, ) -import Plutarch.Extra.Record - --------------------------------------------------------------------------------- - import Plutarch.Api.V1 ( PAddress, PCurrencySymbol, @@ -93,7 +89,6 @@ import Plutarch.Api.V1 ( PTxOut, PValidator, PValidatorHash, - PValue, mintingPolicySymbol, mkMintingPolicy, mkValidator, @@ -103,19 +98,18 @@ import Plutarch.Api.V1.AssetClass ( passetClass, passetClassValueOf, ) -import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, ptxSignedBy, pvalueSpent) +import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, pvalueSpent) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) +import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.IsData (pmatchEnumFromData) +import Plutarch.Extra.List (pfirstJust) import Plutarch.Extra.Map ( plookup, plookup', ) import Plutarch.Extra.Maybe (pisDJust) +import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) -import Plutarch.SafeMoney (PDiscrete (..), pvalueDiscrete') - --------------------------------------------------------------------------------- - import PlutusLedgerApi.V1 ( CurrencySymbol (..), MintingPolicy, @@ -277,7 +271,7 @@ governorPolicy gov = governorValidator :: Governor -> ClosedTerm PValidator governorValidator gov = plam $ \datum' redeemer' ctx' -> unTermCont $ do - ctxF <- pletFieldsC @'["txInfo", "purpose"] ctx' + ctxF <- pletAllC ctx' txInfo' <- pletC $ pfromData $ ctxF.txInfo txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "datums", "signatories", "validRange"] txInfo' @@ -292,15 +286,7 @@ governorValidator gov = let ownAddress = pfromData $ ownInputF.address (pfromData -> (oldGovernorDatum :: Term _ PGovernorDatum), _) <- ptryFromC datum' - oldGovernorDatumF <- - pletFieldsC - @'[ "proposalThresholds" - , "nextProposalId" - , "proposalTimings" - , "createProposalTimeRangeMaxWidth" - , "maximumProposalsPerStake" - ] - oldGovernorDatum + oldGovernorDatumF <- pletAllC oldGovernorDatum -- Check that GST will be returned to the governor. let ownInputGSTAmount = psymbolValueOf # pgstSymbol # ownInputF.value @@ -354,20 +340,21 @@ governorValidator gov = -- Check that a stake is spent to create the propsal, -- and the value it contains meets the requirement. - stakeInput <- + stakeInputs <- pletC $ - mustBePJust # "Stake input not found" #$ pfind + pfilter # phoistAcyclic ( plam $ - \((pfield @"resolved" #) -> txOut') -> unTermCont $ do - txOut <- pletFieldsC @'["address", "value"] txOut' - - pure $ - txOut.address #== pdata pstakeValidatorAddress - #&& psymbolValueOf # psstSymbol # txOut.value #== 1 + \((pfield @"value" #) . (pfield @"resolved" #) -> value) -> + psymbolValueOf # psstSymbol # value #== 1 ) # pfromData txInfoF.inputs + pguardC "Can process only one stake" $ + plength # stakeInputs #== 1 + + stakeInput <- pletC $ phead # stakeInputs + stakeInputF <- pletFieldsC @'["datumHash", "value"] $ pfield @"resolved" # stakeInput pguardC "Stake input doesn't have datum" $ @@ -375,20 +362,12 @@ governorValidator gov = let stakeInputDatum = mustFindDatum' @PStakeDatum # stakeInputF.datumHash # txInfoF.datums - stakeInputDatumF <- - pletFieldsC @["stakedAmount", "owner", "lockedBy"] stakeInputDatum + stakeInputDatumF <- pletAllC stakeInputDatum pguardC "Proposals created by the stake must not exceed the number stored in the governor." $ pnumCreatedProposals # stakeInputDatumF.lockedBy #< oldGovernorDatumF.maximumProposalsPerStake - pguardC "Required amount of stake GTs should be presented" $ - stakeInputDatumF.stakedAmount #== (pgtValueOf # stakeInputF.value) - - -- TODO: Is this required? - pguardC "Tx should be signed by the stake owner" $ - ptxSignedBy # txInfoF.signatories # stakeInputDatumF.owner - -- Check that the newly minted PST is sent to the proposal validator, -- and the datum it carries is legal. @@ -417,92 +396,79 @@ governorValidator gov = # outputDatumHash # txInfoF.datums - pguardC "Proposal datum must be valid" $ - proposalDatumValid' # proposalOutputDatum' + proposalOutputDatum <- pletAllC proposalOutputDatum' - proposalOutputDatum <- - pletFieldsC - @'["effects", "cosigners", "proposalId", "votes"] - proposalOutputDatum' - - pguardC "Proposal should have only one cosigner" $ - plength # pfromData proposalOutputDatum.cosigners #== 1 - - let -- Votes should be empty at this point - expectedVotes = pemptyVotesFor # pfromData proposalOutputDatum.effects - expectedStartingTime = + let expectedStartingTime = createProposalStartingTime # oldGovernorDatumF.createProposalTimeRangeMaxWidth # txInfoF.validRange - -- Id, thresholds and timings should be copied from the old governor state datum. - expectedProposalOut = - mkRecordConstr - PProposalDatum - ( #proposalId .= oldGovernorDatumF.nextProposalId - .& #effects .= proposalOutputDatum.effects - .& #status .= pconstantData Draft - .& #cosigners .= proposalOutputDatum.cosigners - .& #thresholds .= oldGovernorDatumF.proposalThresholds - .& #votes .= pdata expectedVotes - .& #timingConfig .= oldGovernorDatumF.proposalTimings - .& #startingTime .= pdata expectedStartingTime - ) - pguardC "Datum correct" $ expectedProposalOut #== proposalOutputDatum' - - let cosigner = phead # pfromData proposalOutputDatum.cosigners - - pguardC "Cosigner should be the stake owner" $ - pdata stakeInputDatumF.owner #== cosigner + expectedCosigners = psingleton @PBuiltinList # stakeInputDatumF.owner + + pguardC "Proposal datum correct" $ + foldl1 + (#&&) + [ ptraceIfFalse "has neutral effect" $ + phasNeutralEffect # proposalOutputDatum.effects + , ptraceIfFalse "votes have valid shape" $ + pisEffectsVotesCompatible # proposalOutputDatum.effects # proposalOutputDatum.votes + , ptraceIfFalse "votes are empty" $ + pisVotesEmpty # proposalOutputDatum.votes + , ptraceIfFalse "id correct" $ + proposalOutputDatum.proposalId #== oldGovernorDatumF.nextProposalId + , ptraceIfFalse "status is Draft" $ + proposalOutputDatum.status #== pconstantData Draft + , ptraceIfFalse "cosigners correct" $ + plistEquals # pfromData proposalOutputDatum.cosigners # expectedCosigners + , ptraceIfFalse "starting time correct" $ + proposalOutputDatum.startingTime #== expectedStartingTime + , ptraceIfFalse "copy over configurations" $ + proposalOutputDatum.thresholds #== oldGovernorDatumF.proposalThresholds + #&& proposalOutputDatum.timingConfig #== oldGovernorDatumF.proposalTimings + ] -- Check the output stake has been proposly updated. - - stakeOutput <- - pletC $ - mustBePJust - # "Stake output not found" - #$ pfind - # phoistAcyclic - ( plam $ - \txOut' -> unTermCont $ do - txOut <- pletFieldsC @'["address", "value"] txOut' - - pure $ - txOut.address #== pdata pstakeValidatorAddress - #&& psymbolValueOf # psstSymbol # txOut.value #== 1 - ) - # pfromData txInfoF.outputs - - stakeOutputF <- pletFieldsC @'["datumHash", "value"] $ stakeOutput - - pguardC "Staked GTs should be sent back to stake validator" $ - stakeInputDatumF.stakedAmount #== (pgtValueOf # stakeOutputF.value) - - let stakeOutputDatumHash = mustBePDJust # "Stake output should have datum" # stakeOutputF.datumHash + let stakeOutputDatumHash = + mustBePJust # "Output stake should be presented" + #$ pfirstJust + # phoistAcyclic + ( plam + ( \txOut -> unTermCont $ do + txOutF <- pletFieldsC @'["datumHash", "value"] txOut + + pure $ + pif + (psymbolValueOf # psstSymbol # txOutF.value #== 1) + ( pcon $ + PJust $ + mustBePDJust # "Output stake datum should be presented" + # txOutF.datumHash + ) + (pcon PNothing) + ) + ) + # pfromData txInfoF.outputs stakeOutputDatum = - mustBePJust # "Stake output not found" #$ ptryFindDatum # stakeOutputDatumHash # txInfoF.datums + mustBePJust @(PAsData PStakeDatum) # "Stake output datum presented" + #$ ptryFindDatum # stakeOutputDatumHash # txInfoF.datums + + stakeOutputLocks = + pfromData $ pfield @"lockedBy" # stakeOutputDatum - -- The stake should be locked by the newly created proposal. - let newLock = + -- The stake should be locked by the newly created proposal. + newLock = mkRecordConstr PCreated ( #created .= oldGovernorDatumF.nextProposalId ) -- Append new locks to existing locks - expectedProposalLocks = pcons # pdata newLock # stakeInputDatumF.lockedBy - - expectedStakeOutputDatum = - pdata $ - mkRecordConstr - PStakeDatum - ( #stakedAmount .= stakeInputDatumF.stakedAmount - .& #owner .= stakeInputDatumF.owner - .& #lockedBy .= pdata expectedProposalLocks - ) + expectedProposalLocks = + pcons # pdata newLock # stakeInputDatumF.lockedBy - pguardC "Unexpected stake output datum" $ expectedStakeOutputDatum #== stakeOutputDatum + pguardC "Stake output locks correct" $ + plistEquals # stakeOutputLocks # expectedProposalLocks pure $ popaque $ pconstant () @@ -533,36 +499,14 @@ governorValidator gov = ) # pfromData txInfoF.inputs - proposalOutputF <- - pletFieldsC @'["datumHash"] $ - mustBePJust # "Proposal output not found" - #$ pfind - # plam - ( \txOut -> unTermCont $ do - txOutF <- pletFieldsC @'["address", "value"] txOut - pure $ - psymbolValueOf # ppstSymbol # txOutF.value #== 1 - #&& txOutF.address #== pdata pproposalValidatorAddress - ) - # pfromData txInfoF.outputs - proposalInputDatum <- pletC $ mustFindDatum' @PProposalDatum # proposalInputF.datumHash # txInfoF.datums - proposalOutputDatum <- - pletC $ - mustFindDatum' @PProposalDatum - # proposalOutputF.datumHash - # txInfoF.datums - - pguardC "Proposal datum must be valid" $ - proposalDatumValid' # proposalInputDatum - #&& proposalDatumValid' # proposalOutputDatum proposalInputDatumF <- - pletFieldsC @'["proposalId", "effects", "status", "cosigners", "thresholds", "votes", "timingConfig", "startingTime"] + pletFieldsC @'["effects", "status", "thresholds", "votes"] proposalInputDatum -- Check that the proposal state is advanced so that a proposal cannot be executed twice. @@ -570,22 +514,6 @@ governorValidator gov = pguardC "Proposal must be in locked(executable) state in order to execute effects" $ proposalInputDatumF.status #== pconstantData Locked - let expectedOutputProposalDatum = - mkRecordConstr - PProposalDatum - ( #proposalId .= proposalInputDatumF.proposalId - .& #effects .= proposalInputDatumF.effects - .& #status .= pconstantData Finished - .& #cosigners .= proposalInputDatumF.cosigners - .& #thresholds .= proposalInputDatumF.thresholds - .& #votes .= proposalInputDatumF.votes - .& #timingConfig .= proposalInputDatumF.timingConfig - .& #startingTime .= proposalInputDatumF.startingTime - ) - - pguardC "Unexpected output proposal datum" $ - pdata proposalOutputDatum #== pdata expectedOutputProposalDatum - -- TODO: anything else to check here? -- Find the highest votes and the corresponding tag. @@ -661,15 +589,11 @@ governorValidator gov = Just MutateGovernor -> unTermCont $ do -- Check that a GAT is burnt. - pure $ popaque $ singleAuthorityTokenBurned patSymbol ctxF.txInfo txInfoF.mint + pure $ popaque $ singleAuthorityTokenBurned patSymbol txInfoF.inputs txInfoF.mint -------------------------------------------------------------------------- Nothing -> ptraceError "Unknown redeemer" where - -- Get th amount of governance tokens in a value. - pgtValueOf :: Term s (PValue _ _ :--> PDiscrete GTTag) - pgtValueOf = phoistAcyclic $ pvalueDiscrete' gov.gtClassRef - -- The currency symbol of authority token. patSymbol :: Term s PCurrencySymbol patSymbol = phoistAcyclic $ pconstant $ authorityTokenSymbolFromGovernor gov @@ -680,24 +604,12 @@ governorValidator gov = let AssetClass (sym, _) = proposalSTAssetClassFromGovernor gov in phoistAcyclic $ pconstant sym - -- Is a proposal state datum valid? - proposalDatumValid' :: Term s (PProposalDatum :--> PBool) - proposalDatumValid' = - let params = proposalFromGovernor gov - in phoistAcyclic $ proposalDatumValid params - -- The address of the proposal validator. pproposalValidatorAddress :: Term s PAddress pproposalValidatorAddress = let vh = proposalValidatorHashFromGovernor gov in phoistAcyclic $ pconstant $ validatorHashToAddress vh - -- The address of the stake validator. - pstakeValidatorAddress :: Term s PAddress - pstakeValidatorAddress = - let vh = stakeValidatorHashFromGovernor gov - in phoistAcyclic $ pconstant $ validatorHashToAddress vh - -- The currency symbol of the stake state token. psstSymbol :: Term s PCurrencySymbol psstSymbol = diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 45758d4e..d06d0d37 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -29,8 +29,9 @@ module Agora.Proposal ( PResultTag (..), -- * Plutarch helpers - proposalDatumValid, - pemptyVotesFor, + phasNeutralEffect, + pisEffectsVotesCompatible, + pisVotesEmpty, pwinner, pwinner', pneutralOption, @@ -50,6 +51,7 @@ import Plutarch.Api.V1 ( PPubKeyHash, PValidatorHash, ) +import Plutarch.Api.V1.AssocMap qualified as PAssocMap import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) import Plutarch.Extra.IsData ( DerivePConstantViaDataList (..), @@ -57,11 +59,10 @@ import Plutarch.Extra.IsData ( EnumIsData (..), ProductIsData (ProductIsData), ) -import Plutarch.Extra.List (pnotNull) import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map.Unsorted qualified as PUM import Plutarch.Extra.Other (DerivePNewtype' (..)) -import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC) +import Plutarch.Extra.TermCont (pguardC, pletC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), PConstantDecl, @@ -597,19 +598,6 @@ deriving via instance (PConstantDecl ProposalVotes) -{- | Plutarch-level version of 'emptyVotesFor'. - - @since 0.1.0 --} -pemptyVotesFor :: forall s a. (PIsData a) => Term s (PMap 'Unsorted PResultTag a :--> PProposalVotes) -pemptyVotesFor = - phoistAcyclic $ - plam - ( \m -> - pcon $ - PProposalVotes $ PM.pmap # plam (const $ pconstant 0) # m - ) - {- | Plutarch-level version of 'ProposalDatum'. @since 0.1.0 @@ -712,27 +700,50 @@ deriving via (DerivePConstantViaData ProposalRedeemer PProposalRedeemer) instanc @since 0.1.0 -} -proposalDatumValid :: Proposal -> Term s (Agora.Proposal.PProposalDatum :--> PBool) -proposalDatumValid proposal = - phoistAcyclic $ - plam $ \datum' -> unTermCont $ do - datum <- pletFieldsC @'["effects", "cosigners", "votes"] $ datum' - - let atLeastOneNegativeResult = - pany - # phoistAcyclic - (plam $ \m -> pnull #$ pto $ pfromData $ psndBuiltin # m) - #$ pto - $ pfromData datum.effects - - pure $ - foldr1 - (#&&) - [ ptraceIfFalse "Proposal has at least one ResultTag has no effects" atLeastOneNegativeResult - , ptraceIfFalse "Proposal has at least one cosigner" $ pnotNull # pfromData datum.cosigners - , ptraceIfFalse "Proposal has fewer cosigners than the limit" $ plength # pfromData datum.cosigners #<= pconstant proposal.maximumCosigners - , ptraceIfFalse "Proposal votes and effects are compatible with each other" $ PUM.pkeysEqual # datum.effects # pto (pfromData datum.votes) - ] + +{- | Return true if the effect list contains at least one neutral outcome. + + @since 0.2.0 +-} +phasNeutralEffect :: + forall (s :: S). + Term + s + ( PMap 'Unsorted PResultTag (PMap 'Unsorted PValidatorHash PDatumHash) + :--> PBool + ) +phasNeutralEffect = phoistAcyclic $ PAssocMap.pany # PAssocMap.pnull + +{- | Return true if votes and effects of the proposal have the same key set. + + @since 0.2.0 +-} +pisEffectsVotesCompatible :: + forall (s :: S). + Term + s + ( PMap 'Unsorted PResultTag (PMap 'Unsorted PValidatorHash PDatumHash) + :--> PProposalVotes + :--> PBool + ) +pisEffectsVotesCompatible = phoistAcyclic $ + plam $ \m (pto -> v :: Term _ (PMap _ _ _)) -> + PUM.pkeysEqual # m # v + +{- | Retutns true if vote counts of /all/ the options are zero. + + @since 0.2.0 +-} +pisVotesEmpty :: + forall (s :: S). + Term + s + ( PProposalVotes + :--> PBool + ) +pisVotesEmpty = phoistAcyclic $ + plam $ \(pto -> m :: Term _ (PMap _ _ _)) -> + PAssocMap.pall # plam (#== 0) # m {- | Wrapper for 'pwinner''. When the winner cannot be found, the 'neutral' option will be returned. diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 9412b1eb..a3bd325e 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -40,7 +40,6 @@ import Agora.Utils ( getMintingPolicySymbol, mustBePJust, mustFindDatum', - pisUniq', pltAsData, ) import Plutarch.Api.V1 ( @@ -63,7 +62,7 @@ import Plutarch.Api.V1.ScriptContext ( import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Extra.Comonad (pextract) import Plutarch.Extra.IsData (pmatchEnum) -import Plutarch.Extra.List (pmapMaybe, pmergeBy, pmsortBy) +import Plutarch.Extra.List (pisUniq', pmapMaybe, pmergeBy, pmsortBy) import Plutarch.Extra.Map (plookup, pupdate) import Plutarch.Extra.Maybe (pfromDJust, pfromJust, pisJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index cb142294..e2694282 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -51,13 +51,14 @@ import Plutarch.Extra.IsData ( ) import Plutarch.Extra.List (pnotNull) import Plutarch.Extra.Other (DerivePNewtype' (..)) +import Plutarch.Extra.Sum (PSum (..)) +import Plutarch.Extra.Traversable (pfoldMap) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.SafeMoney (PDiscrete) import Plutarch.Show (PShow (..)) import PlutusLedgerApi.V1 (PubKeyHash) import PlutusLedgerApi.V1.Value (AssetClass) import PlutusTx qualified -import Prelude ((+)) import Prelude hiding (Num (..)) -------------------------------------------------------------------------------- @@ -396,21 +397,14 @@ pnumCreatedProposals :: Term s (PBuiltinList (PAsData PProposalLock) :--> PInteg pnumCreatedProposals = phoistAcyclic $ plam $ \l -> - pfoldl - # phoistAcyclic - ( plam - ( \c (pfromData -> lock) -> - c - + pmatch - lock - ( \case - PCreated _ -> 1 - _ -> 0 - ) - ) - ) - # 0 - # l + pto $ + pfoldMap + # plam + ( \(pfromData -> lock) -> pmatch lock $ \case + PCreated _ -> pcon $ PSum 1 + _ -> mempty + ) + # l {- | The role of a stake for a particular proposal. Scott-encoded. diff --git a/agora/Agora/Treasury.hs b/agora/Agora/Treasury.hs index 16d5a51c..bc7cc738 100644 --- a/agora/Agora/Treasury.hs +++ b/agora/Agora/Treasury.hs @@ -114,14 +114,13 @@ treasuryValidator gatCs' = plam $ \_datum redeemer ctx' -> unTermCont $ do redeemer #== pforgetData (pconstantData SpendTreasuryGAT) -- Get the minted value from txInfo. - txInfo' <- pletC ctx.txInfo - txInfo <- pletFieldsC @'["mint"] txInfo' + txInfo <- pletFieldsC @'["mint", "inputs"] ctx.txInfo let mint :: Term _ (PValue _ _) mint = txInfo.mint gatCs <- pletC $ pconstant gatCs' pguardC "A single authority token has been burned" $ - singleAuthorityTokenBurned gatCs txInfo' mint + singleAuthorityTokenBurned gatCs txInfo.inputs mint pure . popaque $ pconstant () diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index e8945c25..3c460162 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -20,8 +20,6 @@ module Agora.Utils ( isScriptAddress, isPubKey, pltAsData, - pisUniqBy', - pisUniq', ) where import Plutarch.Api.V1 ( @@ -208,36 +206,3 @@ pltAsData :: pltAsData = phoistAcyclic $ plam $ \(pfromData -> l) (pfromData -> r) -> l #< r - -{- | Special version of 'pisUniq'', the list elements should have 'PEq' instance. - - @since 0.2.0 --} -pisUniq' :: - forall (l :: PType -> PType) (a :: PType) (s :: S). - (PEq a, PIsListLike l a) => - Term s (l a :--> PBool) -pisUniq' = phoistAcyclic $ pisUniqBy' # phoistAcyclic (plam (#==)) - -{- | Return true if all the elements in the given list are unique, given the equalator function. - The list is assumed to be ordered. - - @since 0.2.0 --} -pisUniqBy' :: - forall (l :: PType -> PType) (a :: PType) (s :: S). - (PIsListLike l a) => - Term s ((a :--> a :--> PBool) :--> l a :--> PBool) -pisUniqBy' = phoistAcyclic $ - plam $ \eq l -> - pif (pnull # l) (pconstant True) $ - go # eq # (phead # l) # (ptail # l) - where - go :: Term _ ((a :--> a :--> PBool) :--> a :--> l a :--> PBool) - go = phoistAcyclic $ - pfix #$ plam $ \self' eq x xs -> - plet (self' # eq) $ \self -> - pif (pnull # xs) (pconstant True) $ - plet (phead # xs) $ \x' -> - pif (eq # x # x') (pconstant False) $ - self # x' #$ ptail # xs diff --git a/bench.csv b/bench.csv index 0caf6cfe..7557f592 100644 --- a/bench.csv +++ b/bench.csv @@ -1,18 +1,19 @@ name,cpu,mem,size -Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333327612,830203,3674 -Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492387542,1197315,3986 -Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,456007605,1104500,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,88940927,246756,8891 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,107090537,296185,3627 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 +Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,84914023,233054,7949 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,104760131,289547,3491 Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 Agora/Proposal/policy (proposal creation)/legal/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/legal/governor,327971301,871386,9370 +Agora/Proposal/policy (proposal creation)/legal/governor,316600184,838411,8429 Agora/Proposal/policy (proposal creation)/legal/stake,152415805,398403,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,34975627,103548,2117 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,152415805,398403,5404 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,34975627,103548,2086 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,316600184,838411,8398 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,34975627,103548,2117 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,34975627,103548,2125 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,157849465,413053,5412 @@ -223,12 +224,12 @@ Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1674013803,4194887,26590 Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1674013803,4194887,26590 Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1674013803,4194887,26506 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Treasury/Validator/Positive/Allows for effect changes,31556709,81546,1452 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,21017788,55883,806 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,33204186,88241,900 -Agora/Governor/policy/GST minting,51480023,145787,2048 -Agora/Governor/validator/proposal creation,303114849,813451,9390 -Agora/Governor/validator/GATs minting,422654153,1147158,9516 -Agora/Governor/validator/mutate governor state,90087778,252215,8991 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 +Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 +Agora/Governor/policy/GST minting,49408995,139981,1910 +Agora/Governor/validator/proposal creation,294638205,791763,8449 +Agora/Governor/validator/GATs minting,249873031,663031,8575 +Agora/Governor/validator/mutate governor state,86060874,238513,8049 From 2155e59508cd8dd075f8faf4c1272a53c667f6d6 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 15 Jul 2022 21:17:54 +0800 Subject: [PATCH 42/78] fix governor datum validation --- agora-specs/Property/Governor.hs | 6 +- agora/Agora/Effect/GovernorMutation.hs | 4 +- agora/Agora/Governor.hs | 40 +-- agora/Agora/Governor/Scripts.hs | 9 +- agora/Agora/Proposal.hs | 74 ++++-- agora/Agora/Proposal/Time.hs | 40 +++ bench.csv | 334 ++++++++++++------------- 7 files changed, 289 insertions(+), 218 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 81df6590..7925e80d 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -7,7 +7,7 @@ Property model and tests for 'Governor' related functions -} module Property.Governor (props) where -import Agora.Governor (GovernorDatum (..), governorDatumValid) +import Agora.Governor (GovernorDatum (..), pisGovernorDatumValid) import Agora.Governor.Scripts (governorPolicy) import Agora.Proposal ( ProposalId (ProposalId), @@ -83,7 +83,7 @@ instance Finite GovernorDatumCases where -} governorDatumValidProperty :: Property governorDatumValidProperty = - classifiedPropertyNative gen (const []) expected classifier governorDatumValid + classifiedPropertyNative gen (const []) expected classifier pisGovernorDatumValid where classifier :: GovernorDatum -> GovernorDatumCases classifier (proposalThresholds -> ProposalThresholds e c v) @@ -100,7 +100,7 @@ governorDatumValidProperty = thres <- genProposalThresholds c let timing = ProposalTimingConfig 0 0 0 0 - return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 0) 3 + return $ GovernorDatum thres (ProposalId 0) timing (MaxTimeRangeWidth 1) 3 where taggedInteger p = Tagged <$> chooseInteger p genProposalThresholds :: GovernorDatumCases -> Gen ProposalThresholds diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index 4b01ebbb..aaa0a387 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -23,7 +23,7 @@ import Agora.Governor ( Governor, GovernorDatum, PGovernorDatum, - governorDatumValid, + pisGovernorDatumValid, ) import Agora.Governor.Scripts ( authorityTokenSymbolFromGovernor, @@ -215,7 +215,7 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) -- Ensure the output governor datum is what we want. pguardC "Unexpected governor datum" $ datumF.newDatum #== governorOutputDatum - pguardC "New governor datum should be valid" $ governorDatumValid # governorOutputDatum + pguardC "New governor datum should be valid" $ pisGovernorDatumValid # governorOutputDatum return $ popaque $ pconstant () where diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index f7fb1443..db5157c1 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -20,7 +20,7 @@ module Agora.Governor ( -- * Utilities pgetNextProposalId, getNextProposalId, - governorDatumValid, + pisGovernorDatumValid, ) where import Agora.Proposal ( @@ -28,12 +28,15 @@ import Agora.Proposal ( PProposalThresholds (..), ProposalId (ProposalId), ProposalThresholds, + pisProposalThresholdsValid, ) import Agora.Proposal.Time ( MaxTimeRangeWidth, PMaxTimeRangeWidth, PProposalTimingConfig, ProposalTimingConfig, + pisMaxTimeRangeWidthValid, + pisProposalTimeingConfigValid, ) import Agora.SafeMoney (GTTag) import Data.Tagged (Tagged (..)) @@ -44,15 +47,13 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (PIsDataReprInstances), ) -import Plutarch.Extra.Comonad (pextract) import Plutarch.Extra.IsData ( DerivePConstantViaEnum (..), EnumIsData (..), ) import Plutarch.Extra.Other (DerivePNewtype' (..)) -import Plutarch.Extra.TermCont (pletC, pletFieldsC, pmatchC) +import Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) -import Plutarch.SafeMoney (PDiscrete (..)) import PlutusLedgerApi.V1 (TxOutRef) import PlutusLedgerApi.V1.Value (AssetClass (..)) import PlutusTx qualified @@ -239,25 +240,24 @@ getNextProposalId (ProposalId pid) = ProposalId $ pid + 1 @since 0.1.0 -} -governorDatumValid :: Term s (PGovernorDatum :--> PBool) -governorDatumValid = phoistAcyclic $ +pisGovernorDatumValid :: Term s (PGovernorDatum :--> PBool) +pisGovernorDatumValid = phoistAcyclic $ plam $ \datum -> unTermCont $ do - thresholds <- - pletFieldsC @'["execute", "create", "vote"] $ - pfield @"proposalThresholds" # datum - - PDiscrete execute' <- pmatchC thresholds.execute - PDiscrete draft' <- pmatchC thresholds.create - PDiscrete vote' <- pmatchC thresholds.vote - - execute <- pletC $ pextract # execute' - draft <- pletC $ pextract # draft' - vote <- pletC $ pextract # vote' + datumF <- + pletFieldsC + @'[ "proposalThresholds" + , "proposalTimings" + , "createProposalTimeRangeMaxWidth" + ] + datum pure $ foldr1 (#&&) - [ ptraceIfFalse "Execute threshold is less than or equal to" $ 0 #<= execute - , ptraceIfFalse "Draft threshold is less than or equal to " $ 0 #<= draft - , ptraceIfFalse "Vote threshold is less than or equal to " $ 0 #<= vote + [ ptraceIfFalse "thersholds valid" $ + pisProposalThresholdsValid # datumF.proposalThresholds + , ptraceIfFalse "timings valid" $ + pisProposalTimeingConfigValid # datumF.proposalTimings + , ptraceIfFalse "time range valid" $ + pisMaxTimeRangeWidthValid # datumF.createProposalTimeRangeMaxWidth ] diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 89b96fd0..eaa4a77f 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -41,8 +41,8 @@ import Agora.Governor ( Governor (gstOutRef, gtClassRef, maximumCosigners), GovernorRedeemer (..), PGovernorDatum (PGovernorDatum), - governorDatumValid, pgetNextProposalId, + pisGovernorDatumValid, ) import Agora.Proposal ( PProposalDatum (..), @@ -180,7 +180,9 @@ governorPolicy gov = let datumHash = pfield @"datumHash" # pfromData govOutput datum = mustFindDatum' @PGovernorDatum # datumHash # txInfoF.datums - pure $ popaque $ governorDatumValid # datum + pguardC "Governor output datum valid" $ pisGovernorDatumValid # datum + + pure $ popaque $ pconstant () {- | Validator for Governors. @@ -310,7 +312,8 @@ governorValidator gov = pfromData $ mustBePJust # "Ouput governor state datum not found" #$ ptryFindDatum # outputGovernorStateDatumHash # txInfoF.datums - pguardC "New datum is not valid" $ governorDatumValid # newGovernorDatum + + pguardC "New datum is valid" $ pisGovernorDatumValid # newGovernorDatum pure $ pmatchEnumFromData redeemer' $ \case diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index d06d0d37..662f494a 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -36,6 +36,7 @@ module Agora.Proposal ( pwinner', pneutralOption, pretractVotes, + pisProposalThresholdsValid, ) where import Agora.Proposal.Time (PProposalStartingTime, PProposalTimingConfig, ProposalStartingTime, ProposalTimingConfig) @@ -53,6 +54,8 @@ import Plutarch.Api.V1 ( ) import Plutarch.Api.V1.AssocMap qualified as PAssocMap import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) +import Plutarch.Extra.Comonad (pextract) +import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.IsData ( DerivePConstantViaDataList (..), DerivePConstantViaEnum (..), @@ -62,13 +65,13 @@ import Plutarch.Extra.IsData ( import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map.Unsorted qualified as PUM import Plutarch.Extra.Other (DerivePNewtype' (..)) -import Plutarch.Extra.TermCont (pguardC, pletC) +import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), PConstantDecl, PUnsafeLiftDecl (..), ) -import Plutarch.SafeMoney (PDiscrete) +import Plutarch.SafeMoney (PDiscrete (..)) import Plutarch.Show (PShow (..)) import PlutusLedgerApi.V1 (DatumHash, PubKeyHash, ValidatorHash) import PlutusLedgerApi.V1.Value (AssetClass) @@ -568,27 +571,6 @@ deriving via instance PTryFrom PData (PAsData PProposalVotes) -{- | Retract votes given the option and the amount of votes. - - @since 0.1.0 --} -pretractVotes :: Term s (PResultTag :--> PInteger :--> PProposalVotes :--> PProposalVotes) -pretractVotes = phoistAcyclic $ - plam $ \rt count votes -> - let voteMap :: Term _ (PMap 'Unsorted PResultTag PInteger) - voteMap = pto votes - in pcon $ - PProposalVotes $ - PM.pupdate - # plam - ( \oldCount -> unTermCont $ do - newCount <- pletC $ oldCount - count - pguardC "Resulting vote count greater or equal to 0" $ 0 #<= newCount - pure $ pcon $ PJust newCount - ) - # rt - # voteMap - -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalVotes where type PLifted PProposalVotes = ProposalVotes @@ -864,3 +846,49 @@ pneutralOption = phoistAcyclic $ el' = pto el in pnull # el' in pfromData $ pfstBuiltin #$ mustBePJust # "No neutral option" #$ pfind # f # l + +{- | Return true if the thresholds are valid. + + @since 0.2.0 +-} +pisProposalThresholdsValid :: forall (s :: S). Term s (PProposalThresholds :--> PBool) +pisProposalThresholdsValid = phoistAcyclic $ + plam $ \thresholds -> unTermCont $ do + thresholdsF <- pletAllC thresholds + + PDiscrete execute' <- pmatchC thresholdsF.execute + PDiscrete draft' <- pmatchC thresholdsF.create + PDiscrete vote' <- pmatchC thresholdsF.vote + + execute <- pletC $ pextract # execute' + draft <- pletC $ pextract # draft' + vote <- pletC $ pextract # vote' + + pure $ + foldr1 + (#&&) + [ ptraceIfFalse "Execute threshold is less than or equal to 0" $ 0 #<= execute + , ptraceIfFalse "Draft threshold is less than or equal to 0" $ 0 #<= draft + , ptraceIfFalse "Vote threshold is less than or equal to 0" $ 0 #<= vote + ] + +{- | Retract votes given the option and the amount of votes. + + @since 0.1.0 +-} +pretractVotes :: Term s (PResultTag :--> PInteger :--> PProposalVotes :--> PProposalVotes) +pretractVotes = phoistAcyclic $ + plam $ \rt count votes -> + let voteMap :: Term _ (PMap 'Unsorted PResultTag PInteger) + voteMap = pto votes + in pcon $ + PProposalVotes $ + PM.pupdate + # plam + ( \oldCount -> unTermCont $ do + newCount <- pletC $ oldCount - count + pguardC "Resulting vote count greater or equal to 0" $ 0 #<= newCount + pure $ pcon $ PJust newCount + ) + # rt + # voteMap diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index 640552bc..8b05b3e6 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -26,6 +26,8 @@ module Agora.Proposal.Time ( isVotingPeriod, isLockingPeriod, isExecutionPeriod, + pisProposalTimeingConfigValid, + pisMaxTimeRangeWidthValid, ) where import Agora.Plutarch.Orphans () @@ -44,6 +46,7 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (..), ) +import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), @@ -273,6 +276,43 @@ deriving via -------------------------------------------------------------------------------- +{- | Return true if the timing configuration is valid. + + @since 0.2.0 +-} +pisProposalTimeingConfigValid :: Term s (PProposalTimingConfig :--> PBool) +pisProposalTimeingConfigValid = phoistAcyclic $ + plam $ \conf -> unTermCont $ do + confF <- pletAllC conf + + -- everything is greater or equal 0 + pure $ + ptraceIfFalse "ge 0" $ + foldr + ( \t -> + (#&&) + ( pconstant 0 + #<= pfromData t + ) + ) + (pconstant True) + [ confF.draftTime + , confF.votingTime + , confF.lockingTime + , confF.executingTime + ] + +{- | Return true if the maximum time width is greater than 0. + + @since 0.2.0 +-} +pisMaxTimeRangeWidthValid :: Term s (PMaxTimeRangeWidth :--> PBool) +pisMaxTimeRangeWidthValid = + phoistAcyclic $ + plam $ + ptraceIfFalse "greater than 0" + . (pconstant (MaxTimeRangeWidth 0) #<) + {- | Get the starting time of a proposal, from the 'PlutusLedgerApi.V1.txInfoValidPeriod' field. For every proposal, this is only meant to run once upon creation. Given time range should be tight enough, meaning that the width of the time range should be less than the maximum value. diff --git a/bench.csv b/bench.csv index 7557f592..640aebd3 100644 --- a/bench.csv +++ b/bench.csv @@ -2,234 +2,234 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,84914023,233054,7949 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,104760131,289547,3491 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,92825132,256078,8201 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3747 Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 Agora/Proposal/policy (proposal creation)/legal/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/legal/governor,316600184,838411,8429 -Agora/Proposal/policy (proposal creation)/legal/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8681 +Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,34975627,103548,2086 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,316600184,838411,8398 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8650 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,34975627,103548,2117 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,34975627,103548,2125 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,157849465,413053,5412 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5412 Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,34975627,103548,2137 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,158878297,416511,5434 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160422991,421241,5434 Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,34975627,103548,2113 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,152415805,398403,5400 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153960499,403133,5400 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,152415805,398403,5404 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5404 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235405219,657707,8151 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,122255811,317464,5213 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,124051829,322526,5213 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,670429262,1868318,10781 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,553050999,1459872,7723 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,554847017,1464934,7723 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1328551536,3641835,14069 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1101023340,2912657,10860 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,122255811,317464,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,122255811,317464,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,122255811,317464,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,122255811,317464,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,553050999,1459872,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,553050999,1459872,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,553050999,1459872,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1101023340,2912657,10860 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1101023340,2912657,10860 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1101023340,2912657,10860 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1102819358,2917719,10860 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,124051829,322526,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,124051829,322526,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,124051829,322526,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,124051829,322526,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,554847017,1464934,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,554847017,1464934,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,554847017,1464934,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1102819358,2917719,10860 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1102819358,2917719,10860 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1102819358,2917719,10860 Agora/Proposal/validator/voting/legal/propsoal,253541830,711367,8133 -Agora/Proposal/validator/voting/legal/stake,139493011,366217,5239 +Agora/Proposal/validator/voting/legal/stake,141289029,371279,5239 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8114 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,122255811,317464,5222 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,124051829,322526,5222 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8116 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,122255811,317464,5224 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,124051829,322526,5224 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117978393,308804,5152 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10969 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,499559031,1304096,7957 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,501355049,1309158,7957 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8477 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,122255811,317464,5465 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,124051829,322526,5465 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446950999,1172710,7606 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14538 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1129251912,2994677,11375 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1131047930,2999739,11375 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8930 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,122255811,317464,5767 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,124051829,322526,5767 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013080113,2701103,10673 Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8123 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,122255811,317464,5229 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,124051829,322526,5229 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8123 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,122255811,317464,5229 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,124051829,322526,5229 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8117 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,122255811,317464,5225 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,124051829,322526,5225 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8117 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,122255811,317464,5225 -Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,122255811,317464,5225 -Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,122255811,317464,5217 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,128424052,334368,5219 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,124051829,322526,5225 +Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,124051829,322526,5225 +Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,124051829,322526,5217 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,130220070,339430,5219 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236436652,664524,8114 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,131655298,343422,5235 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,133451316,348484,5235 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,249908859,704466,8125 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,128424052,334368,5217 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,130220070,339430,5217 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204228787,584379,8111 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,128424052,334368,5233 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,130220070,339430,5233 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212663044,609283,8123 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,128424052,334368,5223 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,130220070,339430,5223 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205544939,588263,8118 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,128424052,334368,5223 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,130220070,339430,5223 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205544939,588263,8118 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,131655298,343422,5239 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,133451316,348484,5239 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219548722,629597,8129 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,279213296,711004,7303 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,297011418,750706,7303 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379077900,1077188,10174 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,295369526,756274,7380 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,313167648,795976,7380 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444606435,1268442,10226 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,279213296,711004,7293 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,297011418,750706,7293 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312309599,902235,10167 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,279213296,711004,7374 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,297011418,750706,7374 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350698580,1013987,10220 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,279213296,711004,7324 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,297011418,750706,7324 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317778859,917311,10195 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,279213296,711004,7324 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,297011418,750706,7324 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317778859,917311,10195 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,295369526,756274,7400 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,313167648,795976,7400 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383838970,1109957,10246 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,467699851,1181799,9909 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,505500603,1264801,9909 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557379460,1593018,12750 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,500012311,1272339,10060 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,537813063,1355341,10060 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,687978405,1973412,12851 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,467699851,1181799,9888 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,505500603,1264801,9888 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447410614,1299555,12737 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,467699851,1181799,10049 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,505500603,1264801,10049 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523243000,1519867,12840 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,467699851,1181799,9949 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,505500603,1264801,9949 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458071259,1328621,12790 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,467699851,1181799,9949 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,505500603,1264801,9949 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458071259,1328621,12790 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,500012311,1272339,10100 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,537813063,1355341,10100 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589201780,1710407,12891 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1674013803,4194887,26674 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1839831387,4555009,26674 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698509444,4894330,29304 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1809726135,4575155,27362 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1975543719,4935277,27362 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245559013,6485220,29763 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1674013803,4194887,26590 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1839831387,4555009,26590 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312057110,3842403,29260 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1674013803,4194887,27301 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1839831387,4555009,27301 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627527288,4757499,29702 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1674013803,4194887,26843 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1839831387,4555009,26843 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1355942619,3961005,29473 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1674013803,4194887,26843 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1839831387,4555009,26843 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1355942619,3961005,29473 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1809726135,4575155,27531 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1975543719,4935277,27531 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903523764,5553287,29932 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",128424052,334368,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",128424052,334368,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",128424052,334368,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Draft/stake",124053466,322518,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Locked/stake",124053466,322518,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Finished/stake",124053466,322518,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Draft/stake",131655298,343422,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Locked/stake",131655298,343422,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Finished/stake",131655298,343422,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",120822220,313464,5201 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",120822220,313464,5201 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,120822220,313464,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,128424052,334368,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,128424052,334368,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,128424052,334368,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,128424052,334368,5215 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Draft/stake",279213296,711004,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Locked/stake",279213296,711004,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Finished/stake",279213296,711004,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Draft/stake",272564030,693562,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Locked/stake",272564030,693562,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Finished/stake",272564030,693562,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Draft/stake",295369526,756274,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Locked/stake",295369526,756274,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Finished/stake",295369526,756274,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",256407800,648292,7221 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",256407800,648292,7221 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,256407800,648292,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,279213296,711004,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,279213296,711004,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,279213296,711004,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,279213296,711004,7283 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Draft/stake",467699851,1181799,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Locked/stake",467699851,1181799,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Finished/stake",467699851,1181799,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Draft/stake",458202235,1157367,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Locked/stake",458202235,1157367,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Finished/stake",458202235,1157367,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Draft/stake",500012311,1272339,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Locked/stake",500012311,1272339,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Finished/stake",500012311,1272339,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",425889775,1066827,9746 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",425889775,1066827,9746 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,425889775,1066827,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,467699851,1181799,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,467699851,1181799,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,467699851,1181799,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,467699851,1181799,9868 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Draft/stake",1674013803,4194887,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Locked/stake",1674013803,4194887,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Finished/stake",1674013803,4194887,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Draft/stake",1646286747,4125719,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Locked/stake",1646286747,4125719,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Finished/stake",1646286747,4125719,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Draft/stake",1809726135,4575155,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Locked/stake",1809726135,4575155,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Finished/stake",1809726135,4575155,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",1510574415,3745451,25961 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",1510574415,3745451,25961 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,1510574415,3745451,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1674013803,4194887,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1674013803,4194887,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1674013803,4194887,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1674013803,4194887,26506 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",130220070,339430,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",130220070,339430,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",130220070,339430,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Draft/stake",125849484,327580,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Locked/stake",125849484,327580,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Finished/stake",125849484,327580,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Draft/stake",133451316,348484,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Locked/stake",133451316,348484,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Finished/stake",133451316,348484,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",122618238,318526,5201 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",122618238,318526,5201 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,122618238,318526,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,130220070,339430,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,130220070,339430,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,130220070,339430,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,130220070,339430,5215 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Draft/stake",297011418,750706,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Locked/stake",297011418,750706,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Finished/stake",297011418,750706,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Draft/stake",290362152,733264,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Locked/stake",290362152,733264,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Finished/stake",290362152,733264,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Draft/stake",313167648,795976,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Locked/stake",313167648,795976,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Finished/stake",313167648,795976,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",274205922,687994,7221 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",274205922,687994,7221 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,274205922,687994,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,297011418,750706,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,297011418,750706,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,297011418,750706,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,297011418,750706,7283 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Draft/stake",505500603,1264801,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Locked/stake",505500603,1264801,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Finished/stake",505500603,1264801,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Draft/stake",496002987,1240369,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Locked/stake",496002987,1240369,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Finished/stake",496002987,1240369,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Draft/stake",537813063,1355341,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Locked/stake",537813063,1355341,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Finished/stake",537813063,1355341,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",463690527,1149829,9746 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",463690527,1149829,9746 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,463690527,1149829,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,505500603,1264801,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,505500603,1264801,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,505500603,1264801,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,505500603,1264801,9868 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Draft/stake",1839831387,4555009,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Locked/stake",1839831387,4555009,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Finished/stake",1839831387,4555009,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Draft/stake",1812104331,4485841,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Locked/stake",1812104331,4485841,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Finished/stake",1812104331,4485841,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Draft/stake",1975543719,4935277,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Locked/stake",1975543719,4935277,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Finished/stake",1975543719,4935277,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",1676391999,4105573,25961 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",1676391999,4105573,25961 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,1676391999,4105573,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1839831387,4555009,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1839831387,4555009,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1839831387,4555009,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1839831387,4555009,26506 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 -Agora/Governor/policy/GST minting,49408995,139981,1910 -Agora/Governor/validator/proposal creation,294638205,791763,8449 -Agora/Governor/validator/GATs minting,249873031,663031,8575 -Agora/Governor/validator/mutate governor state,86060874,238513,8049 +Agora/Governor/policy/GST minting,57584660,163806,2205 +Agora/Governor/validator/proposal creation,302549314,814787,8701 +Agora/Governor/validator/GATs minting,255328308,682125,8827 +Agora/Governor/validator/mutate governor state,93971983,261537,8301 From 3ec1645f5a1d9227bdd27b5044d0585fd980c032 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 16 Jul 2022 18:01:18 +0800 Subject: [PATCH 43/78] utilize `pletAll` wherever make sense --- agora/Agora/Proposal/Scripts.hs | 30 +-- agora/Agora/Proposal/Time.hs | 8 +- agora/Agora/Stake.hs | 3 +- bench.csv | 328 ++++++++++++++++---------------- 4 files changed, 178 insertions(+), 191 deletions(-) diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index a3bd325e..ad64b582 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -61,6 +61,7 @@ import Plutarch.Api.V1.ScriptContext ( ) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Extra.Comonad (pextract) +import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.IsData (pmatchEnum) import Plutarch.Extra.List (pisUniq', pmapMaybe, pmergeBy, pmsortBy) import Plutarch.Extra.Map (plookup, pupdate) @@ -104,24 +105,20 @@ proposalPolicy :: proposalPolicy (AssetClass (govCs, govTn)) = plam $ \_redeemer ctx' -> unTermCont $ do PScriptContext ctx' <- pmatchC ctx' - ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' + ctx <- pletAllC ctx' PTxInfo txInfo' <- pmatchC $ pfromData ctx.txInfo txInfo <- pletFieldsC @'["inputs", "mint"] txInfo' - PMinting _ownSymbol <- pmatchC $ pfromData ctx.purpose - - let inputs = txInfo.inputs - mintedValue = pfromData txInfo.mint PMinting ownSymbol' <- pmatchC $ pfromData ctx.purpose let mintedProposalST = passetClassValueOf - # mintedValue + # pfromData txInfo.mint # (passetClass # (pfield @"_0" # ownSymbol') # pconstant "") pguardC "Governance state-thread token must move" $ pisTokenSpent # (passetClass # pconstant govCs # pconstant govTn) - # inputs + # txInfo.inputs pguardC "Minted exactly one proposal ST" $ mintedProposalST #== 1 @@ -183,22 +180,11 @@ proposalValidator proposal = (pfromData -> proposalRedeemer, _) <- ptryFromC @(PAsData PProposalRedeemer) redeemer - proposalF <- - pletFieldsC - @'[ "proposalId" - , "effects" - , "status" - , "cosigners" - , "thresholds" - , "votes" - , "timingConfig" - , "startingTime" - ] - proposalDatum + proposalF <- pletAllC proposalDatum ownAddress <- pletC $ txOutF.address - thresholdsF <- pletFieldsC @'["execute", "create", "vote"] proposalF.thresholds + thresholdsF <- pletAllC proposalF.thresholds currentStatus <- pletC $ pfromData $ proposalF.status @@ -221,7 +207,7 @@ proposalValidator proposal = mustBePJust # "Own output should be present" #$ pfind # plam ( \input -> unTermCont $ do - inputF <- pletFieldsC @'["address", "value", "datumHash"] input + inputF <- pletAllC input -- TODO: this is highly inefficient: O(n) for every output, -- Maybe we can cache the sorted datum map? @@ -406,7 +392,7 @@ proposalValidator proposal = withSingleStake val = withSingleStake' #$ plam $ \stakeIn stakeOut stakeUnchange -> unTermCont $ do - stakeInF <- pletFieldsC @'["stakedAmount", "lockedBy", "owner"] stakeIn + stakeInF <- pletAllC stakeIn val stakeInF stakeOut stakeUnchange diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index 8b05b3e6..44c4cf47 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -47,7 +47,7 @@ import Plutarch.DataRepr ( PIsDataReprInstances (..), ) import Plutarch.Extra.Field (pletAllC) -import Plutarch.Extra.TermCont (pguardC, pletFieldsC, pmatchC) +import Plutarch.Extra.TermCont (pguardC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), PConstantDecl, @@ -348,11 +348,11 @@ currentProposalTime :: forall (s :: S). Term s (PPOSIXTimeRange :--> PProposalTi currentProposalTime = phoistAcyclic $ plam $ \iv -> unTermCont $ do PInterval iv' <- pmatchC iv - ivf <- pletFieldsC @'["from", "to"] iv' + ivf <- pletAllC iv' PLowerBound lb <- pmatchC ivf.from PUpperBound ub <- pmatchC ivf.to - lbf <- pletFieldsC @'["_0", "_1"] lb - ubf <- pletFieldsC @'["_0", "_1"] ub + lbf <- pletAllC lb + ubf <- pletAllC ub pure $ pcon $ PProposalTime diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index e2694282..89aaf91b 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -45,6 +45,7 @@ import Plutarch.DataRepr ( PDataFields, PIsDataReprInstances (PIsDataReprInstances), ) +import Plutarch.Extra.Field (pletAll) import Plutarch.Extra.IsData ( DerivePConstantViaDataList (..), ProductIsData (ProductIsData), @@ -501,7 +502,7 @@ pgetStakeRole = phoistAcyclic $ (pid' #== pid) (pcon PCreator) (pcon PIrrelevant) - PVoted lock' -> pletFields @'["votedOn", "votedFor"] lock' $ \lockF -> + PVoted lock' -> pletAll lock' $ \lockF -> pif (lockF.votedOn #== pid) (pcon $ PVoter lockF.votedFor) diff --git a/bench.csv b/bench.csv index 640aebd3..e9ef9453 100644 --- a/bench.csv +++ b/bench.csv @@ -7,223 +7,223 @@ Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 -Agora/Proposal/policy (proposal creation)/legal/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8681 Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,34975627,103548,2086 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1971 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8650 -Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,34975627,103548,2117 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,34975627,103548,2125 +Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2002 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2010 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5412 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,34975627,103548,2137 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2022 Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160422991,421241,5434 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,34975627,103548,2113 +Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,1998 Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153960499,403133,5400 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,34975627,103548,2117 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5404 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235405219,657707,8151 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,124051829,322526,5213 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,118915099,307672,5213 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,670429262,1868318,10781 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,554847017,1464934,7723 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,549710287,1450080,7723 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1328551536,3641835,14069 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1102819358,2917719,10860 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,124051829,322526,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,124051829,322526,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,124051829,322526,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,124051829,322526,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,554847017,1464934,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,554847017,1464934,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,554847017,1464934,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1102819358,2917719,10860 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1102819358,2917719,10860 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1102819358,2917719,10860 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1097682628,2902865,10860 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,118915099,307672,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,118915099,307672,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,118915099,307672,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,118915099,307672,5213 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,549710287,1450080,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,549710287,1450080,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,549710287,1450080,7723 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1097682628,2902865,10860 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1097682628,2902865,10860 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1097682628,2902865,10860 Agora/Proposal/validator/voting/legal/propsoal,253541830,711367,8133 -Agora/Proposal/validator/voting/legal/stake,141289029,371279,5239 +Agora/Proposal/validator/voting/legal/stake,136152299,356425,5239 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8114 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,124051829,322526,5222 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,118915099,307672,5222 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8116 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,124051829,322526,5224 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,117978393,308804,5152 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,118915099,307672,5224 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,118638207,307672,5152 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10969 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,501355049,1309158,7957 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,496218319,1294304,7957 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8477 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,124051829,322526,5465 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,446950999,1172710,7606 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,118915099,307672,5465 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,447610813,1171578,7606 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14538 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1131047930,2999739,11375 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1125911200,2984885,11375 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8930 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,124051829,322526,5767 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013080113,2701103,10673 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,118915099,307672,5767 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013739927,2699971,10673 Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8123 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,124051829,322526,5229 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,118915099,307672,5229 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8123 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,124051829,322526,5229 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,118915099,307672,5229 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8117 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,124051829,322526,5225 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,118915099,307672,5225 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8117 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,124051829,322526,5225 -Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,124051829,322526,5225 -Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,124051829,322526,5217 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,130220070,339430,5219 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,118915099,307672,5225 +Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,118915099,307672,5225 +Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,118915099,307672,5217 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,125083340,324576,5219 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236436652,664524,8114 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,133451316,348484,5235 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,128314586,333630,5235 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,249908859,704466,8125 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,130220070,339430,5217 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,125083340,324576,5217 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204228787,584379,8111 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,130220070,339430,5233 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,125083340,324576,5233 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212663044,609283,8123 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,130220070,339430,5223 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,125083340,324576,5223 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205544939,588263,8118 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,130220070,339430,5223 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,125083340,324576,5223 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205544939,588263,8118 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,133451316,348484,5239 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,128314586,333630,5239 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219548722,629597,8129 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,297011418,750706,7303 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,259870480,666572,7303 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379077900,1077188,10174 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,313167648,795976,7380 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,276026710,711842,7380 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444606435,1268442,10226 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,297011418,750706,7293 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,259870480,666572,7293 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312309599,902235,10167 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,297011418,750706,7374 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,259870480,666572,7374 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350698580,1013987,10220 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,297011418,750706,7324 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,259870480,666572,7324 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317778859,917311,10195 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,297011418,750706,7324 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,259870480,666572,7324 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317778859,917311,10195 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,313167648,795976,7400 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,276026710,711842,7400 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383838970,1109957,10246 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,505500603,1264801,9909 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,428354405,1094067,9909 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557379460,1593018,12750 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,537813063,1355341,10060 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,460666865,1184607,10060 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,687978405,1973412,12851 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,505500603,1264801,9888 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,428354405,1094067,9888 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447410614,1299555,12737 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,505500603,1264801,10049 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,428354405,1094067,10049 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523243000,1519867,12840 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,505500603,1264801,9949 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,428354405,1094067,9949 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458071259,1328621,12790 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,505500603,1264801,9949 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,428354405,1094067,9949 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458071259,1328621,12790 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,537813063,1355341,10100 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,460666865,1184607,10100 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589201780,1710407,12891 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1839831387,4555009,26674 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1506651525,3830035,26674 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698509444,4894330,29304 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1975543719,4935277,27362 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1642363857,4210303,27362 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245559013,6485220,29763 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1839831387,4555009,26590 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1506651525,3830035,26590 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312057110,3842403,29260 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1839831387,4555009,27301 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1506651525,3830035,27301 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627527288,4757499,29702 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1839831387,4555009,26843 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1506651525,3830035,26843 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1355942619,3961005,29473 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1839831387,4555009,26843 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1506651525,3830035,26843 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1355942619,3961005,29473 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1975543719,4935277,27531 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1642363857,4210303,27531 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903523764,5553287,29932 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",130220070,339430,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",130220070,339430,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",130220070,339430,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Draft/stake",125849484,327580,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Locked/stake",125849484,327580,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Finished/stake",125849484,327580,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Draft/stake",133451316,348484,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Locked/stake",133451316,348484,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Finished/stake",133451316,348484,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",122618238,318526,5201 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",122618238,318526,5201 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,122618238,318526,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,130220070,339430,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,130220070,339430,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,130220070,339430,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,130220070,339430,5215 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Draft/stake",297011418,750706,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Locked/stake",297011418,750706,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Finished/stake",297011418,750706,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Draft/stake",290362152,733264,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Locked/stake",290362152,733264,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Finished/stake",290362152,733264,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Draft/stake",313167648,795976,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Locked/stake",313167648,795976,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Finished/stake",313167648,795976,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",274205922,687994,7221 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",274205922,687994,7221 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,274205922,687994,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,297011418,750706,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,297011418,750706,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,297011418,750706,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,297011418,750706,7283 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Draft/stake",505500603,1264801,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Locked/stake",505500603,1264801,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Finished/stake",505500603,1264801,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Draft/stake",496002987,1240369,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Locked/stake",496002987,1240369,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Finished/stake",496002987,1240369,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Draft/stake",537813063,1355341,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Locked/stake",537813063,1355341,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Finished/stake",537813063,1355341,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",463690527,1149829,9746 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",463690527,1149829,9746 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,463690527,1149829,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,505500603,1264801,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,505500603,1264801,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,505500603,1264801,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,505500603,1264801,9868 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Draft/stake",1839831387,4555009,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Locked/stake",1839831387,4555009,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Finished/stake",1839831387,4555009,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Draft/stake",1812104331,4485841,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Locked/stake",1812104331,4485841,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Finished/stake",1812104331,4485841,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Draft/stake",1975543719,4935277,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Locked/stake",1975543719,4935277,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Finished/stake",1975543719,4935277,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",1676391999,4105573,25961 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",1676391999,4105573,25961 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,1676391999,4105573,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1839831387,4555009,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1839831387,4555009,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1839831387,4555009,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1839831387,4555009,26506 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",125083340,324576,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",125083340,324576,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",125083340,324576,5219 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Draft/stake",120712754,312726,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Locked/stake",120712754,312726,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Finished/stake",120712754,312726,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Draft/stake",128314586,333630,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Locked/stake",128314586,333630,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Finished/stake",128314586,333630,5235 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",117481508,303672,5201 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",117481508,303672,5201 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,117481508,303672,5201 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,125083340,324576,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,125083340,324576,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,125083340,324576,5217 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,125083340,324576,5215 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Draft/stake",259870480,666572,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Locked/stake",259870480,666572,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Finished/stake",259870480,666572,7303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Draft/stake",253221214,649130,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Locked/stake",253221214,649130,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Finished/stake",253221214,649130,7309 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Draft/stake",276026710,711842,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Locked/stake",276026710,711842,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Finished/stake",276026710,711842,7380 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",237064984,603860,7221 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",237064984,603860,7221 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,237064984,603860,7221 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,259870480,666572,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,259870480,666572,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,259870480,666572,7293 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,259870480,666572,7283 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Draft/stake",428354405,1094067,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Locked/stake",428354405,1094067,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Finished/stake",428354405,1094067,9909 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Draft/stake",418856789,1069635,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Locked/stake",418856789,1069635,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Finished/stake",418856789,1069635,9920 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Draft/stake",460666865,1184607,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Locked/stake",460666865,1184607,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Finished/stake",460666865,1184607,10060 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",386544329,979095,9746 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",386544329,979095,9746 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,386544329,979095,9746 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,428354405,1094067,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,428354405,1094067,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,428354405,1094067,9888 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,428354405,1094067,9868 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Draft/stake",1506651525,3830035,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Locked/stake",1506651525,3830035,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Finished/stake",1506651525,3830035,26674 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Draft/stake",1478924469,3760867,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Locked/stake",1478924469,3760867,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Finished/stake",1478924469,3760867,26736 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Draft/stake",1642363857,4210303,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Locked/stake",1642363857,4210303,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Finished/stake",1642363857,4210303,27362 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",1343212137,3380599,25961 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",1343212137,3380599,25961 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,1343212137,3380599,25961 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1506651525,3830035,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1506651525,3830035,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1506651525,3830035,26590 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1506651525,3830035,26506 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 From 4317987964c142267b608c92b00bba95240215ce Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 16 Jul 2022 18:26:35 +0800 Subject: [PATCH 44/78] check GST while moving from `Locked` --- agora-specs/Sample/Proposal/Advance.hs | 115 +++++++++++++++++++++++-- agora-specs/Sample/Proposal/Shared.hs | 5 +- agora-specs/Spec/Proposal.hs | 12 ++- agora/Agora/Proposal/Scripts.hs | 25 +++++- bench.csv | 89 ++++++++++--------- 5 files changed, 187 insertions(+), 59 deletions(-) diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 73c2ab60..8af1f9d1 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -16,6 +16,8 @@ module Sample.Proposal.Advance ( Parameters (..), ) where +import Agora.Governor +import Agora.Governor.Scripts (governorValidator) import Agora.Proposal ( ProposalDatum (..), ProposalId (ProposalId), @@ -46,7 +48,8 @@ import Agora.Stake ( import Agora.Stake.Scripts (stakeValidator) import Data.Coerce (coerce) import Data.Default (def) -import Data.List (sort) +import Data.List (singleton, sort) +import Data.Maybe (fromJust) import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( BaseBuilder, @@ -76,8 +79,10 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (proposalTxRef, stakeTxRef) +import Sample.Proposal.Shared (governorTxRef, proposalTxRef, stakeTxRef) import Sample.Shared ( + govAssetClass, + govValidatorHash, minAda, proposalPolicySymbol, proposalValidatorHash, @@ -109,6 +114,12 @@ data Parameters = Parameters -- ^ Whether the transaction is signed by all the cosigners. , perStakeGTs :: Tagged GTTag Integer -- ^ The staked amount of each stake. + , moveGovernorST :: Bool + -- ^ Whether the GST should be moved or not. + -- If this is set to true, the governor validator will be run in + -- the 'mkTestTree'. + , modifyGovernor :: Bool + -- ^ Whether to modify the governor output datum or not. } --- @@ -117,9 +128,13 @@ data Parameters = Parameters proposalRef :: TxOutRef proposalRef = TxOutRef proposalTxRef 1 +-- | Reference to the governor UTXO. +governorRef :: TxOutRef +governorRef = TxOutRef governorTxRef 2 + -- | Create the reference to a particular stake UTXO. mkStakeRef :: Int -> TxOutRef -mkStakeRef = TxOutRef stakeTxRef . (+ 2) . fromIntegral +mkStakeRef = TxOutRef stakeTxRef . (+ 3) . fromIntegral --- @@ -176,12 +191,25 @@ mkStakeInputDatums ps = , Voted (ProposalId 1) (ResultTag 2) ] +governorInputDatum :: GovernorDatum +governorInputDatum = + GovernorDatum + { proposalThresholds = def + , nextProposalId = ProposalId 42 + , proposalTimings = def + , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 + } + --- -- | Script purpose of the proposal validator. proposalScriptPurpose :: ScriptPurpose proposalScriptPurpose = Spending proposalRef +governorScriptPurpose :: ScriptPurpose +governorScriptPurpose = Spending governorRef + -- | Script purpose of the stake validator, given which stake we want to spend. mkStakeScriptPurpose :: Int -> ScriptPurpose mkStakeScriptPurpose = Spending . mkStakeRef @@ -194,6 +222,12 @@ mkStakeScriptPurpose = Spending . mkStakeRef proposalRedeemer :: ProposalRedeemer proposalRedeemer = AdvanceProposal +{- | The propsoal redeemer used to spend the governor UTXO, which is always + 'MintGATs' in this case. +-} +governorRedeemer :: GovernorRedeemer +governorRedeemer = MintGATs + {- | The propsoal redeemer used to spend the stake UTXO, which is always 'WitnessStake' in this case. -} @@ -219,6 +253,9 @@ advance :: advance ps = let pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 + gst = Value.assetClassValue govAssetClass 1 + + --- proposalInputDatum :: ProposalDatum proposalInputDatum = @@ -230,6 +267,8 @@ advance ps = { status = ps.toStatus } + --- + stakeInputDatums :: [StakeDatum] stakeInputDatums = mkStakeInputDatums ps @@ -275,19 +314,50 @@ advance ps = in if ps.includeAllStakes then withIds else [head withIds] + --- - signBuilder :: BaseBuilder - signBuilder = + governorOutputDatum :: GovernorDatum + governorOutputDatum = + if ps.modifyGovernor + then + governorInputDatum + { nextProposalId = ProposalId 41 + } + else governorInputDatum + + governorBuilder :: BaseBuilder + governorBuilder = + if ps.moveGovernorST + then + mconcat + [ input $ + script govValidatorHash + . withValue (sortValue $ gst <> minAda) + . withDatum governorInputDatum + . withOutRef governorRef + , output $ + script govValidatorHash + . withValue (sortValue $ gst <> minAda) + . withDatum governorOutputDatum + ] + else mempty + + --- + + sigBuilder :: BaseBuilder + sigBuilder = let sos = mkStakeOwners ps in if ps.signByAllCosigners then foldMap signedWith sos else signedWith $ head sos + --- + builder :: BaseBuilder builder = mconcat [ txId "95ba4015e30aef16a3461ea97a779f814aeea6b8009d99a94add4b8293be737a" - , signBuilder + , sigBuilder , timeRange ps.validTimeRange , input $ script proposalValidatorHash @@ -299,7 +369,7 @@ advance ps = . withValue (pst <> minAda) . withDatum proposalOutputDatum ] - in buildTxInfoUnsafe $ builder <> stakeBuilder + in buildTxInfoUnsafe $ builder <> stakeBuilder <> governorBuilder --- @@ -431,6 +501,8 @@ advanceToNextStateInTimeParameters nCosigners = signByAllCosigners = case from of Draft -> True _ -> False + + shouldIncludeGovernor = from == Locked in Parameters { fromStatus = from , toStatus = getNextState from @@ -443,6 +515,8 @@ advanceToNextStateInTimeParameters nCosigners = , perStakeGTs = (def :: ProposalThresholds).vote `div` fromIntegral nCosigners + 1 + , moveGovernorST = shouldIncludeGovernor + , modifyGovernor = False } ) [Draft, VotingReady, Locked] @@ -461,6 +535,8 @@ advanceToFailedStateDueToTimeoutParameters nCosigners = , stakeCount = fromIntegral nCosigners , signByAllCosigners = False , perStakeGTs = 1 + , moveGovernorST = False + , modifyGovernor = False } ) [Draft, VotingReady, Locked] @@ -480,6 +556,8 @@ insufficientVotesParameters = , stakeCount = 1 , signByAllCosigners = True , perStakeGTs = 20 + , moveGovernorST = False + , modifyGovernor = False } insufficientCosignsParameters :: Int -> Parameters @@ -500,6 +578,8 @@ advanceFromFinishedParameters = , stakeCount = 1 , signByAllCosigners = True , perStakeGTs = 20 + , moveGovernorST = False + , modifyGovernor = False } invalidOutputStakeParameters :: Int -> [Parameters] @@ -512,8 +592,8 @@ invalidOutputStakeParameters nCosigners = {- | Create a test tree that runs the stake validator and proposal validator to test the advancing functionalities. -} -mkTestTree :: String -> Parameters -> Bool -> SpecificationTree -mkTestTree name ps isValidForProposalValidator = group name [proposal, stake] +mkTestTree :: String -> Parameters -> Bool -> Maybe Bool -> SpecificationTree +mkTestTree name ps isValidForProposalValidator isValidForGovernorValidator = group name final where txInfo = advance ps @@ -544,3 +624,20 @@ mkTestTree name ps isValidForProposalValidator = group name [proposal, stake] txInfo (mkStakeScriptPurpose idx) ) + + proposalAndStake = [proposal, stake] + + governor = + if ps.moveGovernorST + then + singleton $ + testValidator + (fromJust isValidForGovernorValidator) + "governor" + (governorValidator Shared.governor) + governorInputDatum + governorRedeemer + (ScriptContext txInfo governorScriptPurpose) + else mempty + + final = proposalAndStake <> governor diff --git a/agora-specs/Sample/Proposal/Shared.hs b/agora-specs/Sample/Proposal/Shared.hs index 0082f68a..d2def9f7 100644 --- a/agora-specs/Sample/Proposal/Shared.hs +++ b/agora-specs/Sample/Proposal/Shared.hs @@ -5,7 +5,7 @@ Description: Shared constants for propsoal samples Shared constants for propsoal samples. -} -module Sample.Proposal.Shared (proposalTxRef, stakeTxRef) where +module Sample.Proposal.Shared (proposalTxRef, stakeTxRef, governorTxRef) where import PlutusLedgerApi.V1 (TxId) @@ -16,3 +16,6 @@ proposalTxRef = "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" -- | 'TxId' of all the stake inputs in the samples. stakeTxRef :: TxId stakeTxRef = "0ca36f3a357bc69579ab2531aecd1e7d3714d993c7820f40b864be15" + +governorTxRef :: TxId +governorTxRef = "cb076140e80d240f9c89e478aedbddbe6f4734fecbd0ae3e37404c12e7798c0f" diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index a05d147e..d7a712ab 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -147,6 +147,7 @@ specs = nCosigners ) True + Nothing , Advance.mkTestTree "to failed state" ( head $ @@ -154,6 +155,7 @@ specs = nCosigners ) True + Nothing ] illegalGroup = @@ -163,10 +165,12 @@ specs = "insufficient cosigns" (Advance.insufficientCosignsParameters nCosigners) False + Nothing , Advance.mkTestTree "invalid stake output" (head $ Advance.invalidOutputStakeParameters nCosigners) False + Nothing ] in group name [legalGroup, illegalGroup] @@ -179,14 +183,14 @@ specs = map ( \ps -> let name = "from: " <> show ps.fromStatus - in Advance.mkTestTree name ps True + in Advance.mkTestTree name ps True (Just True) ) (tail $ Advance.advanceToNextStateInTimeParameters 1) , group "advance to failed state" $ map ( \ps -> let name = "from: " <> show ps.fromStatus - in Advance.mkTestTree name ps True + in Advance.mkTestTree name ps True (Just True) ) (tail $ Advance.advanceToFailedStateDueToTimeoutParameters 1) ] @@ -198,10 +202,12 @@ specs = "insufficient votes" Advance.insufficientVotesParameters False + Nothing , Advance.mkTestTree "initial state is Finished" Advance.advanceFromFinishedParameters False + Nothing , group "invalid stake output" $ do @@ -213,7 +219,7 @@ specs = <> show nStake <> " stakes" - pure $ Advance.mkTestTree name ps False + pure $ Advance.mkTestTree name ps False (Just True) ] in [draftGroup, legalGroup, illegalGroup] , group "unlocking" $ diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index ad64b582..247b56e2 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -76,7 +76,7 @@ import Plutarch.Extra.TermCont ( ) import Plutarch.SafeMoney (PDiscrete (..)) import Plutarch.Unsafe (punsafeCoerce) -import PlutusLedgerApi.V1.Value (AssetClass (AssetClass)) +import PlutusLedgerApi.V1.Value (AssetClass (AssetClass, unAssetClass)) {- | Policy for Proposals. @@ -651,12 +651,29 @@ proposalValidator proposal = pguardC "Cannot advance ahead of time" notTooEarly pguardC "Finished proposals cannot be advanced" $ pnot # isFinished + let gstSymbol = + pconstant $ + fst $ + unAssetClass proposal.governorSTAssetClass + + gstMoved <- + pletC $ + pany + # plam + ( \( (pfield @"value" #) + . (pfield @"resolved" #) + . pfromData -> + value + ) -> + psymbolValueOf # gstSymbol # value #== 1 + ) + # txInfoF.inputs + let toFailedState = unTermCont $ do pguardC "Proposal should fail: not on time" $ proposalOutStatus #== pconstant Finished - -- TODO: Should check that the GST is not moved - -- if the proposal is in 'Locked' state. + pguardC "GST not moved" $ pnot # gstMoved pure $ pconstant () @@ -677,6 +694,8 @@ proposalValidator proposal = pguardC "Proposal status set to Finished" $ proposalOutStatus #== pconstant Finished + pguardC "GST moved" gstMoved + -- TODO: Perform other necessary checks. pure $ pconstant () _ -> pconstant () diff --git a/bench.csv b/bench.csv index e9ef9453..4ea97f2c 100644 --- a/bench.csv +++ b/bench.csv @@ -29,11 +29,11 @@ Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5404 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235405219,657707,8151 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235543219,658307,8360 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,118915099,307672,5213 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,670429262,1868318,10781 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,670567262,1868918,10990 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,549710287,1450080,7723 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1328551536,3641835,14069 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1328689536,3642435,14278 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1097682628,2902865,10860 Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,118915099,307672,5213 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,118915099,307672,5213 @@ -45,89 +45,92 @@ Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 co Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1097682628,2902865,10860 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1097682628,2902865,10860 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1097682628,2902865,10860 -Agora/Proposal/validator/voting/legal/propsoal,253541830,711367,8133 +Agora/Proposal/validator/voting/legal/propsoal,253679830,711967,8342 Agora/Proposal/validator/voting/legal/stake,136152299,356425,5239 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222392288,630302,8114 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222530288,630902,8323 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,118915099,307672,5222 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217337596,619581,8116 +Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217475596,620181,8325 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,118915099,307672,5224 Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,118638207,307672,5152 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602596705,1722841,10969 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602734705,1723441,11178 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,496218319,1294304,7957 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239706944,681645,8477 +Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239844944,682245,8686 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,118915099,307672,5465 Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,447610813,1171578,7606 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183788938,3402248,14538 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183926938,3402848,14747 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1125911200,2984885,11375 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267668629,759225,8930 +Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267806629,759825,9139 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,118915099,307672,5767 Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013739927,2699971,10673 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,253438293,715975,8123 +Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,272116829,760091,8332 Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,118915099,307672,5229 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,242199184,683144,8123 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,118915099,307672,5229 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,239371739,677134,8117 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,295366820,822071,8771 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,156324691,401372,5668 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/governor,258411069,667386,8946 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,258602387,722952,8326 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,118915099,307672,5225 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,240502717,679538,8117 +Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,259733365,725356,8326 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,118915099,307672,5225 Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,118915099,307672,5225 Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,118915099,307672,5217 +Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 1 stakes/governor,258411069,667386,8946 +Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 5 stakes/governor,265599017,688074,9187 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,125083340,324576,5219 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236436652,664524,8114 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236574652,665124,8323 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,128314586,333630,5235 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,249908859,704466,8125 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,250046859,705066,8334 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,125083340,324576,5217 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204228787,584379,8111 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204366787,584979,8320 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,125083340,324576,5233 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212663044,609283,8123 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212801044,609883,8332 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,125083340,324576,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205544939,588263,8118 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205682939,588863,8327 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,125083340,324576,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205544939,588263,8118 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205682939,588863,8327 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,128314586,333630,5239 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219548722,629597,8129 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219686722,630197,8338 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,259870480,666572,7303 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379077900,1077188,10174 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379215900,1077788,10383 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,276026710,711842,7380 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444606435,1268442,10226 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444744435,1269042,10435 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,259870480,666572,7293 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312309599,902235,10167 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312447599,902835,10376 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,259870480,666572,7374 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350698580,1013987,10220 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350836580,1014587,10429 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,259870480,666572,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317778859,917311,10195 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317916859,917911,10404 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,259870480,666572,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317778859,917311,10195 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317916859,917911,10404 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,276026710,711842,7400 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383838970,1109957,10246 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383976970,1110557,10455 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,428354405,1094067,9909 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557379460,1593018,12750 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557517460,1593618,12959 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,460666865,1184607,10060 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,687978405,1973412,12851 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,688116405,1974012,13060 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,428354405,1094067,9888 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447410614,1299555,12737 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447548614,1300155,12946 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,428354405,1094067,10049 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523243000,1519867,12840 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523381000,1520467,13049 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,428354405,1094067,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458071259,1328621,12790 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458209259,1329221,12999 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,428354405,1094067,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458071259,1328621,12790 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458209259,1329221,12999 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,460666865,1184607,10100 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589201780,1710407,12891 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589339780,1711007,13100 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1506651525,3830035,26674 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698509444,4894330,29304 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698647444,4894930,29513 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1642363857,4210303,27362 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245559013,6485220,29763 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245697013,6485820,29972 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1506651525,3830035,26590 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312057110,3842403,29260 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312195110,3843003,29469 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1506651525,3830035,27301 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627527288,4757499,29702 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627665288,4758099,29911 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1506651525,3830035,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1355942619,3961005,29473 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1356080619,3961605,29682 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1506651525,3830035,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1355942619,3961005,29473 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1356080619,3961605,29682 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1642363857,4210303,27531 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903523764,5553287,29932 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903661764,5553887,30141 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",125083340,324576,5219 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",125083340,324576,5219 "Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",125083340,324576,5219 From 51c4955a378001f9ff6192f035cd89a50ab84032 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sun, 17 Jul 2022 21:56:29 +0800 Subject: [PATCH 45/78] add tests for minting GST --- agora-specs/Sample/Governor/Initialize.hs | 263 ++++++++++++++++++++++ agora-specs/Spec/Governor.hs | 37 ++- agora.cabal | 1 + bench.csv | 3 +- 4 files changed, 282 insertions(+), 22 deletions(-) create mode 100644 agora-specs/Sample/Governor/Initialize.hs diff --git a/agora-specs/Sample/Governor/Initialize.hs b/agora-specs/Sample/Governor/Initialize.hs new file mode 100644 index 00000000..db7f1d7b --- /dev/null +++ b/agora-specs/Sample/Governor/Initialize.hs @@ -0,0 +1,263 @@ +{- | +Module : Sample.Governor.Initialize +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of minting GST. + +Sample and utilities for testing the functionalities of minting GST. +-} +module Sample.Governor.Initialize ( + mintGST, + Parameters (..), + totallyValidParameters, + invalidDatumTimingConfigParameters, + invalidDatumMaxTimeRangeWidthParameters, + invalidDatumThresholdsParameters, + withoutGovernorDatumParameters, + witnessNotPresentedParameters, + mintMoreThanOneGSTParameters, + mintGSTWithNoneEmptyNameParameters, + mkTestCase, +) where + +import Agora.Governor (Governor (..), GovernorDatum (..)) +import Agora.Governor.Scripts ( + governorPolicy, + governorSTAssetClassFromGovernor, + governorValidatorHash, + ) +import Agora.Proposal (ProposalId (..), ProposalThresholds (..)) +import Agora.Proposal.Time (MaxTimeRangeWidth (MaxTimeRangeWidth), ProposalTimingConfig (ProposalTimingConfig)) +import Data.Default (Default (..)) +import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + mint, + output, + pubKey, + script, + signedWith, + txId, + withDatum, + withOutRef, + withValue, + ) +import PlutusLedgerApi.V1 ( + CurrencySymbol, + MintingPolicy, + ScriptContext (..), + ScriptPurpose (Minting), + TxInfo, + TxOutRef (TxOutRef), + ValidatorHash, + ) +import PlutusLedgerApi.V1.Value (AssetClass (..)) +import PlutusLedgerApi.V1.Value qualified as Value +import Sample.Shared ( + minAda, + ) +import Sample.Shared qualified as Shared +import Test.Specification (SpecificationTree, testPolicy) +import Test.Util (pubKeyHashes, sortValue) + +data Parameters = Parameters + { datumThresholdsValid :: Bool + , datumMaxTimeRangeWidthValid :: Bool + , datumTimingConfigValid :: Bool + , withGovernorDatum :: Bool + , presentWitness :: Bool + , mintMoreThanOneStateToken :: Bool + , mintStateTokenWithName :: Bool + } + +-------------------------------------------------------------------------------- + +validGovernorOutputDatum :: GovernorDatum +validGovernorOutputDatum = + GovernorDatum + { proposalThresholds = def + , nextProposalId = ProposalId 0 + , proposalTimings = def + , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 + } + +invalidProposalThresholds :: ProposalThresholds +invalidProposalThresholds = ProposalThresholds (-1) (-1) (-1) + +invalidMaxTimeRangeWidth :: MaxTimeRangeWidth +invalidMaxTimeRangeWidth = MaxTimeRangeWidth 0 + +invalidProposalTimings :: ProposalTimingConfig +invalidProposalTimings = ProposalTimingConfig (-1) (-1) (-1) (-1) + +witnessRef :: TxOutRef +witnessRef = TxOutRef "b0353c22b0bd6c5296a8eef160ba25d90b5dc82a9bb8bdaa6823ffc19515d6ad" 0 + +governor :: Governor +governor = + Shared.governor + { gstOutRef = witnessRef + } + +govAssetClass :: AssetClass +govAssetClass = governorSTAssetClassFromGovernor governor + +govValidatorHash :: ValidatorHash +govValidatorHash = governorValidatorHash governor + +govPolicy :: MintingPolicy +govPolicy = mkMintingPolicy (governorPolicy governor) + +govSymbol :: CurrencySymbol +govSymbol = mintingPolicySymbol govPolicy + +-------------------------------------------------------------------------------- + +mintGST :: Parameters -> TxInfo +mintGST ps = buildTxInfoUnsafe builder + where + gstAC = + if ps.mintStateTokenWithName + then AssetClass (govSymbol, "12345") + else govAssetClass + gstCount = + if ps.mintMoreThanOneStateToken + then 10 + else 1 + gst = Value.assetClassValue gstAC gstCount + + --- + + governorOutputDatum = + let th = if ps.datumThresholdsValid then def else invalidProposalThresholds + trw = if ps.datumMaxTimeRangeWidthValid then def else invalidMaxTimeRangeWidth + ptc = if ps.datumTimingConfigValid then def else invalidProposalTimings + in validGovernorOutputDatum + { proposalThresholds = th + , proposalTimings = ptc + , createProposalTimeRangeMaxWidth = trw + } + + governorValue = sortValue $ gst <> minAda + + --- + + witnessValue = minAda + witnessPubKey = head pubKeyHashes + + --- + + witnessBuilder :: BaseBuilder + witnessBuilder = + if ps.presentWitness + then + mconcat + [ input $ + pubKey witnessPubKey + . withValue witnessValue + . withOutRef witnessRef + , output $ + pubKey witnessPubKey + . withValue witnessValue + ] + else mempty + + --- + + govBuilder :: BaseBuilder + govBuilder = + let datum = + if ps.withGovernorDatum + then withDatum governorOutputDatum + else id + in output $ + script govValidatorHash + . withValue governorValue + . datum + -- + + builder :: BaseBuilder + builder = + mconcat + [ txId "986b756ffb1c9839fc8d0b22a308ac91d5b5d0ebbfa683a47588c8a5cf70b5af" + , signedWith (pubKeyHashes !! 1) + , mint gst + , govBuilder + , witnessBuilder + ] + +-------------------------------------------------------------------------------- + +totallyValidParameters :: Parameters +totallyValidParameters = + Parameters + { datumThresholdsValid = True + , datumMaxTimeRangeWidthValid = True + , datumTimingConfigValid = True + , withGovernorDatum = True + , presentWitness = True + , mintMoreThanOneStateToken = False + , mintStateTokenWithName = False + } + +invalidDatumThresholdsParameters :: Parameters +invalidDatumThresholdsParameters = + totallyValidParameters + { datumThresholdsValid = False + } + +invalidDatumMaxTimeRangeWidthParameters :: Parameters +invalidDatumMaxTimeRangeWidthParameters = + totallyValidParameters + { datumMaxTimeRangeWidthValid = False + } + +invalidDatumTimingConfigParameters :: Parameters +invalidDatumTimingConfigParameters = + totallyValidParameters + { datumTimingConfigValid = False + } + +withoutGovernorDatumParameters :: Parameters +withoutGovernorDatumParameters = + totallyValidParameters + { withGovernorDatum = False + } + +witnessNotPresentedParameters :: Parameters +witnessNotPresentedParameters = + totallyValidParameters + { presentWitness = False + } + +mintMoreThanOneGSTParameters :: Parameters +mintMoreThanOneGSTParameters = + totallyValidParameters + { mintMoreThanOneStateToken = True + } + +mintGSTWithNoneEmptyNameParameters :: Parameters +mintGSTWithNoneEmptyNameParameters = + totallyValidParameters + { mintStateTokenWithName = True + } + +-------------------------------------------------------------------------------- + +mkTestCase :: String -> Parameters -> Bool -> SpecificationTree +mkTestCase + name + ps + valid = policyTest + where + txInfo = mintGST ps + + policyTest = + testPolicy + valid + name + (governorPolicy governor) + () + (ScriptContext txInfo (Minting govSymbol)) diff --git a/agora-specs/Spec/Governor.hs b/agora-specs/Spec/Governor.hs index cb905dee..532dd2ec 100644 --- a/agora-specs/Spec/Governor.hs +++ b/agora-specs/Spec/Governor.hs @@ -14,15 +14,15 @@ TODO: Add negative test cases, see [#76](https://github.com/Liqwid-Labs/agora/is module Spec.Governor (specs) where import Agora.Governor (GovernorDatum (..), GovernorRedeemer (..)) -import Agora.Governor.Scripts (governorPolicy, governorValidator) +import Agora.Governor.Scripts (governorValidator) import Agora.Proposal (ProposalId (..)) import Data.Default.Class (Default (def)) -import Sample.Governor (createProposal, mintGATs, mintGST, mutateState) +import Sample.Governor (mintGATs, mutateState) +import Sample.Governor.Initialize qualified as GST import Sample.Shared qualified as Shared import Test.Specification ( SpecificationTree, group, - policySucceedsWith, validatorSucceedsWith, ) @@ -31,27 +31,24 @@ specs :: [SpecificationTree] specs = [ group "policy" - [ policySucceedsWith - "GST minting" - (governorPolicy Shared.governor) - () - mintGST + [ GST.mkTestCase "totally legal" GST.totallyValidParameters True + , group + "illegal" + [ GST.mkTestCase "invalid thresholds" GST.invalidDatumThresholdsParameters False + , GST.mkTestCase + "invalid max time range width for proposal creation" + GST.invalidDatumMaxTimeRangeWidthParameters + False + , GST.mkTestCase "invalid timings" GST.invalidDatumTimingConfigParameters False + , GST.mkTestCase "no governor datum" GST.withoutGovernorDatumParameters False + , GST.mkTestCase "no witness UTXO" GST.witnessNotPresentedParameters False + , GST.mkTestCase "mint more than one GST" GST.mintMoreThanOneGSTParameters False + , GST.mkTestCase "GST has non-empty name" GST.mintGSTWithNoneEmptyNameParameters False + ] ] , group "validator" [ validatorSucceedsWith - "proposal creation" - (governorValidator Shared.governor) - ( GovernorDatum - def - (ProposalId 0) - def - def - 3 - ) - CreateProposal - createProposal - , validatorSucceedsWith "GATs minting" (governorValidator Shared.governor) ( GovernorDatum diff --git a/agora.cabal b/agora.cabal index cb0283cf..6485c155 100644 --- a/agora.cabal +++ b/agora.cabal @@ -188,6 +188,7 @@ library agora-specs Sample.Effect.GovernorMutation Sample.Effect.TreasuryWithdrawal Sample.Governor + Sample.Governor.Initialize Sample.Proposal.Advance Sample.Proposal.Cosign Sample.Proposal.Create diff --git a/bench.csv b/bench.csv index 4ea97f2c..6579952c 100644 --- a/bench.csv +++ b/bench.csv @@ -232,7 +232,6 @@ Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,870 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 -Agora/Governor/policy/GST minting,57584660,163806,2205 -Agora/Governor/validator/proposal creation,302549314,814787,8701 +Agora/Governor/policy/totally legal,60002734,167736,2267 Agora/Governor/validator/GATs minting,255328308,682125,8827 Agora/Governor/validator/mutate governor state,93971983,261537,8301 From f6cf4f01db41865a7d0dde1e2023e310bbb1c380 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 18 Jul 2022 16:46:52 +0800 Subject: [PATCH 46/78] add `withBuiltinPairAsData` --- agora/Agora/Proposal.hs | 24 ++++++++++-------------- agora/Agora/Utils.hs | 34 ++++++++++++++++++++++++++++++++++ bench.csv | 16 ++++++++-------- 3 files changed, 52 insertions(+), 22 deletions(-) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 662f494a..cf7bddad 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -41,7 +41,7 @@ module Agora.Proposal ( import Agora.Proposal.Time (PProposalStartingTime, PProposalTimingConfig, ProposalStartingTime, ProposalTimingConfig) import Agora.SafeMoney (GTTag) -import Agora.Utils (mustBePJust) +import Agora.Utils (withBuiltinPairAsData) import Data.Tagged (Tagged) import GHC.Generics qualified as GHC import Generics.SOP (Generic, I (I)) @@ -62,8 +62,10 @@ import Plutarch.Extra.IsData ( EnumIsData (..), ProductIsData (ProductIsData), ) +import Plutarch.Extra.List (pfirstJust) import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map.Unsorted qualified as PUM +import Plutarch.Extra.Maybe (pfromJust) import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC) import Plutarch.Lift ( @@ -810,13 +812,6 @@ phighestVotes = phoistAcyclic $ let l :: Term _ (PBuiltinList _) l = pto $ pto votes - f :: - Term - _ - ( PBuiltinPair (PAsData PResultTag) (PAsData PInteger) - :--> PBuiltinPair (PAsData PResultTag) (PAsData PInteger) - :--> PBuiltinPair (PAsData PResultTag) (PAsData PInteger) - ) f = phoistAcyclic $ plam $ \this last -> let lastVotes = pfromData $ psndBuiltin # last @@ -839,13 +834,14 @@ pneutralOption = phoistAcyclic $ let l :: Term _ (PBuiltinList (PBuiltinPair (PAsData PResultTag) _)) l = pto effects - f :: Term _ (PBuiltinPair (PAsData PResultTag) (PAsData (PMap 'Unsorted _ _)) :--> PBool) f = phoistAcyclic $ - plam $ \((pfromData . (psndBuiltin #) -> el)) -> - let el' :: Term _ (PBuiltinList _) - el' = pto el - in pnull # el' - in pfromData $ pfstBuiltin #$ mustBePJust # "No neutral option" #$ pfind # f # l + plam $ + withBuiltinPairAsData $ \rt el -> + pif + (PAssocMap.pnull # el) + (pcon $ PJust rt) + (pcon PNothing) + in pfromJust #$ pfirstJust # f # l {- | Return true if the thresholds are valid. diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 3c460162..166451db 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -1,3 +1,5 @@ +{-# LANGUAGE QuantifiedConstraints #-} + {- | Module : Agora.Utils Maintainer : emi@haskell.fyi @@ -20,6 +22,8 @@ module Agora.Utils ( isScriptAddress, isPubKey, pltAsData, + pon, + withBuiltinPairAsData, ) where import Plutarch.Api.V1 ( @@ -206,3 +210,33 @@ pltAsData :: pltAsData = phoistAcyclic $ plam $ \(pfromData -> l) (pfromData -> r) -> l #< r + +{- | Plutarch level 'Data.Function.on'. + + @since 0.2.0 +-} +pon :: + forall (a :: PType) (b :: PType) (c :: PType) (s :: S). + Term s ((b :--> b :--> c) :--> (a :--> b) :--> a :--> a :--> c) +pon = phoistAcyclic $ + plam $ \f g x y -> + let a = g # x + b = g # y + in f # a # b + +{- | 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 diff --git a/bench.csv b/bench.csv index 6579952c..f1ffc227 100644 --- a/bench.csv +++ b/bench.csv @@ -2,18 +2,18 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,92825132,256078,8201 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,92825132,256078,8229 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3747 Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8681 +Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8709 Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5404 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1971 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8650 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8678 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2002 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2010 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5412 @@ -66,15 +66,15 @@ Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,118915099,307672,5229 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,295366820,822071,8771 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,156324691,401372,5668 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/governor,258411069,667386,8946 +Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/governor,258666820,668654,8974 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,258602387,722952,8326 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,118915099,307672,5225 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,259733365,725356,8326 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,118915099,307672,5225 Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,118915099,307672,5225 Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,118915099,307672,5217 -Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 1 stakes/governor,258411069,667386,8946 -Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 5 stakes/governor,265599017,688074,9187 +Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 1 stakes/governor,258666820,668654,8974 +Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 5 stakes/governor,265854768,689342,9215 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,125083340,324576,5219 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236574652,665124,8323 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,128314586,333630,5235 @@ -233,5 +233,5 @@ Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Governor/policy/totally legal,60002734,167736,2267 -Agora/Governor/validator/GATs minting,255328308,682125,8827 -Agora/Governor/validator/mutate governor state,93971983,261537,8301 +Agora/Governor/validator/GATs minting,255584059,683393,8855 +Agora/Governor/validator/mutate governor state,93971983,261537,8329 From c450e1252d1d974e8bf14f0ebd0d9ce110dbad1e Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 18 Jul 2022 18:31:51 +0800 Subject: [PATCH 47/78] add tests for GAT minting no more propsoal T_T --- agora-specs/Sample/Proposal/Advance.hs | 1157 +++++++++++++------- agora-specs/Sample/Proposal/Cosign.hs | 2 +- agora-specs/Sample/Proposal/Create.hs | 4 +- agora-specs/Sample/Proposal/Shared.hs | 6 +- agora-specs/Sample/Proposal/UnlockStake.hs | 2 +- agora-specs/Sample/Proposal/Vote.hs | 2 +- agora-specs/Sample/Shared.hs | 2 +- agora-specs/Spec/Proposal.hs | 277 +++-- agora-testlib/Test/Util.hs | 23 +- agora/Agora/Governor/Scripts.hs | 25 +- agora/Agora/Stake.hs | 6 +- bench.csv | 791 +++++++++---- 12 files changed, 1545 insertions(+), 752 deletions(-) diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 8af1f9d1..28ec0e96 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -6,17 +6,45 @@ Description: Generate sample data for testing the functionalities of advancing p Sample and utilities for testing the functionalities of advancing proposals. -} module Sample.Proposal.Advance ( - advanceToNextStateInTimeParameters, - advanceToFailedStateDueToTimeoutParameters, - insufficientVotesParameters, - insufficientCosignsParameters, - advanceFromFinishedParameters, - invalidOutputStakeParameters, + -- * Parameters + ParameterBundle (..), + GovernorParameters (..), + AuthorityTokenParameters (..), + ProposalParameters (..), + StakeParameters (..), + Winner (..), + + -- * Testing Utilities + Validity (..), + advance, mkTestTree, - Parameters (..), + mkTestTree', + + -- * Parameter Bundles + mkValidToNextStateBundle, + mkValidToNextStateBundles, + mkValidToFailedStateBundles, + mkInsufficientVotesBundle, + mkAmbiguousWinnerBundle, + mkFromFinishedBundles, + mkInsufficientCosignsBundle, + mkToNextStateTooLateBundles, + mkInvalidOutputStakeBundles, + mkMintGATsForWrongEffectsBundle, + mkNoGATMintedBundle, + mkGATsWithWrongDatumBundle, + mkMintGATsWithoutTagBundle, + mkBadGovernorOutputDatumBundle, ) where -import Agora.Governor +import Agora.AuthorityToken ( + AuthorityToken (AuthorityToken), + authorityTokenPolicy, + ) +import Agora.Governor ( + GovernorDatum (..), + GovernorRedeemer (MintGATs), + ) import Agora.Governor.Scripts (governorValidator) import Agora.Proposal ( ProposalDatum (..), @@ -38,158 +66,313 @@ import Agora.Proposal.Time ( votingTime ), ) -import Agora.SafeMoney (GTTag) import Agora.Stake ( - ProposalLock (..), Stake (gtClassRef), StakeDatum (..), StakeRedeemer (WitnessStake), ) import Agora.Stake.Scripts (stakeValidator) -import Data.Coerce (coerce) +import Agora.Utils (validatorHashToTokenName) +import Control.Monad.State (execState, modify, when) import Data.Default (def) -import Data.List (singleton, sort) -import Data.Maybe (fromJust) +import Data.List (sort) +import Data.Maybe (catMaybes, fromJust) import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( BaseBuilder, buildTxInfoUnsafe, input, + mint, output, script, signedWith, timeRange, - txId, withDatum, withOutRef, - withTxId, withValue, ) +import Plutarch.Lift (PLifted, PUnsafeLiftDecl) import PlutusLedgerApi.V1 ( DatumHash, POSIXTime, POSIXTimeRange, PubKeyHash, ScriptContext (ScriptContext), - ScriptPurpose (Spending), + ScriptPurpose (Minting, Spending), TxInfo, TxOutRef (TxOutRef), ValidatorHash, - always, ) +import PlutusLedgerApi.V1.Value (AssetClass (..)) import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap -import Sample.Proposal.Shared (governorTxRef, proposalTxRef, stakeTxRef) +import Sample.Proposal.Shared ( + governorTxRef, + proposalTxRef, + stakeTxRef, + ) import Sample.Shared ( + authorityTokenSymbol, govAssetClass, govValidatorHash, minAda, proposalPolicySymbol, proposalValidatorHash, + signer, stake, stakeAssetClass, stakeValidatorHash, ) import Sample.Shared qualified as Shared -import Test.Specification (SpecificationTree, group, testValidator) -import Test.Util (closedBoundedInterval, pubKeyHashes, sortValue, updateMap) +import Test.Specification ( + SpecificationTree, + group, + testPolicy, + testValidator, + ) +import Test.Util ( + closedBoundedInterval, + datumHash, + groupsOfN, + pubKeyHashes, + sortValue, + toDatum, + updateMap, + validatorHashes, + ) + +data ParameterBundle = ParameterBundle + { proposalParameters :: ProposalParameters + , stakeParameters :: StakeParameters + , governorParameters :: Maybe GovernorParameters + , authorityTokenParameters :: Maybe AuthorityTokenParameters + , transactionTimeRange :: POSIXTimeRange + , extraSignature :: Maybe PubKeyHash + } + +newtype GovernorParameters = GovernorParameters + { invalidGovernorOutputDatum :: Bool + } + +data AuthorityTokenParameters = forall + (datum :: Type) + (pdatum :: S -> Type). + ( PUnsafeLiftDecl pdatum + , PLifted pdatum ~ datum + , PIsData pdatum + ) => + AuthorityTokenParameters + { mintGATsFor :: [ValidatorHash] + , carryDatum :: Maybe datum + , invalidTokenName :: Bool + } --- | Parameters for state transition of proposals. -data Parameters = Parameters +data Winner = EffectAt Index | All + +data ProposalParameters = ProposalParameters { fromStatus :: ProposalStatus - -- ^ Initial state of the proposal. , toStatus :: ProposalStatus - -- ^ Next state of the proposal. - , votes :: ProposalVotes - -- ^ Votes. - , includeAllStakes :: Bool - -- ^ Whether to add an extra cosigner without stake or not. - , validTimeRange :: POSIXTimeRange - -- ^ Valid time range of the transaction. - , alterOutputStakes :: Bool - -- ^ Whether to alter th output stakes or not. - , stakeCount :: Integer - -- ^ The number of stakes. - , signByAllCosigners :: Bool - -- ^ Whether the transaction is signed by all the cosigners. - , perStakeGTs :: Tagged GTTag Integer - -- ^ The staked amount of each stake. - , moveGovernorST :: Bool - -- ^ Whether the GST should be moved or not. - -- If this is set to true, the governor validator will be run in - -- the 'mkTestTree'. - , modifyGovernor :: Bool - -- ^ Whether to modify the governor output datum or not. + , effectList :: [AssocMap.Map ValidatorHash DatumHash] + , winnerAndVotes :: Maybe (Winner, Integer) + , numCosigners :: NumStake + , invalidProposalOutputDatum :: Bool } ---- +data StakeParameters = StakeParameters + { numStake :: NumStake + , perStakeGTs :: Integer + , transactionSignedByOwners :: Bool + , invalidStakeOutputDatum :: Bool + } --- | Reference to the proposal UTXO. -proposalRef :: TxOutRef -proposalRef = TxOutRef proposalTxRef 1 +type NumStake = Int +type Index = Int --- | Reference to the governor UTXO. -governorRef :: TxOutRef -governorRef = TxOutRef governorTxRef 2 +data Validity = Validity + { forProposalValidator :: Bool + , forStakeValidator :: Bool + , forGovernorValidator :: Maybe Bool + , forAuthorityTokenPolicy :: Maybe Bool + } --- | Create the reference to a particular stake UTXO. -mkStakeRef :: Int -> TxOutRef -mkStakeRef = TxOutRef stakeTxRef . (+ 3) . fromIntegral +-------------------------------------------------------------------------------- ---- +-- * Proposal --- | Default effects of the propsoal. -defEffects :: AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) -defEffects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] +mkCosigners :: NumStake -> [PubKeyHash] +mkCosigners = sort . flip take pubKeyHashes --- | Empty votes for the default effects. -emptyVotes :: ProposalVotes -emptyVotes = emptyVotesFor defEffects +outcomeIdxToResultTag :: Index -> ResultTag +outcomeIdxToResultTag = ResultTag . fromIntegral + +mkEffects :: + ProposalParameters -> + AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) +mkEffects ps = + let resultTags = map ResultTag [0 ..] + neutralEffect = AssocMap.empty + finalEffects = ps.effectList <> [neutralEffect] + in AssocMap.fromList $ zip resultTags finalEffects + +setWinner :: (Winner, Integer) -> ProposalVotes -> ProposalVotes +setWinner (All, votes) (ProposalVotes m) = + ProposalVotes $ AssocMap.mapMaybe (const $ Just votes) m +setWinner (EffectAt winnerIdx, votes) (ProposalVotes m) = + let winnerResultTag = outcomeIdxToResultTag winnerIdx + in ProposalVotes $ updateMap (const $ Just votes) winnerResultTag m + +mkVotes :: + ProposalParameters -> + ProposalVotes +mkVotes ps = + let effects = mkEffects ps + emptyVotes = emptyVotesFor effects + in maybe emptyVotes (`setWinner` emptyVotes) (ps.winnerAndVotes) -{- | The default proposal statring time, which doesn't really matter in this - case. --} proposalStartingTime :: POSIXTime proposalStartingTime = 0 ---- - --- | Create the input proposal datum given the parameters. -mkProposalInputDatum :: Parameters -> ProposalDatum +mkProposalInputDatum :: ProposalParameters -> ProposalDatum mkProposalInputDatum ps = - ProposalDatum - { proposalId = ProposalId 0 - , effects = defEffects - , status = ps.fromStatus - , cosigners = mkStakeOwners ps - , thresholds = def - , votes = ps.votes - , timingConfig = def - , startingTime = ProposalStartingTime proposalStartingTime - } + let effects = mkEffects ps + votes = mkVotes ps + st = ProposalStartingTime proposalStartingTime + in ProposalDatum + { proposalId = ProposalId 0 + , effects = effects + , status = ps.fromStatus + , cosigners = mkCosigners ps.numCosigners + , thresholds = def + , votes = votes + , timingConfig = def + , startingTime = st + } + +mkProposalOutputDatum :: ProposalParameters -> ProposalDatum +mkProposalOutputDatum ps = + let inputDatum = mkProposalInputDatum ps + outputCosigners = + if ps.invalidProposalOutputDatum + then [] + else inputDatum.cosigners + in inputDatum + { status = ps.toStatus + , cosigners = outputCosigners + } + +-- | Reference to the proposal UTXO. +proposalRef :: TxOutRef +proposalRef = TxOutRef proposalTxRef 1 + +mkProposalBuilder :: ProposalParameters -> BaseBuilder +mkProposalBuilder ps = + let pst = Value.singleton proposalPolicySymbol "" 1 + value = sortValue $ minAda <> pst + in mconcat + [ input $ + script proposalValidatorHash + . withOutRef proposalRef + . withDatum (mkProposalInputDatum ps) + . withValue value + , output $ + script proposalValidatorHash + . withDatum (mkProposalOutputDatum ps) + . withValue value + ] + +-- | Script purpose of the proposal validator. +proposalScriptPurpose :: ScriptPurpose +proposalScriptPurpose = Spending proposalRef + +{- | The proposal redeemer used to spend the proposal UTXO, which is always + 'AdvanceProposal' in this case. +-} +proposalRedeemer :: ProposalRedeemer +proposalRedeemer = AdvanceProposal + +-------------------------------------------------------------------------------- + +-- * Stake + +mkStakeOwners :: NumStake -> [PubKeyHash] +mkStakeOwners = mkCosigners -- | Create the input stake datums given the parameters. -mkStakeInputDatums :: Parameters -> [StakeDatum] +mkStakeInputDatums :: StakeParameters -> [StakeDatum] mkStakeInputDatums ps = - map - ( \pk -> + let template = StakeDatum - { stakedAmount = ps.perStakeGTs - , owner = pk - , lockedBy = existingLocks + { stakedAmount = Tagged ps.perStakeGTs + , owner = "" + , lockedBy = [] } - ) - $ mkStakeOwners ps - where - existingLocks :: [ProposalLock] - existingLocks = - [ Voted (ProposalId 0) (ResultTag 0) - , Voted (ProposalId 1) (ResultTag 2) - ] + in (\owner -> template {owner = owner}) + <$> mkStakeOwners ps.numStake + +mkStakeOutputDatums :: StakeParameters -> [StakeDatum] +mkStakeOutputDatums ps = + let inputDatums = mkStakeInputDatums ps + outputStakedAmount = + Tagged $ + if ps.invalidStakeOutputDatum + then ps.perStakeGTs * 10 + else ps.perStakeGTs + modify inp = inp {stakedAmount = outputStakedAmount} + in modify <$> inputDatums + +getStakeInputDatumAt :: StakeParameters -> Index -> StakeDatum +getStakeInputDatumAt ps = (!!) (mkStakeInputDatums ps) + +-- | Create the reference to a particular stake UTXO. +mkStakeRef :: Index -> TxOutRef +mkStakeRef = TxOutRef stakeTxRef . (+ 3) . fromIntegral + +mkStakeBuilder :: StakeParameters -> BaseBuilder +mkStakeBuilder ps = + let perStakeValue = + sortValue $ + minAda + <> Value.assetClassValue stakeAssetClass 1 + <> Value.assetClassValue + (untag stake.gtClassRef) + ps.perStakeGTs + perStake idx i o = + let withSig = + if ps.transactionSignedByOwners + then signedWith i.owner + else mempty + in mconcat + [ withSig + , input $ + script stakeValidatorHash + . withOutRef (mkStakeRef idx) + . withValue perStakeValue + . withDatum i + , output $ + script stakeValidatorHash + . withValue perStakeValue + . withDatum o + ] + in mconcat $ + zipWith3 + perStake + [0 :: Index ..] + (mkStakeInputDatums ps) + (mkStakeOutputDatums ps) + +-- | Script purpose of the stake validator, given which stake we want to spend. +getStakeScriptPurposeAt :: Index -> ScriptPurpose +getStakeScriptPurposeAt = Spending . mkStakeRef + +{- | The proposal redeemer used to spend the stake UTXO, which is always + 'WitnessStake' in this case. +-} +stakeRedeemer :: StakeRedeemer +stakeRedeemer = WitnessStake + +-------------------------------------------------------------------------------- + +-- * Governor governorInputDatum :: GovernorDatum governorInputDatum = @@ -201,177 +384,173 @@ governorInputDatum = , maximumProposalsPerStake = 3 } ---- +mkGovernorOutputDatum :: GovernorParameters -> GovernorDatum +mkGovernorOutputDatum ps = + if ps.invalidGovernorOutputDatum + then governorInputDatum {maximumProposalsPerStake = 15} + else governorInputDatum --- | Script purpose of the proposal validator. -proposalScriptPurpose :: ScriptPurpose -proposalScriptPurpose = Spending proposalRef +-- | Reference to the governor UTXO. +governorRef :: TxOutRef +governorRef = TxOutRef governorTxRef 2 + +mkGovernorBuilder :: GovernorParameters -> BaseBuilder +mkGovernorBuilder ps = + let gst = Value.assetClassValue govAssetClass 1 + value = sortValue $ gst <> minAda + in mconcat + [ input $ + script govValidatorHash + . withValue value + . withOutRef governorRef + . withDatum governorInputDatum + , output $ + script govValidatorHash + . withValue value + . withOutRef governorRef + . withDatum (mkGovernorOutputDatum ps) + ] governorScriptPurpose :: ScriptPurpose governorScriptPurpose = Spending governorRef --- | Script purpose of the stake validator, given which stake we want to spend. -mkStakeScriptPurpose :: Int -> ScriptPurpose -mkStakeScriptPurpose = Spending . mkStakeRef - ---- - -{- | The propsoal redeemer used to spend the proposal UTXO, which is always - 'AdvanceProposal' in this case. --} -proposalRedeemer :: ProposalRedeemer -proposalRedeemer = AdvanceProposal - -{- | The propsoal redeemer used to spend the governor UTXO, which is always +{- | The proposal redeemer used to spend the governor UTXO, which is always 'MintGATs' in this case. -} governorRedeemer :: GovernorRedeemer governorRedeemer = MintGATs -{- | The propsoal redeemer used to spend the stake UTXO, which is always - 'WitnessStake' in this case. --} -stakeRedeemer :: StakeRedeemer -stakeRedeemer = WitnessStake +-------------------------------------------------------------------------------- ---- +-- * Authority Token --- | Create some valid stake owners. -mkStakeOwners :: Parameters -> [PubKeyHash] -mkStakeOwners ps = - sort $ - take - (fromIntegral ps.stakeCount) - pubKeyHashes - ---- +mkAuthorityTokenBuilder :: AuthorityTokenParameters -> BaseBuilder +mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = + foldMap perEffect es + where + perEffect :: ValidatorHash -> BaseBuilder + perEffect vh = + let tn = + if invalidTokenName + then "" + else validatorHashToTokenName vh + ac = AssetClass (authorityTokenSymbol, tn) + minted = Value.assetClassValue ac 1 + value = sortValue $ minAda <> minted + in mconcat + [ mint minted + , output $ + script vh + . maybe id withDatum mdt + . withValue value + ] + +authorityTokenScriptPurepose :: ScriptPurpose +authorityTokenScriptPurepose = Minting authorityTokenSymbol + +authorityTokenRedeemer :: () +authorityTokenRedeemer = () + +-------------------------------------------------------------------------------- -- | Create a 'TxInfo' that update the status of a proposal. advance :: - Parameters -> + ParameterBundle -> TxInfo -advance ps = - let pst = Value.singleton proposalPolicySymbol "" 1 - sst = Value.assetClassValue stakeAssetClass 1 - gst = Value.assetClassValue govAssetClass 1 - - --- - - proposalInputDatum :: ProposalDatum - proposalInputDatum = - mkProposalInputDatum ps - - proposalOutputDatum :: ProposalDatum - proposalOutputDatum = - proposalInputDatum - { status = ps.toStatus - } +advance pb = + let mkBuilderMaybe = maybe mempty + in buildTxInfoUnsafe $ + mconcat + [ mkProposalBuilder pb.proposalParameters + , mkStakeBuilder pb.stakeParameters + , mkBuilderMaybe mkGovernorBuilder pb.governorParameters + , mkBuilderMaybe mkAuthorityTokenBuilder pb.authorityTokenParameters + , timeRange pb.transactionTimeRange + , maybe mempty signedWith pb.extraSignature + ] - --- +-------------------------------------------------------------------------------- - stakeInputDatums :: [StakeDatum] - stakeInputDatums = mkStakeInputDatums ps +{- | Create a test tree that runs the stake validator and proposal validator to + test the advancing functionalities. +-} +mkTestTree :: + String -> + ParameterBundle -> + Validity -> + SpecificationTree +mkTestTree name params val = + group name $ catMaybes [proposal, stake, governor, authority] + where + txInfo = advance params - mkStakeOutputDatum :: StakeDatum -> StakeDatum - mkStakeOutputDatum si = - if ps.alterOutputStakes - then - si - { stakedAmount = ps.perStakeGTs + 1 - } - else si - - stakeValue = - let gts = - if ps.perStakeGTs == 0 - then mempty - else - Value.assetClassValue - (untag stake.gtClassRef) - (untag ps.perStakeGTs) - in sortValue $ - sst <> minAda - <> gts - - stakeBuilder :: BaseBuilder - stakeBuilder = - foldMap - ( \(si, idx) -> - let so = mkStakeOutputDatum si - in mconcat @BaseBuilder - [ input $ - script stakeValidatorHash - . withValue stakeValue - . withDatum si - . withOutRef (mkStakeRef idx) - , output $ - script stakeValidatorHash - . withValue stakeValue - . withDatum so - ] - ) - $ let withIds = zip stakeInputDatums [0 ..] - in if ps.includeAllStakes - then withIds - else [head withIds] - --- - - governorOutputDatum :: GovernorDatum - governorOutputDatum = - if ps.modifyGovernor - then - governorInputDatum - { nextProposalId = ProposalId 41 - } - else governorInputDatum - - governorBuilder :: BaseBuilder - governorBuilder = - if ps.moveGovernorST - then - mconcat - [ input $ - script govValidatorHash - . withValue (sortValue $ gst <> minAda) - . withDatum governorInputDatum - . withOutRef governorRef - , output $ - script govValidatorHash - . withValue (sortValue $ gst <> minAda) - . withDatum governorOutputDatum - ] - else mempty + proposal = + let proposalInputDatum = mkProposalInputDatum params.proposalParameters + in Just $ + testValidator + val.forProposalValidator + "proposal" + (proposalValidator Shared.proposal) + proposalInputDatum + proposalRedeemer + ( ScriptContext + txInfo + proposalScriptPurpose + ) - --- + stake = + let idx = 0 + in Just $ + testValidator + val.forStakeValidator + "stake" + (stakeValidator Shared.stake) + (getStakeInputDatumAt params.stakeParameters idx) + stakeRedeemer + ( ScriptContext + txInfo + (getStakeScriptPurposeAt idx) + ) - sigBuilder :: BaseBuilder - sigBuilder = - let sos = mkStakeOwners ps - in if ps.signByAllCosigners - then foldMap signedWith sos - else signedWith $ head sos + governor = + testValidator + (fromJust val.forGovernorValidator) + "governor" + (governorValidator Shared.governor) + governorInputDatum + governorRedeemer + ( ScriptContext + txInfo + governorScriptPurpose + ) + <$ params.governorParameters + + authority = + testPolicy + (fromJust val.forAuthorityTokenPolicy) + "authority" + (authorityTokenPolicy $ AuthorityToken Shared.govAssetClass) + authorityTokenRedeemer + ( ScriptContext + txInfo + authorityTokenScriptPurepose + ) + <$ (params.authorityTokenParameters) - --- +mkTestTree' :: + String -> + (ParameterBundle -> String) -> + [ParameterBundle] -> + Validity -> + SpecificationTree +mkTestTree' groupName mkCaseName bundles val = + group groupName $ + (\b -> mkTestTree (mkCaseName b) b val) + <$> bundles - builder :: BaseBuilder - builder = - mconcat - [ txId "95ba4015e30aef16a3461ea97a779f814aeea6b8009d99a94add4b8293be737a" - , sigBuilder - , timeRange ps.validTimeRange - , input $ - script proposalValidatorHash - . withValue pst - . withDatum proposalInputDatum - . withTxId proposalTxRef - , output $ - script proposalValidatorHash - . withValue (pst <> minAda) - . withDatum proposalOutputDatum - ] - in buildTxInfoUnsafe $ builder <> stakeBuilder <> governorBuilder +-------------------------------------------------------------------------------- ---- +-- Utilities for creating parameter bundles {- | Given the proposal status, create a time range that is in time for advacing to the next state. @@ -464,8 +643,6 @@ mkTooLateTimeRange advanceFrom = ) Finished -> error "Cannot advance 'Finished' proposal" ---- - -- | Next state of the given proposal status. getNextState :: ProposalStatus -> ProposalStatus getNextState = \case @@ -474,170 +651,346 @@ getNextState = \case Locked -> Finished Finished -> error "Cannot advance 'Finished' proposal" ---- +compPerStakeGTsForDraft :: NumStake -> Integer +compPerStakeGTsForDraft nCosigners = + untag (def :: ProposalThresholds).vote + `div` fromIntegral nCosigners + 1 -advanceToNextStateInTimeParameters :: Int -> [Parameters] -advanceToNextStateInTimeParameters nCosigners = - map - ( \from -> - let -- Set the vote count of outcome 0 to @def.countingVoting + 1@, - -- meaning that outcome 0 will be the winner. - outcome0WinningVotes = - ProposalVotes $ - updateMap - (\_ -> Just $ untag (def :: ProposalThresholds).execute + 1) - (ResultTag 0) - (coerce emptyVotes) - - votes = case from of - Draft -> emptyVotes - -- With sufficient votes - _ -> outcome0WinningVotes - - includeAllStakes = case from of - Draft -> True - _ -> False - - signByAllCosigners = case from of - Draft -> True - _ -> False - - shouldIncludeGovernor = from == Locked - in Parameters - { fromStatus = from - , toStatus = getNextState from - , votes = votes - , includeAllStakes = includeAllStakes - , validTimeRange = mkInTimeTimeRange from - , alterOutputStakes = False - , stakeCount = fromIntegral nCosigners - , signByAllCosigners = signByAllCosigners - , perStakeGTs = - (def :: ProposalThresholds).vote - `div` fromIntegral nCosigners + 1 - , moveGovernorST = shouldIncludeGovernor - , modifyGovernor = False - } - ) - [Draft, VotingReady, Locked] - -advanceToFailedStateDueToTimeoutParameters :: Int -> [Parameters] -advanceToFailedStateDueToTimeoutParameters nCosigners = - map - ( \from -> - Parameters - { fromStatus = from - , toStatus = Finished - , votes = emptyVotes - , includeAllStakes = False - , validTimeRange = mkTooLateTimeRange from - , alterOutputStakes = False - , stakeCount = fromIntegral nCosigners - , signByAllCosigners = False - , perStakeGTs = 1 - , moveGovernorST = False - , modifyGovernor = False - } +dummyDatum :: () +dummyDatum = () + +dummyDatumHash :: DatumHash +dummyDatumHash = datumHash $ toDatum dummyDatum + +mkMockEffects :: Int -> [AssocMap.Map ValidatorHash DatumHash] +mkMockEffects = + flip + take + ( AssocMap.fromList + . flip zip (repeat dummyDatumHash) + <$> groupsOfN 3 validatorHashes ) - [Draft, VotingReady, Locked] - -insufficientVotesParameters :: Parameters -insufficientVotesParameters = - let votes = emptyVotes - from = VotingReady - to = getNextState from - in Parameters - { fromStatus = from - , toStatus = to - , votes = votes - , includeAllStakes = False - , validTimeRange = mkInTimeTimeRange from - , alterOutputStakes = False - , stakeCount = 1 - , signByAllCosigners = True - , perStakeGTs = 20 - , moveGovernorST = False - , modifyGovernor = False - } -insufficientCosignsParameters :: Int -> Parameters -insufficientCosignsParameters nCosigners = - (\ps -> ps {perStakeGTs = 0}) $ - head $ - advanceToNextStateInTimeParameters nCosigners - -advanceFromFinishedParameters :: Parameters -advanceFromFinishedParameters = - Parameters - { fromStatus = Finished - , toStatus = Finished - , votes = emptyVotes - , includeAllStakes = False - , validTimeRange = always - , alterOutputStakes = False - , stakeCount = 1 - , signByAllCosigners = True - , perStakeGTs = 20 - , moveGovernorST = False - , modifyGovernor = False - } +mkWinnerVotes :: Index -> (Winner, Integer) +mkWinnerVotes idx = (EffectAt idx, untag (def @ProposalThresholds).execute + 1) + +ambiguousWinnerVotes :: (Winner, Integer) +ambiguousWinnerVotes = (All, untag (def @ProposalThresholds).execute + 1) -invalidOutputStakeParameters :: Int -> [Parameters] -invalidOutputStakeParameters nCosigners = - (\ps -> ps {alterOutputStakes = True}) - <$> advanceToNextStateInTimeParameters nCosigners +-------------------------------------------------------------------------------- + +-- * Parameter Bundles --- -{- | Create a test tree that runs the stake validator and proposal validator to - test the advancing functionalities. --} -mkTestTree :: String -> Parameters -> Bool -> Maybe Bool -> SpecificationTree -mkTestTree name ps isValidForProposalValidator isValidForGovernorValidator = group name final - where - txInfo = advance ps +-- * Legal + +defaultWinnerIdx :: Index +defaultWinnerIdx = 0 + +mkValidToNextStateBundle :: Word -> Word -> ProposalStatus -> ParameterBundle +mkValidToNextStateBundle nCosigners nEffects from = + let next = getNextState from + effects = mkMockEffects $ fromIntegral nEffects + winner = defaultWinnerIdx + + template = + ParameterBundle + { proposalParameters = + ProposalParameters + { fromStatus = from + , toStatus = next + , effectList = effects + , winnerAndVotes = Nothing + , numCosigners = fromIntegral nCosigners + , invalidProposalOutputDatum = False + } + , stakeParameters = + StakeParameters + { numStake = 1 + , perStakeGTs = + compPerStakeGTsForDraft $ + fromIntegral nCosigners + , transactionSignedByOwners = False + , invalidStakeOutputDatum = False + } + , governorParameters = Nothing + , authorityTokenParameters = Nothing + , transactionTimeRange = mkInTimeTimeRange from + , extraSignature = Just signer + } - proposal = - let proposalInputDatum = mkProposalInputDatum ps - in testValidator - isValidForProposalValidator - "propsoal" - (proposalValidator Shared.proposal) - proposalInputDatum - proposalRedeemer - ( ScriptContext - txInfo - proposalScriptPurpose - ) + modifyTemplate = do + when (from == Draft) $ + modify $ \b -> + b + { stakeParameters = + b.stakeParameters + { transactionSignedByOwners = True + , numStake = fromIntegral nCosigners + } + , extraSignature = Nothing + } - stake = - let idx = 0 - stakeInputDatum = mkStakeInputDatums ps !! idx - isValid = not $ ps.alterOutputStakes - in testValidator - isValid - "stake" - (stakeValidator Shared.stake) - stakeInputDatum - stakeRedeemer - ( ScriptContext - txInfo - (mkStakeScriptPurpose idx) - ) - - proposalAndStake = [proposal, stake] + when (from == VotingReady || from == Locked) $ + modify $ \b -> + b + { proposalParameters = + b.proposalParameters + { winnerAndVotes = Just $ mkWinnerVotes winner + } + } - governor = - if ps.moveGovernorST - then - singleton $ - testValidator - (fromJust isValidForGovernorValidator) - "governor" - (governorValidator Shared.governor) - governorInputDatum - governorRedeemer - (ScriptContext txInfo governorScriptPurpose) - else mempty - - final = proposalAndStake <> governor + when (from == Locked) $ + modify $ \b -> + let aut = + AuthorityTokenParameters + { mintGATsFor = AssocMap.keys $ effects !! winner + , carryDatum = Just dummyDatum + , invalidTokenName = False + } + gov = + GovernorParameters + { invalidGovernorOutputDatum = False + } + in b + { governorParameters = Just gov + , authorityTokenParameters = Just aut + } + in execState modifyTemplate template + +mkValidToNextStateBundles :: + -- | Number of cosigners + Word -> + -- | Number of effects + Word -> + [ParameterBundle] +mkValidToNextStateBundles nCosigners nEffects = + mkValidToNextStateBundle nCosigners nEffects + <$> [ Draft + , VotingReady + , Locked + ] + +mkValidToFailedStateBundles :: + -- | Number of cosigners + Word -> + -- | Number of effects + Word -> + [ParameterBundle] +mkValidToFailedStateBundles nCosigners nEffects = + mkBundle + <$> [ Draft + , VotingReady + , Locked + ] + where + mkBundle from = + let next = Finished + effects = mkMockEffects $ fromIntegral nEffects + in ParameterBundle + { proposalParameters = + ProposalParameters + { fromStatus = from + , toStatus = next + , effectList = effects + , winnerAndVotes = Nothing + , numCosigners = fromIntegral nCosigners + , invalidProposalOutputDatum = False + } + , stakeParameters = + StakeParameters + { numStake = 1 + , perStakeGTs = + compPerStakeGTsForDraft $ + fromIntegral nCosigners + , transactionSignedByOwners = False + , invalidStakeOutputDatum = False + } + , governorParameters = Nothing + , authorityTokenParameters = Nothing + , transactionTimeRange = mkTooLateTimeRange from + , extraSignature = Just signer + } + +-- * Illegal + +mkFromFinishedBundles :: + -- | Number of cosigners + Word -> + -- | Number of effects + Word -> + [ParameterBundle] +mkFromFinishedBundles nCosigners nEffects = + mkBundle + <$> [ Draft + , VotingReady + , Locked + ] + where + mkBundle from = + let template = mkValidToNextStateBundle nCosigners nEffects from + in template + { proposalParameters = + template.proposalParameters + { fromStatus = Finished + , toStatus = Finished + } + } + +mkToNextStateTooLateBundles :: Word -> Word -> [ParameterBundle] +mkToNextStateTooLateBundles nCosigners nEffects = + mkBundle + <$> [ Draft + , VotingReady + , Locked + ] + where + mkBundle from = + let template = mkValidToNextStateBundle nCosigners nEffects from + in template + { transactionTimeRange = mkTooLateTimeRange from + } + +mkInvalidOutputStakeBundles :: Word -> Word -> [ParameterBundle] +mkInvalidOutputStakeBundles nCosigners nEffects = + mkBundle <$> [Draft, VotingReady, Locked] + where + mkBundle from = + let template = mkValidToNextStateBundle nCosigners nEffects from + in template + { stakeParameters = + template.stakeParameters + { invalidStakeOutputDatum = True + } + } + +-- * From Draft + +mkInsufficientCosignsBundle :: Word -> Word -> ParameterBundle +mkInsufficientCosignsBundle nCosigners nEffects = + template + { stakeParameters = + template.stakeParameters + { perStakeGTs = insuffcientPerStakeGTs + } + } + where + insuffcientPerStakeGTs = + untag (def :: ProposalThresholds).vote + `div` fromIntegral nCosigners - 1 + template = mkValidToNextStateBundle nCosigners nEffects Draft + +-- * From VotingReady + +setWinnerAndVotes :: + ParameterBundle -> + Maybe (Winner, Integer) -> + ParameterBundle +setWinnerAndVotes pb wv = + pb + { proposalParameters = + pb.proposalParameters + { winnerAndVotes = wv + } + } + +mkInsufficientVotesBundle :: + Word -> + Word -> + ParameterBundle +mkInsufficientVotesBundle nCosigners nEffects = + mkValidToNextStateBundle nCosigners nEffects VotingReady + `setWinnerAndVotes` Nothing + +mkAmbiguousWinnerBundle :: + Word -> + Word -> + ParameterBundle +mkAmbiguousWinnerBundle nCosigners nEffects = + mkValidToNextStateBundle nCosigners nEffects VotingReady + `setWinnerAndVotes` Just ambiguousWinnerVotes + +-- * From Locked + +mkValidFromLockedBundle :: Word -> Word -> ParameterBundle +mkValidFromLockedBundle nCosigners nEffects = mkValidToNextStateBundle nCosigners nEffects Locked + +mkMintGATsForWrongEffectsBundle :: + Word -> + Word -> + ParameterBundle +mkMintGATsForWrongEffectsBundle nCosigners nEffects = + template + { authorityTokenParameters = + ( \aut -> + aut + { mintGATsFor = + [ validatorHashes !! 1 + , validatorHashes !! 3 + , validatorHashes !! 5 + , validatorHashes !! 7 + ] + } + ) + <$> template.authorityTokenParameters + } + where + template = mkValidFromLockedBundle nCosigners nEffects + +mkNoGATMintedBundle :: + Word -> + Word -> + ParameterBundle +mkNoGATMintedBundle nCosigners nEffects = + template + { authorityTokenParameters = Nothing + } + where + template = mkValidFromLockedBundle nCosigners nEffects + +mkMintGATsWithoutTagBundle :: + Word -> + Word -> + ParameterBundle +mkMintGATsWithoutTagBundle nCosigners nEffects = + template + { authorityTokenParameters = + ( \aut -> + aut + { invalidTokenName = True + } + ) + <$> template.authorityTokenParameters + } + where + template = mkValidFromLockedBundle nCosigners nEffects + +mkGATsWithWrongDatumBundle :: + Word -> + Word -> + ParameterBundle +mkGATsWithWrongDatumBundle nCosigners nEffects = + template + { authorityTokenParameters = Just newAut + } + where + template = mkValidFromLockedBundle nCosigners nEffects + aut = fromJust template.authorityTokenParameters + newAut = + AuthorityTokenParameters + aut.mintGATsFor + (Just (1 :: Integer)) + False + +mkBadGovernorOutputDatumBundle :: + Word -> + Word -> + ParameterBundle +mkBadGovernorOutputDatumBundle nCosigners nEffects = + template + { governorParameters = Just gov + } + where + template = mkValidFromLockedBundle nCosigners nEffects + gov = GovernorParameters True diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index f9a3865d..a344af34 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -327,7 +327,7 @@ mkTestTree name ps isValid = group name [proposal, stake] let proposalInputDatum = mkProposalInputDatum ps in testValidator isValid - "propsoal" + "proposal" (proposalValidator Shared.proposal) proposalInputDatum (mkProposalRedeemer ps) diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index 35562565..83749203 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -242,7 +242,7 @@ mkTimeRange ps = in closedBoundedInterval s $ o + di else always --- | Get the starting time of the propsoal. +-- | Get the starting time of the proposal. mkProposalStartingTime :: Parameters -> ProposalStartingTime mkProposalStartingTime ps = if ps.timeRangeClosed @@ -413,7 +413,7 @@ invalidProposalStatusParameters = -------------------------------------------------------------------------------- -{- | Create a test tree that runs the propsoal minting policy, the governor +{- | Create a test tree that runs the proposal minting policy, the governor validator and the stake validator to test the functionalities of creting proposals -} diff --git a/agora-specs/Sample/Proposal/Shared.hs b/agora-specs/Sample/Proposal/Shared.hs index d2def9f7..c73f1c9c 100644 --- a/agora-specs/Sample/Proposal/Shared.hs +++ b/agora-specs/Sample/Proposal/Shared.hs @@ -1,15 +1,15 @@ {- | Module : Sample.Proposal.Shared Maintainer : connor@mlabs.city -Description: Shared constants for propsoal samples +Description: Shared constants for proposal samples -Shared constants for propsoal samples. +Shared constants for proposal samples. -} module Sample.Proposal.Shared (proposalTxRef, stakeTxRef, governorTxRef) where import PlutusLedgerApi.V1 (TxId) --- | 'TxId' of all the propsoal inputs in the samples. +-- | 'TxId' of all the proposal inputs in the samples. proposalTxRef :: TxId proposalTxRef = "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index 20b1be52..3165a5e4 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -540,7 +540,7 @@ mkTestTree name ps isValid = group name [stake, proposal] ref = mkProposalRef idx in testValidator isValid - "propsoal" + "proposal" (proposalValidator Shared.proposal) (mkProposalInputDatum ps pid) proposalRedeemer diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index 36ed93db..f841dd28 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -253,7 +253,7 @@ mkTestTree name ps isValid = group name [proposal, stake] proposal = testValidator isValid - "propsoal" + "proposal" (proposalValidator Shared.proposal) proposalInputDatum (mkProposalRedeemer ps) diff --git a/agora-specs/Sample/Shared.hs b/agora-specs/Sample/Shared.hs index 4cc917e2..8e6c476e 100644 --- a/agora-specs/Sample/Shared.hs +++ b/agora-specs/Sample/Shared.hs @@ -186,7 +186,7 @@ instance Default ProposalThresholds where ProposalThresholds { execute = Tagged 1000 , create = Tagged 1 - , vote = Tagged 10 + , vote = Tagged 100 } authorityToken :: AuthorityToken diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index d7a712ab..6dd51b0c 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -93,7 +93,7 @@ specs = mkLegalGroup nCosigners = Cosign.mkTestTree - ("with " <> show nCosigners <> " cosigners") + (unwords ["with", show nCosigners, "cosigners"]) (Cosign.validCosignNParameters nCosigners) True legalGroup = @@ -101,7 +101,7 @@ specs = map mkLegalGroup cosignerCases mkIllegalStatusNotDraftGroup nCosigners = - group ("with " <> show nCosigners <> " cosigners") $ + group (unwords ["with", show nCosigners, "cosigners"]) $ map ( \ps -> Cosign.mkTestTree @@ -133,99 +133,164 @@ specs = [ Vote.mkTestTree "legal" Vote.validVoteParameters True -- TODO: add negative test cases ] - , group "advancing" $ - let mkFromDraft nCosigners = - let name = "with " <> show nCosigners <> " cosigner(s)" - - legalGroup = - group - "legal" - [ Advance.mkTestTree - "to next state" - ( head $ - Advance.advanceToNextStateInTimeParameters - nCosigners - ) - True - Nothing - , Advance.mkTestTree - "to failed state" - ( head $ - Advance.advanceToFailedStateDueToTimeoutParameters - nCosigners - ) - True - Nothing - ] - - illegalGroup = - group - "illegal" - [ Advance.mkTestTree - "insufficient cosigns" - (Advance.insufficientCosignsParameters nCosigners) - False - Nothing - , Advance.mkTestTree - "invalid stake output" - (head $ Advance.invalidOutputStakeParameters nCosigners) - False - Nothing - ] - in group name [legalGroup, illegalGroup] - - draftGroup = group "from draft" $ map mkFromDraft [1, 5, 10] - - legalGroup = - group - "legal" - [ group "advance to next state" $ - map - ( \ps -> - let name = "from: " <> show ps.fromStatus - in Advance.mkTestTree name ps True (Just True) - ) - (tail $ Advance.advanceToNextStateInTimeParameters 1) - , group "advance to failed state" $ - map - ( \ps -> - let name = "from: " <> show ps.fromStatus - in Advance.mkTestTree name ps True (Just True) - ) - (tail $ Advance.advanceToFailedStateDueToTimeoutParameters 1) - ] - - illegalGroup = - group - "illegal" - [ Advance.mkTestTree - "insufficient votes" - Advance.insufficientVotesParameters - False - Nothing - , Advance.mkTestTree - "initial state is Finished" - Advance.advanceFromFinishedParameters - False - Nothing - , group - "invalid stake output" - $ do - nStake <- [1, 5] - ps <- tail $ Advance.invalidOutputStakeParameters nStake + , group + "advancing" + $ let possibleCosigners = [1, 5, 10] + possibleEffects = [1, 2, 5] + in do + cs <- possibleCosigners + es <- possibleEffects - let name = - "from " <> show ps.fromStatus <> "with " - <> show nStake - <> " stakes" + let groupName = + unwords + [ "with" + , show cs + , "cosigners" + , "and" + , show es + , "effects" + ] - pure $ Advance.mkTestTree name ps False (Just True) - ] - in [draftGroup, legalGroup, illegalGroup] + pure $ + group + groupName + [ group + "legal" + $ let allValid = + Advance.Validity + { forProposalValidator = True + , forStakeValidator = True + , forGovernorValidator = Just True + , forAuthorityTokenPolicy = Just True + } + mkName b = + unwords + [ "from" + , show b.proposalParameters.fromStatus + , "to" + , show b.proposalParameters.toStatus + ] + in [ Advance.mkTestTree' + "to next state" + mkName + (Advance.mkValidToNextStateBundles cs es) + allValid + , Advance.mkTestTree' + "to failed state" + mkName + (Advance.mkValidToFailedStateBundles cs es) + allValid + ] + , group + "illegal" + [ Advance.mkTestTree' + "advance finished proposals" + (const "(negative test)") + (Advance.mkFromFinishedBundles cs es) + Advance.Validity + { forProposalValidator = False + , forStakeValidator = True + , forGovernorValidator = Just False + , forAuthorityTokenPolicy = Just True + } + , Advance.mkTestTree + "insufficient cosigns" + (Advance.mkInsufficientCosignsBundle cs es) + Advance.Validity + { forProposalValidator = False + , forStakeValidator = True + , forGovernorValidator = Nothing + , forAuthorityTokenPolicy = Nothing + } + , Advance.mkTestTree + "insufficient votes" + (Advance.mkInsufficientVotesBundle cs es) + Advance.Validity + { forProposalValidator = False + , forStakeValidator = True + , forGovernorValidator = Nothing + , forAuthorityTokenPolicy = Nothing + } + , Advance.mkTestTree + "ambiguous winning effect" + (Advance.mkAmbiguousWinnerBundle cs es) + Advance.Validity + { forProposalValidator = False + , forStakeValidator = True + , forGovernorValidator = Nothing + , forAuthorityTokenPolicy = Nothing + } + , Advance.mkTestTree' + "to next state too late" + (\b -> unwords ["from", show b.proposalParameters.fromStatus]) + (Advance.mkToNextStateTooLateBundles cs es) + Advance.Validity + { forProposalValidator = False + , forStakeValidator = True + , forGovernorValidator = Just True + , forAuthorityTokenPolicy = Just True + } + , Advance.mkTestTree' + "altered output stake datum" + (\b -> unwords ["from", show b.proposalParameters.fromStatus]) + (Advance.mkInvalidOutputStakeBundles cs es) + Advance.Validity + { forProposalValidator = False + , forStakeValidator = False + , forGovernorValidator = Just True + , forAuthorityTokenPolicy = Just True + } + , Advance.mkTestTree + "forget to mint GATs" + (Advance.mkNoGATMintedBundle cs es) + Advance.Validity + { forProposalValidator = True + , forStakeValidator = True + , forGovernorValidator = Just False + , forAuthorityTokenPolicy = Nothing + } + , Advance.mkTestTree + "mint GATs for wrong validators" + (Advance.mkMintGATsForWrongEffectsBundle cs es) + Advance.Validity + { forProposalValidator = True + , forStakeValidator = True + , forGovernorValidator = Just False + , forAuthorityTokenPolicy = Just True + } + , Advance.mkTestTree + "mint GATs with bad token name" + (Advance.mkMintGATsWithoutTagBundle cs es) + Advance.Validity + { forProposalValidator = True + , forStakeValidator = True + , forGovernorValidator = Just False + , forAuthorityTokenPolicy = Just False + } + , Advance.mkTestTree + "wrong GAT datum" + (Advance.mkGATsWithWrongDatumBundle cs es) + Advance.Validity + { forProposalValidator = True + , forStakeValidator = True + , forGovernorValidator = Just False + , forAuthorityTokenPolicy = Just True + } + , Advance.mkTestTree + "invalid governor output datum" + (Advance.mkBadGovernorOutputDatumBundle cs es) + Advance.Validity + { forProposalValidator = True + , forStakeValidator = True + , forGovernorValidator = Just False + , forAuthorityTokenPolicy = Just True + } + ] + ] , group "unlocking" $ let proposalCountCases = [1, 5, 10, 42] - mkSubgroupName nProposals = "with " <> show nProposals <> " proposals" + mkSubgroupName nProposals = unwords ["with", show nProposals, "proposals"] mkLegalGroup nProposals = group @@ -266,9 +331,13 @@ specs = map ( \ps -> let name = - "role: " <> show ps.stakeRole - <> ", status: " - <> show ps.proposalStatus + unwords + [ "role:" + , show ps.stakeRole + , "," + , "status:" + , show ps.proposalStatus + ] in UnlockStake.mkTestTree name ps False ) (UnlockStake.mkRetractVotesWhileNotVoting nProposals) @@ -276,9 +345,12 @@ specs = map ( \ps -> let name = - "status: " <> show ps.proposalStatus - <> "retract votes: " - <> show ps.retractVotes + unwords + [ "status:" + , show ps.proposalStatus + , "retract votes:" + , show ps.retractVotes + ] in UnlockStake.mkTestTree name ps False ) (UnlockStake.mkUnockIrrelevantStakeParameters nProposals) @@ -286,7 +358,8 @@ specs = map ( \ps -> let name = - "status: " <> show ps.proposalStatus + unwords + ["status:", show ps.proposalStatus] in UnlockStake.mkTestTree name ps False ) (UnlockStake.mkRemoveCreatorLockBeforeFinishedParameters nProposals) @@ -298,9 +371,13 @@ specs = map ( \ps -> let name = - "role: " <> show ps.stakeRole - <> ", status: " - <> show ps.proposalStatus + unwords + [ "role:" + , show ps.stakeRole + , "," + , "status:" + , show ps.proposalStatus + ] in UnlockStake.mkTestTree name ps False ) (UnlockStake.mkAlterStakeParameters nProposals) diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index 3fffdc24..4187daef 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -17,6 +17,8 @@ module Test.Util ( pubKeyHashes, userCredentials, scriptCredentials, + validatorHashes, + groupsOfN, ) where -------------------------------------------------------------------------------- @@ -132,6 +134,25 @@ pubKeyHashes = PubKeyHash . PlutusTx.toBuiltin <$> blake2b_224Hashes userCredentials :: [Credential] userCredentials = PubKeyCredential <$> pubKeyHashes +-- | An infinite list of *valid* validator hashes. +validatorHashes :: [ValidatorHash] +validatorHashes = ValidatorHash . PlutusTx.toBuiltin <$> blake2b_224Hashes + -- | An infinite list of *valid* script credentials. scriptCredentials :: [Credential] -scriptCredentials = ScriptCredential . ValidatorHash . PlutusTx.toBuiltin <$> blake2b_224Hashes +scriptCredentials = ScriptCredential <$> validatorHashes + +-------------------------------------------------------------------------------- + +groupsOfN :: Int -> [a] -> [[a]] +groupsOfN _ [] = [] +groupsOfN n xs = + let (nextGroup, rest) = next n xs + in nextGroup : groupsOfN n rest + where + next :: Int -> [a] -> ([a], [a]) + next _ [] = ([], []) + next 0 xs = ([], xs) + next n (x : xs) = + let (xs', rest) = next (n - 1) xs + in (x : xs', rest) diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index eaa4a77f..c2264741 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -575,18 +575,19 @@ governorValidator gov = gatOutputValidator = gatOutputValidator' # effectGroup - pure $ - popaque $ - pfoldr - # plam - ( \txOut r -> - let value = pfield @"value" # txOut - atValue = psymbolValueOf # patSymbol # value - in pif (atValue #== 0) r $ - pif (atValue #== 1) (r #&& gatOutputValidator # txOut) $ pconstant False - ) - # pconstant True - # pfromData txInfoF.outputs + pguardC "GATs valid" $ + pfoldr + # plam + ( \txOut r -> + let value = pfield @"value" # txOut + atValue = psymbolValueOf # patSymbol # value + in pif (atValue #== 0) r $ + pif (atValue #== 1) (r #&& gatOutputValidator # txOut) $ pconstant False + ) + # pconstant True + # pfromData txInfoF.outputs + + pure $ popaque $ pconstant () -------------------------------------------------------------------------- diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 89aaf91b..0dff631d 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -119,7 +119,7 @@ data ProposalLock -- ^ The identifier of the proposal. | -- | The stake was used to vote on a proposal. -- - -- This kind of lock is placed while voting on a propsoal, in order to + -- This kind of lock is placed while voting on a proposal, in order to -- prevent depositing and withdrawing when votes are in place. -- -- @since 0.2.0 @@ -416,13 +416,13 @@ data PStakeRole (s :: S) PVoter (Term s PResultTag) -- ^ The option which was voted for. - | -- | The stake was used to create the propsoal. + | -- | The stake was used to create the proposal. PCreator | -- | The stake was used to both create and vote on the proposal. PBoth (Term s PResultTag) -- ^ The option which was voted for. - | -- | The stake has nothing to do with the given propsoal. + | -- | The stake has nothing to do with the given proposal. PIrrelevant deriving stock ( -- | @since 0.2.0 diff --git a/bench.csv b/bench.csv index f1ffc227..da6f3224 100644 --- a/bench.csv +++ b/bench.csv @@ -2,236 +2,577 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,92825132,256078,8229 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3747 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,92825132,256078,8257 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 -Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8709 -Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1971 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8678 -Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2010 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5412 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2022 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160422991,421241,5434 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,1998 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153960499,403133,5400 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153960499,403133,5404 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2002 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5404 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/propsoal,235543219,658307,8360 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,118915099,307672,5213 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/propsoal,670567262,1868918,10990 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,549710287,1450080,7723 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/propsoal,1328689536,3642435,14278 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1097682628,2902865,10860 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,118915099,307672,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,118915099,307672,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,118915099,307672,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,118915099,307672,5213 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,549710287,1450080,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,549710287,1450080,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,549710287,1450080,7723 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1097682628,2902865,10860 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1097682628,2902865,10860 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1097682628,2902865,10860 -Agora/Proposal/validator/voting/legal/propsoal,253679830,711967,8342 -Agora/Proposal/validator/voting/legal/stake,136152299,356425,5239 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/propsoal,222530288,630902,8323 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to next state/stake,118915099,307672,5222 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/propsoal,217475596,620181,8325 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/legal/to failed state/stake,118915099,307672,5224 -Agora/Proposal/validator/advancing/from draft/with 1 cosigner(s)/illegal/insufficient cosigns/stake,118638207,307672,5152 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/propsoal,602734705,1723441,11178 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to next state/stake,496218319,1294304,7957 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/propsoal,239844944,682245,8686 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/legal/to failed state/stake,118915099,307672,5465 -Agora/Proposal/validator/advancing/from draft/with 5 cosigner(s)/illegal/insufficient cosigns/stake,447610813,1171578,7606 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/propsoal,1183926938,3402848,14747 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to next state/stake,1125911200,2984885,11375 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/propsoal,267806629,759825,9139 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/legal/to failed state/stake,118915099,307672,5767 -Agora/Proposal/validator/advancing/from draft/with 10 cosigner(s)/illegal/insufficient cosigns/stake,1013739927,2699971,10673 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/propsoal,272116829,760091,8332 -Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake,118915099,307672,5229 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal,295366820,822071,8771 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake,156324691,401372,5668 -Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/governor,258666820,668654,8974 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal,258602387,722952,8326 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake,118915099,307672,5225 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal,259733365,725356,8326 -Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,118915099,307672,5225 -Agora/Proposal/validator/advancing/illegal/insufficient votes/stake,118915099,307672,5225 -Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,118915099,307672,5217 -Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 1 stakes/governor,258666820,668654,8974 -Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 5 stakes/governor,265854768,689342,9215 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,125083340,324576,5219 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal,236574652,665124,8323 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,128314586,333630,5235 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/propsoal,250046859,705066,8334 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,125083340,324576,5217 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/propsoal,204366787,584979,8320 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,125083340,324576,5233 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/propsoal,212801044,609883,8332 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,125083340,324576,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/propsoal,205682939,588863,8327 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,125083340,324576,5223 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/propsoal,205682939,588863,8327 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,128314586,333630,5239 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/propsoal,219686722,630197,8338 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,259870480,666572,7303 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/propsoal,379215900,1077788,10383 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,276026710,711842,7380 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/propsoal,444744435,1269042,10435 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,259870480,666572,7293 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/propsoal,312447599,902835,10376 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,259870480,666572,7374 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/propsoal,350836580,1014587,10429 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,259870480,666572,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/propsoal,317916859,917911,10404 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,259870480,666572,7324 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/propsoal,317916859,917911,10404 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,276026710,711842,7400 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/propsoal,383976970,1110557,10455 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,428354405,1094067,9909 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/propsoal,557517460,1593618,12959 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,460666865,1184607,10060 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/propsoal,688116405,1974012,13060 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,428354405,1094067,9888 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/propsoal,447548614,1300155,12946 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,428354405,1094067,10049 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/propsoal,523381000,1520467,13049 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,428354405,1094067,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/propsoal,458209259,1329221,12999 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,428354405,1094067,9949 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/propsoal,458209259,1329221,12999 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,460666865,1184607,10100 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/propsoal,589339780,1711007,13100 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1506651525,3830035,26674 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/propsoal,1698647444,4894930,29513 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1642363857,4210303,27362 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/propsoal,2245697013,6485820,29972 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1506651525,3830035,26590 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/propsoal,1312195110,3843003,29469 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1506651525,3830035,27301 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/propsoal,1627665288,4758099,29911 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1506651525,3830035,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/propsoal,1356080619,3961605,29682 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1506651525,3830035,26843 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/propsoal,1356080619,3961605,29682 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1642363857,4210303,27531 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/propsoal,1903661764,5553887,30141 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Draft/stake",125083340,324576,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Locked/stake",125083340,324576,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter, status: Finished/stake",125083340,324576,5219 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Draft/stake",120712754,312726,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Locked/stake",120712754,312726,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator, status: Finished/stake",120712754,312726,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Draft/stake",128314586,333630,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Locked/stake",128314586,333630,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both, status: Finished/stake",128314586,333630,5235 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",117481508,303672,5201 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",117481508,303672,5201 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,117481508,303672,5201 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,125083340,324576,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,125083340,324576,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,125083340,324576,5217 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,125083340,324576,5215 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Draft/stake",259870480,666572,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Locked/stake",259870480,666572,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter, status: Finished/stake",259870480,666572,7303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Draft/stake",253221214,649130,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Locked/stake",253221214,649130,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator, status: Finished/stake",253221214,649130,7309 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Draft/stake",276026710,711842,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Locked/stake",276026710,711842,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both, status: Finished/stake",276026710,711842,7380 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",237064984,603860,7221 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",237064984,603860,7221 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,237064984,603860,7221 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,259870480,666572,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,259870480,666572,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,259870480,666572,7293 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,259870480,666572,7283 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Draft/stake",428354405,1094067,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Locked/stake",428354405,1094067,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter, status: Finished/stake",428354405,1094067,9909 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Draft/stake",418856789,1069635,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Locked/stake",418856789,1069635,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator, status: Finished/stake",418856789,1069635,9920 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Draft/stake",460666865,1184607,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Locked/stake",460666865,1184607,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both, status: Finished/stake",460666865,1184607,10060 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",386544329,979095,9746 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",386544329,979095,9746 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,386544329,979095,9746 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,428354405,1094067,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,428354405,1094067,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,428354405,1094067,9888 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,428354405,1094067,9868 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Draft/stake",1506651525,3830035,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Locked/stake",1506651525,3830035,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter, status: Finished/stake",1506651525,3830035,26674 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Draft/stake",1478924469,3760867,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Locked/stake",1478924469,3760867,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator, status: Finished/stake",1478924469,3760867,26736 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Draft/stake",1642363857,4210303,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Locked/stake",1642363857,4210303,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both, status: Finished/stake",1642363857,4210303,27362 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Draft/stake",1343212137,3380599,25961 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Locked/stake",1343212137,3380599,25961 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant, status: Finished/stake",1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: True/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draftretract votes: False/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: True/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReadyretract votes: False/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: True/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Lockedretract votes: False/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: True/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finishedretract votes: False/stake,1343212137,3380599,25961 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1506651525,3830035,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1506651525,3830035,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1506651525,3830035,26590 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1506651525,3830035,26506 +Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8736 +Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5407 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5407 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1974 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8705 +Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2013 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5415 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2025 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160422991,421241,5437 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153960499,403133,5407 +Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2001 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153960499,403133,5403 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153960499,403133,5407 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153960499,403133,5407 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2005 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5407 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,235543219,658307,8363 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,118915099,307672,5215 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,670567262,1868918,10993 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,549710287,1450080,7725 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1328689536,3642435,14281 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1097682628,2902865,10862 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,118915099,307672,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,118915099,307672,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,118915099,307672,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,118915099,307672,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,549710287,1450080,7725 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,549710287,1450080,7725 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,549710287,1450080,7725 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1097682628,2902865,10862 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1097682628,2902865,10862 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1097682628,2902865,10862 +Agora/Proposal/validator/voting/legal/proposal,253679830,711967,8345 +Agora/Proposal/validator/voting/legal/stake,136152299,356425,5241 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,248836586,692474,8858 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,129324200,334140,5551 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,292528703,801889,8867 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5558 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340029740,936478,10019 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,458676371,1153000,10052 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3653 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,243781894,681753,8860 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5553 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279014261,764750,8861 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,5554 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280145239,767154,8861 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,5554 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,129324200,334140,5551 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,5558 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3653 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,129324200,334140,5551 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,130046736,336404,5554 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,130046736,336404,5562 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,129324200,334140,5553 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5558 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,458676371,1153000,10052 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3653 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,458676371,1153000,10053 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3654 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,315778694,863869,9307 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,5998 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348113422,960681,10246 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,6937 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3880 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340029740,936478,9841 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,180556487,455715,6532 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340029740,936478,10013 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,180556487,455715,6704 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3647 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340029740,936478,10019 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,180556487,455715,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3653 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294237934,810566,9447 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,129324200,334140,5944 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,341624937,929969,9456 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5951 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,385431088,1054570,10609 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,478594542,1207445,10446 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4047 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289183242,799845,9449 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5946 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,324415609,882842,9450 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,5947 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,325546587,885246,9450 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,5947 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,129324200,334140,5944 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,5951 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4047 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,129324200,334140,5944 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,130046736,336404,5947 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,130046736,336404,5959 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,129324200,334140,5946 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5951 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,478594542,1207445,10446 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4047 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,478594542,1207445,10447 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4048 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361180042,981961,9897 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6392 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,393514770,1078773,10836 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7331 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4274 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,385431088,1054570,10430 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,180556487,455715,6925 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,385431088,1054570,10603 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,180556487,455715,7098 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4041 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,385431088,1054570,10609 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,180556487,455715,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4047 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430441978,1164842,11219 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,129324200,334140,7125 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,488913639,1314209,11228 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7132 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,521635132,1408846,12380 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,538349055,1370780,11626 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5227 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425387286,1154121,11221 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7127 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,460619653,1237118,11222 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,7128 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,461750631,1239522,11222 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,7128 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,129324200,334140,7125 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,7132 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5227 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,129324200,334140,7125 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,130046736,336404,7128 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,130046736,336404,7152 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,129324200,334140,7127 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7132 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,538349055,1370780,11626 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5227 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,538349055,1370780,11627 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5228 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,497384086,1336237,11669 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,7573 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,529718814,1433049,12607 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,8511 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5454 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,521635132,1408846,12202 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,180556487,455715,8106 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,521635132,1408846,12374 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,180556487,455715,8278 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5221 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,521635132,1408846,12380 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,180556487,455715,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5227 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,612521495,1742349,11604 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,546746396,1437604,8176 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,314898051,863953,9224 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5794 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,362399088,998542,10376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,465864319,1173688,10289 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3890 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266151242,743817,9217 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5789 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,301383609,826814,9218 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,5790 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,302514587,829218,9218 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,5790 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,546746396,1437604,8176 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,5794 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3890 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,559378094,1474482,8176 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,130046736,336404,5790 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,130046736,336404,5798 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,8178 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5794 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,465864319,1173688,10289 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3890 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,465864319,1173688,10290 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3891 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338148042,925933,9664 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,6234 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,370482770,1022745,10603 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7173 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4117 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,362399088,998542,10198 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,180556487,455715,6768 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,362399088,998542,10370 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,180556487,455715,6940 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3884 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,362399088,998542,10376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,180556487,455715,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3890 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,657922843,1860441,12195 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,546746396,1437604,8570 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,363994285,992033,9814 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6187 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,407800436,1116634,10967 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,485782490,1228133,10683 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4284 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311552590,861909,9807 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6182 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,346784957,944906,9808 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,6183 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,347915935,947310,9808 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,6183 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,546746396,1437604,8570 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,6187 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4284 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,559378094,1474482,8570 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,130046736,336404,6183 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,130046736,336404,6195 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,8572 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6187 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,485782490,1228133,10683 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4284 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,485782490,1228133,10684 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4285 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,383549390,1044025,10255 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6628 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,415884118,1140837,11194 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7567 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4511 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,407800436,1116634,10788 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,180556487,455715,7161 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,407800436,1116634,10961 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,180556487,455715,7334 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4278 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,407800436,1116634,10967 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,180556487,455715,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4284 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,794126887,2214717,13965 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,546746396,1437604,9750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,511282987,1376273,11585 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544004480,1470910,12737 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,545537003,1391468,11863 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5464 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,447756634,1216185,11578 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7363 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,482989001,1299182,11579 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,7364 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484119979,1301586,11579 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,7364 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,546746396,1437604,9750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,7368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5464 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,559378094,1474482,9750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,130046736,336404,7364 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,130046736,336404,7388 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,9752 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,545537003,1391468,11863 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5464 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,545537003,1391468,11864 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5465 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,519753434,1398301,12026 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,7809 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552088162,1495113,12964 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,8747 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5691 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544004480,1470910,12559 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,180556487,455715,8342 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544004480,1470910,12731 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,180556487,455715,8514 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5458 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544004480,1470910,12737 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,180556487,455715,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1145091822,3281720,15043 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1161583697,3085109,11464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,342859736,941533,9676 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6095 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,390360773,1076122,10828 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474849254,1199548,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4191 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294112927,821397,9669 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6090 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,329345294,904394,9670 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,6091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,330476272,906798,9670 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,6091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1161583697,3085109,11464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,6095 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4191 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1108833023,2931399,11464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,130046736,336404,6091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,130046736,336404,6099 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,11466 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6095 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474849254,1199548,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4191 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474849254,1199548,10591 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4192 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366109727,1003513,10117 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,6536 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,398444455,1100325,11055 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7474 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4418 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,390360773,1076122,10650 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,180556487,455715,7069 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,390360773,1076122,10822 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,180556487,455715,7241 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4185 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,390360773,1076122,10828 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,180556487,455715,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4191 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1190493170,3399812,15632 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1161583697,3085109,11857 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,391955970,1069613,10265 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6488 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,435762121,1194214,11418 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,494767425,1253993,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4585 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339514275,939489,10258 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6483 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,374746642,1022486,10259 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,6484 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,375877620,1024890,10259 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,6484 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1161583697,3085109,11857 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,6488 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4585 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1108833023,2931399,11857 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,130046736,336404,6484 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,130046736,336404,6496 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,11859 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6488 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,494767425,1253993,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4585 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,494767425,1253993,10985 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4586 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,411511075,1121605,10706 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6929 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,443845803,1218417,11645 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7868 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4812 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,435762121,1194214,11239 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,180556487,455715,7462 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,435762121,1194214,11412 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,180556487,455715,7635 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4579 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,435762121,1194214,11418 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,180556487,455715,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4585 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1326697214,3754088,17404 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1161583697,3085109,13038 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,539244672,1453853,12037 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7669 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,571966165,1548490,13190 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,554521938,1417328,12165 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5765 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,475718319,1293765,12030 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7664 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,510950686,1376762,12031 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,7665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512081664,1379166,12031 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,7665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1161583697,3085109,13038 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,7669 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5765 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1108833023,2931399,13038 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,130046736,336404,7665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,130046736,336404,7689 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,13040 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7669 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,554521938,1417328,12165 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5765 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,554521938,1417328,12166 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5766 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,547715119,1475881,12478 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,8110 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580049847,1572693,13416 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,9048 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5992 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,571966165,1548490,13011 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,180556487,455715,8643 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,571966165,1548490,13184 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,180556487,455715,8816 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5759 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,571966165,1548490,13190 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,180556487,455715,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5765 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,125083340,324576,5221 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,236574652,665124,8326 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,128314586,333630,5237 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250046859,705066,8337 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,125083340,324576,5219 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204366787,584979,8323 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,125083340,324576,5235 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,212801044,609883,8335 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,125083340,324576,5225 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,205682939,588863,8330 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,125083340,324576,5225 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,205682939,588863,8330 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,128314586,333630,5241 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,219686722,630197,8341 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,259870480,666572,7313 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379215900,1077788,10394 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,276026710,711842,7390 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,444744435,1269042,10446 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,259870480,666572,7303 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,312447599,902835,10387 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,259870480,666572,7384 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,350836580,1014587,10440 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,259870480,666572,7334 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,317916859,917911,10415 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,259870480,666572,7334 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,317916859,917911,10415 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,276026710,711842,7410 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,383976970,1110557,10466 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,428354405,1094067,9929 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,557517460,1593618,12980 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,460666865,1184607,10080 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688116405,1974012,13081 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,428354405,1094067,9909 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,447548614,1300155,12968 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,428354405,1094067,10069 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523381000,1520467,13070 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,428354405,1094067,9969 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458209259,1329221,13020 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,428354405,1094067,9969 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458209259,1329221,13020 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,460666865,1184607,10120 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589339780,1711007,13121 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1506651525,3830035,26759 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1698647444,4894930,29599 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1642363857,4210303,27446 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2245697013,6485820,30057 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1506651525,3830035,26674 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312195110,3843003,29554 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1506651525,3830035,27385 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1627665288,4758099,29996 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1506651525,3830035,26927 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356080619,3961605,29767 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1506651525,3830035,26927 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356080619,3961605,29767 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1642363857,4210303,27615 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1903661764,5553887,30226 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",125083340,324576,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",125083340,324576,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",125083340,324576,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",120712754,312726,5223 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",120712754,312726,5223 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",120712754,312726,5223 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",128314586,333630,5237 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",128314586,333630,5237 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",128314586,333630,5237 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",117481508,303672,5203 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",117481508,303672,5203 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,117481508,303672,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,125083340,324576,5219 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,125083340,324576,5219 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,125083340,324576,5219 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,125083340,324576,5217 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",259870480,666572,7313 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",259870480,666572,7313 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",259870480,666572,7313 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",253221214,649130,7320 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",253221214,649130,7320 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",253221214,649130,7320 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",276026710,711842,7390 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",276026710,711842,7390 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",276026710,711842,7390 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",237064984,603860,7231 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",237064984,603860,7231 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,237064984,603860,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,259870480,666572,7303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,259870480,666572,7303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,259870480,666572,7303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,259870480,666572,7293 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",428354405,1094067,9929 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",428354405,1094067,9929 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",428354405,1094067,9929 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",418856789,1069635,9940 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",418856789,1069635,9940 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",418856789,1069635,9940 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",460666865,1184607,10080 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",460666865,1184607,10080 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",460666865,1184607,10080 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",386544329,979095,9766 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",386544329,979095,9766 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,386544329,979095,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,428354405,1094067,9909 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,428354405,1094067,9909 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,428354405,1094067,9909 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,428354405,1094067,9888 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1506651525,3830035,26759 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1506651525,3830035,26759 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1506651525,3830035,26759 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1478924469,3760867,26820 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1478924469,3760867,26820 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1478924469,3760867,26820 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1642363857,4210303,27446 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1642363857,4210303,27446 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1642363857,4210303,27446 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1343212137,3380599,26046 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1343212137,3380599,26046 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1343212137,3380599,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1506651525,3830035,26674 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1506651525,3830035,26674 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1506651525,3830035,26674 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1506651525,3830035,26590 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 -Agora/Governor/policy/totally legal,60002734,167736,2267 -Agora/Governor/validator/GATs minting,255584059,683393,8855 -Agora/Governor/validator/mutate governor state,93971983,261537,8329 +Agora/Governor/policy/totally legal,60002734,167736,2268 +Agora/Governor/validator/GATs minting,255848615,684194,8883 +Agora/Governor/validator/mutate governor state,93971983,261537,8356 From eb407b98c4843f03cb9098864635fce98c5ec655 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 20 Jul 2022 20:44:20 +0800 Subject: [PATCH 48/78] add tests for governor mutation --- agora-specs/Sample/Governor/Mutate.hs | 264 ++++++++++++++++++++++++++ agora-specs/Spec/Governor.hs | 48 ++--- agora-testlib/Test/Util.hs | 12 ++ agora.cabal | 1 + agora/Agora/Governor/Scripts.hs | 5 +- bench.csv | 63 +++--- 6 files changed, 329 insertions(+), 64 deletions(-) create mode 100644 agora-specs/Sample/Governor/Mutate.hs diff --git a/agora-specs/Sample/Governor/Mutate.hs b/agora-specs/Sample/Governor/Mutate.hs new file mode 100644 index 00000000..8b789b0e --- /dev/null +++ b/agora-specs/Sample/Governor/Mutate.hs @@ -0,0 +1,264 @@ +module Sample.Governor.Mutate ( + -- * Testing Utilities + GovernorOutputDatumValidity (..), + GATValidity (..), + GovernorParameters (..), + MockEffectParameters (..), + ParameterBundle (..), + + -- * Testing Utilities + Validity (..), + mutate, + mkTestCase, + + -- * Parameters Bundles + totallyValidBundle, + invalidBundles, +) where + +import Agora.Effect.NoOp (noOpValidator) +import Agora.Governor (GovernorDatum (..), GovernorRedeemer (MutateGovernor)) +import Agora.Governor.Scripts (governorValidator) +import Agora.Proposal (ProposalId (ProposalId), ProposalThresholds (..)) +import Agora.Utils (validatorHashToTokenName) +import Data.Default (def) +import Plutarch.Api.V1 (PValidator, mkValidator, validatorHash) +import Plutarch.Context ( + BaseBuilder, + buildTxInfoUnsafe, + input, + mint, + output, + pubKey, + script, + withDatum, + withOutRef, + withValue, + ) +import PlutusLedgerApi.V1 ( + Data, + ScriptContext (ScriptContext), + ScriptPurpose (Spending), + TxInfo, + TxOutRef (TxOutRef), + ValidatorHash, + Value, + toData, + ) +import PlutusLedgerApi.V1.Value qualified as Value +import Sample.Shared ( + authorityTokenSymbol, + govAssetClass, + govValidatorHash, + governor, + minAda, + ) +import Test.Specification (SpecificationTree, testValidator) +import Test.Util (pubKeyHashes, sortValue, validatorHashes, withOptional) + +-------------------------------------------------------------------------------- + +data GovernorOutputDatumValidity + = DatumValid + | ValueInvalid + | WrongType + | NoDatum + deriving stock (Bounded, Enum) + +data GATValidity + = GATValid + | WrongTag + | NoGAT + deriving stock (Bounded, Enum) + +data GovernorParameters = GovernorParameters + { governorOutputDatumValidity :: GovernorOutputDatumValidity + , stealGST :: Bool + } + +data MockEffectParameters = MockEffectParameters + { gatValidity :: GATValidity + , burnGAT :: Bool + } + +data ParameterBundle = ParameterBundle + { governorParameters :: GovernorParameters + , mockEffectParameters :: MockEffectParameters + } + +newtype Validity = Validity {forGovernorValidator :: Bool} + +-------------------------------------------------------------------------------- + +governorInputDatum :: GovernorDatum +governorInputDatum = + GovernorDatum + { proposalThresholds = def + , nextProposalId = ProposalId 0 + , proposalTimings = def + , createProposalTimeRangeMaxWidth = def + , maximumProposalsPerStake = 3 + } + +mkGovernorOutputDatum :: + GovernorOutputDatumValidity -> + Maybe Data +mkGovernorOutputDatum DatumValid = + Just $ + toData $ + governorInputDatum + { maximumProposalsPerStake = 4 + } +mkGovernorOutputDatum ValueInvalid = + let invalidProposalThresholds = + ProposalThresholds + { execute = -1 + , create = -1 + , vote = -1 + } + in Just $ + toData $ + governorInputDatum + { proposalThresholds = + invalidProposalThresholds + } +mkGovernorOutputDatum WrongType = Just $ toData () +mkGovernorOutputDatum NoDatum = Nothing + +governorRef :: TxOutRef +governorRef = + TxOutRef + "6cce6dfbb697f9e2c4fe9786bb576eb7bd6cbcf7801a4ba13d596006c2d5b957" + 1 + +governorScriptPurpose :: ScriptPurpose +governorScriptPurpose = Spending governorRef + +governorRedeemer :: GovernorRedeemer +governorRedeemer = MutateGovernor + +mkGovernorBuilder :: GovernorParameters -> BaseBuilder +mkGovernorBuilder ps = + let gst = Value.assetClassValue govAssetClass 1 + value = sortValue $ gst <> minAda + gstOutput = + if ps.stealGST + then pubKey $ head pubKeyHashes + else script govValidatorHash + withGSTDatum = + withOptional withDatum $ + mkGovernorOutputDatum ps.governorOutputDatumValidity + in mconcat + [ input $ + script govValidatorHash + . withDatum governorInputDatum + . withValue value + . withOutRef governorRef + , output $ + gstOutput + . withGSTDatum + . withValue value + ] + +-------------------------------------------------------------------------------- + +mockEffectValidator :: ClosedTerm PValidator +mockEffectValidator = noOpValidator authorityTokenSymbol + +mockEffectValidatorHash :: ValidatorHash +mockEffectValidatorHash = validatorHash $ mkValidator mockEffectValidator + +mkGATValue :: GATValidity -> Integer -> Value +mkGATValue NoGAT _ = mempty +mkGATValue v q = + let gatOwner = case v of + GATValid -> mockEffectValidatorHash + WrongTag -> head validatorHashes + in Value.singleton + authorityTokenSymbol + (validatorHashToTokenName gatOwner) + q + +mkMockEffectBuilder :: MockEffectParameters -> BaseBuilder +mkMockEffectBuilder ps = + let mkGATValue' = mkGATValue ps.gatValidity + inputValue = mkGATValue' 1 + outputValue = inputValue <> burnt + burnt = + if ps.burnGAT + then mkGATValue' (-1) + else mempty + in mconcat + [ mint burnt + , input $ + script mockEffectValidatorHash + . withValue inputValue + , output $ + script mockEffectValidatorHash + . withValue outputValue + ] + +-------------------------------------------------------------------------------- + +mutate :: ParameterBundle -> TxInfo +mutate pb = + buildTxInfoUnsafe $ + mconcat + [ mkGovernorBuilder pb.governorParameters + , mkMockEffectBuilder pb.mockEffectParameters + ] + +-------------------------------------------------------------------------------- + +mkTestCase :: String -> ParameterBundle -> Validity -> SpecificationTree +mkTestCase name pb (Validity forGov) = + testValidator + forGov + name + (governorValidator governor) + governorInputDatum + governorRedeemer + ( ScriptContext + (mutate pb) + governorScriptPurpose + ) + +-------------------------------------------------------------------------------- + +totallyValidBundle :: ParameterBundle +totallyValidBundle = + ParameterBundle + { governorParameters = + GovernorParameters + { governorOutputDatumValidity = DatumValid + , stealGST = False + } + , mockEffectParameters = + MockEffectParameters + { gatValidity = GATValid + , burnGAT = True + } + } + +-------------------------------------------------------------------------------- + +invalidBundles :: [ParameterBundle] +invalidBundles = do + gdv <- enumFrom ValueInvalid + sg <- [True, False] + gtv <- enumFrom WrongTag + bgt <- [True, False] + + pure $ + ParameterBundle + { governorParameters = + GovernorParameters + { governorOutputDatumValidity = gdv + , stealGST = sg + } + , mockEffectParameters = + MockEffectParameters + { gatValidity = gtv + , burnGAT = bgt + } + } diff --git a/agora-specs/Spec/Governor.hs b/agora-specs/Spec/Governor.hs index 532dd2ec..215cc0aa 100644 --- a/agora-specs/Spec/Governor.hs +++ b/agora-specs/Spec/Governor.hs @@ -13,17 +13,11 @@ TODO: Add negative test cases, see [#76](https://github.com/Liqwid-Labs/agora/is -} module Spec.Governor (specs) where -import Agora.Governor (GovernorDatum (..), GovernorRedeemer (..)) -import Agora.Governor.Scripts (governorValidator) -import Agora.Proposal (ProposalId (..)) -import Data.Default.Class (Default (def)) -import Sample.Governor (mintGATs, mutateState) import Sample.Governor.Initialize qualified as GST -import Sample.Shared qualified as Shared +import Sample.Governor.Mutate qualified as Mutate import Test.Specification ( SpecificationTree, group, - validatorSucceedsWith, ) -- | The SpecificationTree exported by this module. @@ -48,29 +42,21 @@ specs = ] , group "validator" - [ validatorSucceedsWith - "GATs minting" - (governorValidator Shared.governor) - ( GovernorDatum - def - (ProposalId 5) - def - def - 3 - ) - MintGATs - mintGATs - , validatorSucceedsWith - "mutate governor state" - (governorValidator Shared.governor) - ( GovernorDatum - def - (ProposalId 5) - def - def - 3 - ) - MutateGovernor - mutateState + [ group + "mutate" + [ Mutate.mkTestCase + "legal" + Mutate.totallyValidBundle + (Mutate.Validity True) + , group "illegal" $ + map + ( \b -> + Mutate.mkTestCase + "(negative test)" + b + (Mutate.Validity False) + ) + Mutate.invalidBundles + ] ] ] diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index 4187daef..e7914b78 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -19,6 +19,7 @@ module Test.Util ( scriptCredentials, validatorHashes, groupsOfN, + withOptional, ) where -------------------------------------------------------------------------------- @@ -31,6 +32,7 @@ import Data.ByteString qualified as BS import Data.ByteString.Char8 qualified as C import Data.ByteString.Lazy qualified as ByteString.Lazy import Data.List (sortOn) +import Plutarch.Context (UTXO) import Plutarch.Crypto (pblake2b_256) import PlutusLedgerApi.V1 (Credential (PubKeyCredential, ScriptCredential), PubKeyHash (..), ValidatorHash (ValidatorHash)) import PlutusLedgerApi.V1.Interval qualified as PlutusTx @@ -156,3 +158,13 @@ groupsOfN n xs = next n (x : xs) = let (xs', rest) = next (n - 1) xs in (x : xs', rest) + +-------------------------------------------------------------------------------- + +withOptional :: + (a -> UTXO -> UTXO) -> + Maybe a -> + UTXO -> + UTXO +withOptional f (Just b) = f b +withOptional _ _ = id diff --git a/agora.cabal b/agora.cabal index 6485c155..6e82deb8 100644 --- a/agora.cabal +++ b/agora.cabal @@ -189,6 +189,7 @@ library agora-specs Sample.Effect.TreasuryWithdrawal Sample.Governor Sample.Governor.Initialize + Sample.Governor.Mutate Sample.Proposal.Advance Sample.Proposal.Cosign Sample.Proposal.Create diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index c2264741..13ae7e19 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -593,7 +593,10 @@ governorValidator gov = Just MutateGovernor -> unTermCont $ do -- Check that a GAT is burnt. - pure $ popaque $ singleAuthorityTokenBurned patSymbol txInfoF.inputs txInfoF.mint + pguardC "One valid GAT burnt" $ + singleAuthorityTokenBurned patSymbol txInfoF.inputs txInfoF.mint + + pure $ popaque $ pconstant () -------------------------------------------------------------------------- Nothing -> ptraceError "Unknown redeemer" diff --git a/bench.csv b/bench.csv index da6f3224..e5c5b9b9 100644 --- a/bench.csv +++ b/bench.csv @@ -2,18 +2,18 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,92825132,256078,8257 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8290 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 Agora/Stake/policy/stakeCreation,51008580,149029,2522 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8736 +Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8769 Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5407 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2005 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5407 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1974 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8705 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8738 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2005 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2013 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5415 @@ -53,7 +53,7 @@ Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5558 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340029740,936478,10019 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,458676371,1153000,10052 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,458676371,1153000,10085 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3653 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,243781894,681753,8860 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5553 @@ -71,9 +71,9 @@ Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambigu Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,129324200,334140,5553 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5558 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,458676371,1153000,10052 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,458676371,1153000,10085 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,458676371,1153000,10053 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,458676371,1153000,10086 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3654 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,315778694,863869,9307 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,5998 @@ -94,7 +94,7 @@ Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5951 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,385431088,1054570,10609 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,478594542,1207445,10446 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,478594542,1207445,10479 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4047 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289183242,799845,9449 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5946 @@ -112,9 +112,9 @@ Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambigu Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,129324200,334140,5946 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5951 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,478594542,1207445,10446 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,478594542,1207445,10479 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,478594542,1207445,10447 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,478594542,1207445,10480 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4048 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361180042,981961,9897 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6392 @@ -135,7 +135,7 @@ Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7132 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,521635132,1408846,12380 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,538349055,1370780,11626 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,538349055,1370780,11659 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5227 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425387286,1154121,11221 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7127 @@ -153,9 +153,9 @@ Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambigu Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,129324200,334140,7127 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7132 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,538349055,1370780,11626 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,538349055,1370780,11659 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,538349055,1370780,11627 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,538349055,1370780,11660 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5228 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,497384086,1336237,11669 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,7573 @@ -176,7 +176,7 @@ Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5794 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,362399088,998542,10376 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,465864319,1173688,10289 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,465864319,1173688,10322 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3890 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266151242,743817,9217 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5789 @@ -194,9 +194,9 @@ Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambigu Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,8178 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5794 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,465864319,1173688,10289 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,465864319,1173688,10322 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,465864319,1173688,10290 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,465864319,1173688,10323 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3891 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338148042,925933,9664 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,6234 @@ -217,7 +217,7 @@ Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6187 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,407800436,1116634,10967 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,485782490,1228133,10683 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,485782490,1228133,10716 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4284 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311552590,861909,9807 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6182 @@ -235,9 +235,9 @@ Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambigu Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,8572 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6187 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,485782490,1228133,10683 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,485782490,1228133,10716 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,485782490,1228133,10684 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,485782490,1228133,10717 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4285 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,383549390,1044025,10255 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6628 @@ -258,7 +258,7 @@ Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7368 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544004480,1470910,12737 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,545537003,1391468,11863 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,545537003,1391468,11896 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5464 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,447756634,1216185,11578 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7363 @@ -276,9 +276,9 @@ Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambigu Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,9752 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7368 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,545537003,1391468,11863 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,545537003,1391468,11896 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,545537003,1391468,11864 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,545537003,1391468,11897 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5465 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,519753434,1398301,12026 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,7809 @@ -299,7 +299,7 @@ Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6095 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,390360773,1076122,10828 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474849254,1199548,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474849254,1199548,10623 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4191 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294112927,821397,9669 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6090 @@ -317,9 +317,9 @@ Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambig Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,11466 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6095 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474849254,1199548,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474849254,1199548,10623 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474849254,1199548,10591 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474849254,1199548,10624 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4192 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366109727,1003513,10117 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,6536 @@ -340,7 +340,7 @@ Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6488 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,435762121,1194214,11418 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,494767425,1253993,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,494767425,1253993,11017 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4585 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339514275,939489,10258 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6483 @@ -358,9 +358,9 @@ Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambig Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,11859 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6488 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,494767425,1253993,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,494767425,1253993,11017 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,494767425,1253993,10985 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,494767425,1253993,11018 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4586 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,411511075,1121605,10706 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6929 @@ -381,7 +381,7 @@ Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7669 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,571966165,1548490,13190 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,554521938,1417328,12165 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,554521938,1417328,12198 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5765 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,475718319,1293765,12030 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7664 @@ -399,9 +399,9 @@ Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambig Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,13040 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7669 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,554521938,1417328,12165 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,554521938,1417328,12198 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,554521938,1417328,12166 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,554521938,1417328,12199 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5766 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,547715119,1475881,12478 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,8110 @@ -574,5 +574,4 @@ Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Governor/policy/totally legal,60002734,167736,2268 -Agora/Governor/validator/GATs minting,255848615,684194,8883 -Agora/Governor/validator/mutate governor state,93971983,261537,8356 +Agora/Governor/validator/mutate/legal,100216324,268169,8154 From 38654da80a7f1d1016096e6e0ae505bf537e53b4 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 20 Jul 2022 21:52:50 +0800 Subject: [PATCH 49/78] get rid of `Sample.Governor` --- agora-specs/Sample/Governor.hs | 464 --------------------------------- agora.cabal | 1 - 2 files changed, 465 deletions(-) delete mode 100644 agora-specs/Sample/Governor.hs diff --git a/agora-specs/Sample/Governor.hs b/agora-specs/Sample/Governor.hs deleted file mode 100644 index 44d0105f..00000000 --- a/agora-specs/Sample/Governor.hs +++ /dev/null @@ -1,464 +0,0 @@ -{- | -Module : Sample.Governor -Maintainer : connor@mlabs.city -Description: Sample based testing for Governor utxos - -This module tests primarily the happy path for Governor interactions --} -module Sample.Governor ( - createProposal, - mutateState, - mintGATs, - mintGST, -) where - -import Agora.Effect.NoOp (noOpValidator) -import Agora.Governor (GovernorDatum (..), getNextProposalId) -import Agora.Proposal ( - ProposalDatum (..), - ProposalId (..), - ProposalStatus (..), - ProposalVotes (..), - ResultTag (..), - emptyVotesFor, - ) -import Agora.Proposal qualified as P (ProposalDatum (proposalId)) -import Agora.Proposal.Time ( - ProposalStartingTime (ProposalStartingTime), - ProposalTimingConfig (..), - ) -import Agora.Stake (ProposalLock (..), Stake (..), StakeDatum (..)) -import Data.Default.Class (Default (def)) -import Data.Tagged (Tagged (..), untag) -import Plutarch.Api.V1 (mkValidator, validatorHash) -import Plutarch.Context ( - MintingBuilder, - SpendingBuilder, - buildMintingUnsafe, - buildSpendingUnsafe, - fee, - input, - mint, - output, - script, - signedWith, - timeRange, - txId, - withDatum, - withRefIndex, - withSpending, - withTxId, - withValue, - ) -import PlutusLedgerApi.V1 ( - BuiltinData (BuiltinData), - Data (I), - Datum (Datum), - ScriptContext, - TokenName (TokenName), - TxOutRef (txOutRefId), - Validator, - ValidatorHash (..), - ) -import PlutusLedgerApi.V1.Value (AssetClass (AssetClass)) -import PlutusLedgerApi.V1.Value qualified as Value ( - assetClassValue, - singleton, - ) -import PlutusTx.AssocMap qualified as AssocMap ( - empty, - fromList, - singleton, - ) -import Sample.Shared ( - authorityTokenSymbol, - govAssetClass, - govValidatorHash, - gstUTXORef, - minAda, - proposalPolicySymbol, - proposalStartingTimeFromTimeRange, - proposalValidatorHash, - signer, - signer2, - stake, - stakeAssetClass, - stakeValidatorHash, - ) -import Test.Util (closedBoundedInterval, toDatumHash) - --- | Unit datum -unitDatum :: Datum -unitDatum = Datum . BuiltinData $ I 0 -- This could be anything, really. It doesn't matter. - -{- | A valid 'ScriptContext' for minting GST. - - - Only the minting policy will be ran in the transaction. - - An arbitrary UTXO is spent to create the token. - - - We call this the "witness" UTXO. - - This UTXO is referenced in the 'Agora.Governor.Governor' parameter - - The minting policy should only be ran once its life time, - cause the GST cannot be minted twice or burnt. - - - The output UTXO must carry a valid 'GovernorDatum'. - - It's worth noticing that the transaction should send the GST to the governor validator, - but unfortunately we can't check it in the policy. The GST will stay at the address of - the governor validator forever once the token is under control of the said validator. - - TODO: tag the output UTXO with the target address. --} -mintGST :: ScriptContext -mintGST = - let gst = Value.assetClassValue govAssetClass 1 - - governorOutputDatum :: GovernorDatum - governorOutputDatum = - GovernorDatum - { proposalThresholds = def - , nextProposalId = ProposalId 0 - , proposalTimings = def - , createProposalTimeRangeMaxWidth = def - , maximumProposalsPerStake = 3 - } - - witness :: ValidatorHash - witness = "a926a9a72a0963f428e3252caa8354e655603996fb8892d6b8323fd072345924" - - builder :: MintingBuilder - builder = - mconcat - [ txId "90906d3e6b4d6dec2e747dcdd9617940ea8358164c7244694cfa39dec18bd9d4" - , signedWith signer - , mint gst - , input $ - script witness - . withTxId (txOutRefId gstUTXORef) - . withRefIndex 0 - , output $ - script govValidatorHash - . withValue (gst <> minAda) - . withDatum governorOutputDatum - ] - in buildMintingUnsafe builder - -{- | A valid script context to create a proposal. - - Three component will run in the transaction: - TODO: mention redeemers - - - Governor validator - - Stake validator - - Proposal policy - - The components will ensure: - - - The governor state UTXO is spent - - - A new UTXO is paid back to governor validator, which carries the GST. - - The proposal id in the state datum is advanced. - - - A new UTXO is sent to the proposal validator - - - The UTXO contains a newly minted proposal state token. - - It also carries a legal proposal state datum, whose status is set to 'Agora.Proposal.Draft'. - - - A stake is spent to create a proposal - - - The stake owner must sign the transaction. - - The output stake must paid back to the stake validator. - - The output stake is locked by the newly created proposal. --} -createProposal :: ScriptContext -createProposal = - let pst = Value.singleton proposalPolicySymbol "" 1 - gst = Value.assetClassValue govAssetClass 1 - sst = Value.assetClassValue stakeAssetClass 1 - stackedGTs = 424242424242 - thisProposalId = ProposalId 0 - - governorInputDatum :: GovernorDatum - governorInputDatum = - GovernorDatum - { proposalThresholds = def - , nextProposalId = thisProposalId - , proposalTimings = def - , createProposalTimeRangeMaxWidth = def - , maximumProposalsPerStake = 3 - } - - effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.empty) - ] - proposalDatum :: ProposalDatum - proposalDatum = - ProposalDatum - { P.proposalId = ProposalId 0 - , effects = effects - , status = Draft - , cosigners = [signer] - , thresholds = def - , votes = emptyVotesFor effects - , timingConfig = def - , startingTime = proposalStartingTimeFromTimeRange validTimeRange - } - - stakeInputDatum :: StakeDatum - stakeInputDatum = - StakeDatum - { stakedAmount = Tagged stackedGTs - , owner = signer - , lockedBy = [] - } - - governorOutputDatum :: GovernorDatum - governorOutputDatum = governorInputDatum {nextProposalId = getNextProposalId thisProposalId} - - proposalLocks :: [ProposalLock] - proposalLocks = - [ Created thisProposalId - ] - stakeOutputDatum :: StakeDatum - stakeOutputDatum = stakeInputDatum {lockedBy = proposalLocks} - - validTimeRange = closedBoundedInterval 10 15 - - builder :: SpendingBuilder - builder = - mconcat - [ txId "1ffb9669335c908d9a4774a4bf7aa7bfafec91d015249b4138bc83fde4a3330a" - , fee $ Value.singleton "" "" 2 - , timeRange $ closedBoundedInterval 10 15 - , signedWith signer - , mint pst - , input $ - script govValidatorHash - . withValue gst - . withDatum governorInputDatum - . withTxId "4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865" - , input $ - script stakeValidatorHash - . withValue (sst <> Value.assetClassValue (untag stake.gtClassRef) stackedGTs) - . withDatum stakeInputDatum - . withTxId "4262bbd0b3fc926b74eaa8abab5def6ce5e6b94f19cf221c02a16e7da8cd470f" - , output $ - script proposalValidatorHash - . withValue (pst <> minAda) - . withDatum proposalDatum - , output $ - script govValidatorHash - . withValue (gst <> minAda) - . withDatum governorOutputDatum - , output $ - script stakeValidatorHash - . withValue (sst <> Value.assetClassValue (untag stake.gtClassRef) stackedGTs <> minAda) - . withDatum stakeOutputDatum - , withSpending $ - script govValidatorHash - . withValue gst - . withDatum governorInputDatum - ] - in buildSpendingUnsafe builder - -{- This script context should be a valid transaction for minting authority for the effect scrips. - - The following components will run: - - - Governor validator - - Authority policy - - Proposal validator - - There should be only one proposal the transaction. - The validity of the proposal will be checked: - - - It's in 'Agora.Proposal.Locked' state. - - It has a 'winner' effect group, meaning that the votes meet the requirements. - - The system will ensure that for every effect scrips in said effect group, - a newly minted GAT is sent to the corresponding effect, and properly tagged. --} -mintGATs :: ScriptContext -mintGATs = - let pst = Value.singleton proposalPolicySymbol "" 1 - gst = Value.assetClassValue govAssetClass 1 - gat = Value.assetClassValue atAssetClass 1 - - mockEffect :: Validator - mockEffect = mkValidator $ noOpValidator "" - mockEffectHash :: ValidatorHash - mockEffectHash = validatorHash mockEffect - mockEffectOutputDatum :: Datum - mockEffectOutputDatum = unitDatum - atTokenName :: TokenName - atTokenName = TokenName hash - where - ValidatorHash hash = mockEffectHash - atAssetClass :: AssetClass - atAssetClass = AssetClass (authorityTokenSymbol, atTokenName) - - governorInputDatum :: GovernorDatum - governorInputDatum = - GovernorDatum - { proposalThresholds = def - , nextProposalId = ProposalId 5 - , proposalTimings = def - , createProposalTimeRangeMaxWidth = def - , maximumProposalsPerStake = 3 - } - - effects = - AssocMap.fromList - [ (ResultTag 0, AssocMap.empty) - , (ResultTag 1, AssocMap.singleton mockEffectHash $ toDatumHash mockEffectOutputDatum) - ] - proposalVotes :: ProposalVotes - proposalVotes = - ProposalVotes $ - AssocMap.fromList - [ (ResultTag 0, 100) - , (ResultTag 1, 2000) -- The winner - ] - proposalInputDatum :: ProposalDatum - proposalInputDatum = - ProposalDatum - { P.proposalId = ProposalId 0 - , effects = effects - , status = Locked - , cosigners = [signer, signer2] - , thresholds = def - , votes = proposalVotes - , timingConfig = def - , startingTime = ProposalStartingTime 10 - } - - governorOutputDatum :: GovernorDatum - governorOutputDatum = governorInputDatum - - proposalOutputDatum :: ProposalDatum - proposalOutputDatum = proposalInputDatum {status = Finished} - - validTimeRange = - closedBoundedInterval - ((def :: ProposalTimingConfig).lockingTime + 11) - ((def :: ProposalTimingConfig).executingTime - 11) - - builder :: SpendingBuilder - builder = - mconcat - [ txId "ff755f613c1f7487dfbf231325c67f481f7a97e9faf4d8b09ad41176fd65cbe7" - , signedWith signer - , signedWith signer2 - , timeRange validTimeRange - , fee (Value.singleton "" "" 2) - , mint gat - , input $ - script govValidatorHash - . withValue gst - . withDatum governorInputDatum - . withTxId "4355a46b19d348dc2f57c046f8ef63d4538ebb936000f3c9ee954a27460dd865" - , input $ - script proposalValidatorHash - . withValue pst - . withDatum proposalInputDatum - . withTxId "11b2162f267614b803761032b6333040fc61478ae788c088614ee9487ab0c1b7" - , output $ - script govValidatorHash - . withValue (gst <> minAda) - . withDatum governorOutputDatum - , output $ - script proposalValidatorHash - . withValue (pst <> minAda) - . withDatum proposalOutputDatum - , output $ - script mockEffectHash - . withValue (gat <> minAda) - . withDatum mockEffectOutputDatum - , withSpending $ - script govValidatorHash - . withValue gst - . withDatum governorInputDatum - ] - in buildSpendingUnsafe builder - -{- | A valid script context for changing the state datum of the governor. - - In this case, the following components will run: - - * Governor validator - * Effect script - - The effect script should carry an valid tagged authority token, - and said token will be burnt in the transaction. We use 'noOpValidator' - here as a mock effect, so no actual change is done to the governor state. - TODO: use 'Agora.Effect.GovernorMutation.mutateGovernorEffect' as the mock effect in the future. - - The governor will ensure the new governor state is valid. --} -mutateState :: ScriptContext -mutateState = - let gst = Value.assetClassValue govAssetClass 1 - gat = Value.assetClassValue atAssetClass 1 - burntGAT = Value.assetClassValue atAssetClass (-1) - - -- TODO: Use the *real* effect, see https://github.com/Liqwid-Labs/agora/pull/62 - mockEffect :: Validator - mockEffect = mkValidator $ noOpValidator "" - mockEffectHash :: ValidatorHash - mockEffectHash = validatorHash mockEffect - atTokenName :: TokenName - atTokenName = TokenName hash - where - ValidatorHash hash = mockEffectHash - atAssetClass :: AssetClass - atAssetClass = AssetClass (authorityTokenSymbol, atTokenName) - mockEffectInputDatum :: Datum - mockEffectInputDatum = unitDatum - mockEffectOutputDatum :: Datum - mockEffectOutputDatum = mockEffectInputDatum - - governorInputDatum :: GovernorDatum - governorInputDatum = - GovernorDatum - { proposalThresholds = def - , nextProposalId = ProposalId 5 - , proposalTimings = def - , createProposalTimeRangeMaxWidth = def - , maximumProposalsPerStake = 3 - } - - governorOutputDatum :: GovernorDatum - governorOutputDatum = governorInputDatum - - builder :: SpendingBuilder - builder = - mconcat - [ txId "9a12a605086a9f866731869a42d0558036fc739c74fea3849aa41562c015aaf9" - , signedWith signer - , mint burntGAT - , fee $ Value.singleton "" "" 2 - , input $ - script govValidatorHash - . withValue gst - . withDatum governorInputDatum - . withTxId "f867238a04597c99a0b9858746557d305025cca3b9f78ea14d5c88c4cfcf58ff" - , input $ - script mockEffectHash - . withValue gat - . withDatum mockEffectInputDatum - . withTxId "ecff06d7cf99089294569cc8b92609e44927278f9901730715d14634fbc10089" - , output $ - script govValidatorHash - . withValue (gst <> minAda) - . withDatum governorOutputDatum - , input $ - script mockEffectHash - . withValue minAda - . withDatum mockEffectOutputDatum - , withSpending $ - script govValidatorHash - . withValue gst - . withDatum governorInputDatum - ] - in buildSpendingUnsafe builder diff --git a/agora.cabal b/agora.cabal index 6e82deb8..8c7d8606 100644 --- a/agora.cabal +++ b/agora.cabal @@ -187,7 +187,6 @@ library agora-specs Property.MultiSig Sample.Effect.GovernorMutation Sample.Effect.TreasuryWithdrawal - Sample.Governor Sample.Governor.Initialize Sample.Governor.Mutate Sample.Proposal.Advance From 43db5ee2cee0b746897b0fd382dc6befadd27558 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 21 Jul 2022 17:12:02 +0800 Subject: [PATCH 50/78] bump PCB --- flake.lock | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/flake.lock b/flake.lock index b6fdbdab..04af4ee1 100644 --- a/flake.lock +++ b/flake.lock @@ -10913,11 +10913,11 @@ "plutarch": "plutarch_5" }, "locked": { - "lastModified": 1655751255, - "narHash": "sha256-3Uk1v/V+qm/KBBwBPqzr4X7KiH9DyJ9vhNH2Pw08PkE=", + "lastModified": 1658368717, + "narHash": "sha256-GAneUtaxaJSZLNkIGOTByx/Auuq1g3MhzBhTiqZ13+s=", "owner": "Liqwid-Labs", "repo": "plutarch-context-builder", - "rev": "9e6c81a2e1762a5f8e38cb88b83e2996447e3003", + "rev": "2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9", "type": "github" }, "original": { From 23cc230968f01adee6ddb90984b055bc6b3d91ed Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 21 Jul 2022 18:28:12 +0800 Subject: [PATCH 51/78] fix broken tests; utilizing new PCB APIs --- agora-specs/Property/Governor.hs | 4 +- agora-specs/Sample/Governor/Initialize.hs | 36 +++------ agora-specs/Sample/Governor/Mutate.hs | 30 +++----- agora-specs/Sample/Proposal/Advance.hs | 85 ++++++++-------------- agora-specs/Sample/Proposal/Cosign.hs | 56 +++++--------- agora-specs/Sample/Proposal/Create.hs | 28 ++----- agora-specs/Sample/Proposal/UnlockStake.hs | 22 ++---- agora-specs/Sample/Proposal/Vote.hs | 24 ++---- agora-specs/Sample/Stake.hs | 17 +++-- agora-specs/Sample/Treasury.hs | 2 + agora-testlib/Test/Util.hs | 46 +++++++++++- bench.csv | 4 +- 12 files changed, 150 insertions(+), 204 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 7925e80d..5bd5097e 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -30,6 +30,7 @@ import Plutarch.Context ( output, script, withDatum, + withMinting, withOutRef, withValue, ) @@ -43,6 +44,7 @@ import PlutusLedgerApi.V1.Value (assetClassValue) import Property.Generator (genInput, genOutput) import Sample.Shared ( govAssetClass, + govSymbol, govValidatorHash, governor, gstUTXORef, @@ -181,7 +183,7 @@ governorMintingProperty = GovernorOutputNotFound -> referencedInput <> mintAmount 1 GovernorPolicyCorrect -> referencedInput <> outputToGov <> mintAmount 1 - return . buildMintingUnsafe $ inputs <> outputs <> comp + return . buildMintingUnsafe $ inputs <> outputs <> comp <> withMinting govSymbol expected :: ScriptContext -> Maybe () expected sc = diff --git a/agora-specs/Sample/Governor/Initialize.hs b/agora-specs/Sample/Governor/Initialize.hs index db7f1d7b..4bdc0e3e 100644 --- a/agora-specs/Sample/Governor/Initialize.hs +++ b/agora-specs/Sample/Governor/Initialize.hs @@ -30,8 +30,6 @@ import Agora.Proposal.Time (MaxTimeRangeWidth (MaxTimeRangeWidth), ProposalTimin import Data.Default (Default (..)) import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, mint, output, @@ -46,9 +44,6 @@ import Plutarch.Context ( import PlutusLedgerApi.V1 ( CurrencySymbol, MintingPolicy, - ScriptContext (..), - ScriptPurpose (Minting), - TxInfo, TxOutRef (TxOutRef), ValidatorHash, ) @@ -59,7 +54,7 @@ import Sample.Shared ( ) import Sample.Shared qualified as Shared import Test.Specification (SpecificationTree, testPolicy) -import Test.Util (pubKeyHashes, sortValue) +import Test.Util (CombinableBuilder, mkMinting, pubKeyHashes, sortValue) data Parameters = Parameters { datumThresholdsValid :: Bool @@ -115,8 +110,8 @@ govSymbol = mintingPolicySymbol govPolicy -------------------------------------------------------------------------------- -mintGST :: Parameters -> TxInfo -mintGST ps = buildTxInfoUnsafe builder +mintGST :: forall b. CombinableBuilder b => Parameters -> b +mintGST ps = builder where gstAC = if ps.mintStateTokenWithName @@ -149,7 +144,6 @@ mintGST ps = buildTxInfoUnsafe builder --- - witnessBuilder :: BaseBuilder witnessBuilder = if ps.presentWitness then @@ -166,7 +160,6 @@ mintGST ps = buildTxInfoUnsafe builder --- - govBuilder :: BaseBuilder govBuilder = let datum = if ps.withGovernorDatum @@ -177,8 +170,6 @@ mintGST ps = buildTxInfoUnsafe builder . withValue governorValue . datum -- - - builder :: BaseBuilder builder = mconcat [ txId "986b756ffb1c9839fc8d0b22a308ac91d5b5d0ebbfa683a47588c8a5cf70b5af" @@ -247,17 +238,10 @@ mintGSTWithNoneEmptyNameParameters = -------------------------------------------------------------------------------- mkTestCase :: String -> Parameters -> Bool -> SpecificationTree -mkTestCase - name - ps - valid = policyTest - where - txInfo = mintGST ps - - policyTest = - testPolicy - valid - name - (governorPolicy governor) - () - (ScriptContext txInfo (Minting govSymbol)) +mkTestCase name ps valid = + testPolicy + valid + name + (governorPolicy governor) + () + (mkMinting mintGST ps govSymbol) diff --git a/agora-specs/Sample/Governor/Mutate.hs b/agora-specs/Sample/Governor/Mutate.hs index 8b789b0e..fa818e41 100644 --- a/agora-specs/Sample/Governor/Mutate.hs +++ b/agora-specs/Sample/Governor/Mutate.hs @@ -24,8 +24,6 @@ import Agora.Utils (validatorHashToTokenName) import Data.Default (def) import Plutarch.Api.V1 (PValidator, mkValidator, validatorHash) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, mint, output, @@ -37,9 +35,6 @@ import Plutarch.Context ( ) import PlutusLedgerApi.V1 ( Data, - ScriptContext (ScriptContext), - ScriptPurpose (Spending), - TxInfo, TxOutRef (TxOutRef), ValidatorHash, Value, @@ -54,7 +49,7 @@ import Sample.Shared ( minAda, ) import Test.Specification (SpecificationTree, testValidator) -import Test.Util (pubKeyHashes, sortValue, validatorHashes, withOptional) +import Test.Util (CombinableBuilder, mkSpending, pubKeyHashes, sortValue, validatorHashes, withOptional) -------------------------------------------------------------------------------- @@ -131,13 +126,10 @@ governorRef = "6cce6dfbb697f9e2c4fe9786bb576eb7bd6cbcf7801a4ba13d596006c2d5b957" 1 -governorScriptPurpose :: ScriptPurpose -governorScriptPurpose = Spending governorRef - governorRedeemer :: GovernorRedeemer governorRedeemer = MutateGovernor -mkGovernorBuilder :: GovernorParameters -> BaseBuilder +mkGovernorBuilder :: forall b. CombinableBuilder b => GovernorParameters -> b mkGovernorBuilder ps = let gst = Value.assetClassValue govAssetClass 1 value = sortValue $ gst <> minAda @@ -179,7 +171,7 @@ mkGATValue v q = (validatorHashToTokenName gatOwner) q -mkMockEffectBuilder :: MockEffectParameters -> BaseBuilder +mkMockEffectBuilder :: forall b. CombinableBuilder b => MockEffectParameters -> b mkMockEffectBuilder ps = let mkGATValue' = mkGATValue ps.gatValidity inputValue = mkGATValue' 1 @@ -200,13 +192,12 @@ mkMockEffectBuilder ps = -------------------------------------------------------------------------------- -mutate :: ParameterBundle -> TxInfo +mutate :: forall b. CombinableBuilder b => ParameterBundle -> b mutate pb = - buildTxInfoUnsafe $ - mconcat - [ mkGovernorBuilder pb.governorParameters - , mkMockEffectBuilder pb.mockEffectParameters - ] + mconcat + [ mkGovernorBuilder pb.governorParameters + , mkMockEffectBuilder pb.mockEffectParameters + ] -------------------------------------------------------------------------------- @@ -218,10 +209,7 @@ mkTestCase name pb (Validity forGov) = (governorValidator governor) governorInputDatum governorRedeemer - ( ScriptContext - (mutate pb) - governorScriptPurpose - ) + (mkSpending mutate pb governorRef) -------------------------------------------------------------------------------- diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 28ec0e96..8c2665cf 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -79,8 +79,6 @@ import Data.List (sort) import Data.Maybe (catMaybes, fromJust) import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, mint, output, @@ -97,9 +95,6 @@ import PlutusLedgerApi.V1 ( POSIXTime, POSIXTimeRange, PubKeyHash, - ScriptContext (ScriptContext), - ScriptPurpose (Minting, Spending), - TxInfo, TxOutRef (TxOutRef), ValidatorHash, ) @@ -131,9 +126,12 @@ import Test.Specification ( testValidator, ) import Test.Util ( + CombinableBuilder, closedBoundedInterval, datumHash, groupsOfN, + mkMinting, + mkSpending, pubKeyHashes, sortValue, toDatum, @@ -264,7 +262,7 @@ mkProposalOutputDatum ps = proposalRef :: TxOutRef proposalRef = TxOutRef proposalTxRef 1 -mkProposalBuilder :: ProposalParameters -> BaseBuilder +mkProposalBuilder :: forall b. CombinableBuilder b => ProposalParameters -> b mkProposalBuilder ps = let pst = Value.singleton proposalPolicySymbol "" 1 value = sortValue $ minAda <> pst @@ -280,10 +278,6 @@ mkProposalBuilder ps = . withValue value ] --- | Script purpose of the proposal validator. -proposalScriptPurpose :: ScriptPurpose -proposalScriptPurpose = Spending proposalRef - {- | The proposal redeemer used to spend the proposal UTXO, which is always 'AdvanceProposal' in this case. -} @@ -327,7 +321,7 @@ getStakeInputDatumAt ps = (!!) (mkStakeInputDatums ps) mkStakeRef :: Index -> TxOutRef mkStakeRef = TxOutRef stakeTxRef . (+ 3) . fromIntegral -mkStakeBuilder :: StakeParameters -> BaseBuilder +mkStakeBuilder :: forall b. CombinableBuilder b => StakeParameters -> b mkStakeBuilder ps = let perStakeValue = sortValue $ @@ -360,10 +354,6 @@ mkStakeBuilder ps = (mkStakeInputDatums ps) (mkStakeOutputDatums ps) --- | Script purpose of the stake validator, given which stake we want to spend. -getStakeScriptPurposeAt :: Index -> ScriptPurpose -getStakeScriptPurposeAt = Spending . mkStakeRef - {- | The proposal redeemer used to spend the stake UTXO, which is always 'WitnessStake' in this case. -} @@ -394,7 +384,7 @@ mkGovernorOutputDatum ps = governorRef :: TxOutRef governorRef = TxOutRef governorTxRef 2 -mkGovernorBuilder :: GovernorParameters -> BaseBuilder +mkGovernorBuilder :: forall b. CombinableBuilder b => GovernorParameters -> b mkGovernorBuilder ps = let gst = Value.assetClassValue govAssetClass 1 value = sortValue $ gst <> minAda @@ -411,9 +401,6 @@ mkGovernorBuilder ps = . withDatum (mkGovernorOutputDatum ps) ] -governorScriptPurpose :: ScriptPurpose -governorScriptPurpose = Spending governorRef - {- | The proposal redeemer used to spend the governor UTXO, which is always 'MintGATs' in this case. -} @@ -424,11 +411,11 @@ governorRedeemer = MintGATs -- * Authority Token -mkAuthorityTokenBuilder :: AuthorityTokenParameters -> BaseBuilder +mkAuthorityTokenBuilder :: forall b. CombinableBuilder b => AuthorityTokenParameters -> b mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = foldMap perEffect es where - perEffect :: ValidatorHash -> BaseBuilder + perEffect :: ValidatorHash -> b perEffect vh = let tn = if invalidTokenName @@ -445,9 +432,6 @@ mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = . withValue value ] -authorityTokenScriptPurepose :: ScriptPurpose -authorityTokenScriptPurepose = Minting authorityTokenSymbol - authorityTokenRedeemer :: () authorityTokenRedeemer = () @@ -455,19 +439,20 @@ authorityTokenRedeemer = () -- | Create a 'TxInfo' that update the status of a proposal. advance :: + forall b. + CombinableBuilder b => ParameterBundle -> - TxInfo + b advance pb = let mkBuilderMaybe = maybe mempty - in buildTxInfoUnsafe $ - mconcat - [ mkProposalBuilder pb.proposalParameters - , mkStakeBuilder pb.stakeParameters - , mkBuilderMaybe mkGovernorBuilder pb.governorParameters - , mkBuilderMaybe mkAuthorityTokenBuilder pb.authorityTokenParameters - , timeRange pb.transactionTimeRange - , maybe mempty signedWith pb.extraSignature - ] + in mconcat + [ mkProposalBuilder pb.proposalParameters + , mkStakeBuilder pb.stakeParameters + , mkBuilderMaybe mkGovernorBuilder pb.governorParameters + , mkBuilderMaybe mkAuthorityTokenBuilder pb.authorityTokenParameters + , timeRange pb.transactionTimeRange + , maybe mempty signedWith pb.extraSignature + ] -------------------------------------------------------------------------------- @@ -479,13 +464,14 @@ mkTestTree :: ParameterBundle -> Validity -> SpecificationTree -mkTestTree name params val = +mkTestTree name pb val = group name $ catMaybes [proposal, stake, governor, authority] where - txInfo = advance params + spend = mkSpending advance pb + mint = mkMinting advance pb proposal = - let proposalInputDatum = mkProposalInputDatum params.proposalParameters + let proposalInputDatum = mkProposalInputDatum pb.proposalParameters in Just $ testValidator val.forProposalValidator @@ -493,10 +479,7 @@ mkTestTree name params val = (proposalValidator Shared.proposal) proposalInputDatum proposalRedeemer - ( ScriptContext - txInfo - proposalScriptPurpose - ) + (spend proposalRef) stake = let idx = 0 @@ -505,11 +488,9 @@ mkTestTree name params val = val.forStakeValidator "stake" (stakeValidator Shared.stake) - (getStakeInputDatumAt params.stakeParameters idx) + (getStakeInputDatumAt pb.stakeParameters idx) stakeRedeemer - ( ScriptContext - txInfo - (getStakeScriptPurposeAt idx) + ( spend (mkStakeRef idx) ) governor = @@ -519,11 +500,8 @@ mkTestTree name params val = (governorValidator Shared.governor) governorInputDatum governorRedeemer - ( ScriptContext - txInfo - governorScriptPurpose - ) - <$ params.governorParameters + (spend governorRef) + <$ pb.governorParameters authority = testPolicy @@ -531,11 +509,8 @@ mkTestTree name params val = "authority" (authorityTokenPolicy $ AuthorityToken Shared.govAssetClass) authorityTokenRedeemer - ( ScriptContext - txInfo - authorityTokenScriptPurepose - ) - <$ (params.authorityTokenParameters) + (mint authorityTokenSymbol) + <$ (pb.authorityTokenParameters) mkTestTree' :: String -> diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index a344af34..4922c041 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -40,8 +40,6 @@ import Data.Default (def) import Data.List (sort) import Data.Tagged (Tagged, untag) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, output, script, @@ -49,16 +47,13 @@ import Plutarch.Context ( timeRange, txId, withDatum, - withRefIndex, + withOutRef, withTxId, withValue, ) import PlutusLedgerApi.V1 ( POSIXTimeRange, PubKeyHash, - ScriptContext (ScriptContext), - ScriptPurpose (Spending), - TxInfo, TxOutRef (..), Value, ) @@ -80,7 +75,7 @@ import Test.Specification ( group, testValidator, ) -import Test.Util (closedBoundedInterval, pubKeyHashes, sortValue) +import Test.Util (CombinableBuilder, closedBoundedInterval, mkSpending, pubKeyHashes, sortValue) -- | Parameters for cosigning a proposal. data Parameters = Parameters @@ -138,8 +133,8 @@ mkStakeInputDatums :: Parameters -> [StakeDatum] mkStakeInputDatums = fmap (\pk -> StakeDatum perStakedGTs pk []) . newCosigners -- | Create a 'TxInfo' that tries to cosign a proposal with new cosigners. -cosign :: Parameters -> TxInfo -cosign ps = buildTxInfoUnsafe builder +cosign :: forall b. CombinableBuilder b => Parameters -> b +cosign ps = builder where pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 @@ -158,7 +153,6 @@ cosign ps = buildTxInfoUnsafe builder (untag perStakedGTs) <> sst - stakeBuilder :: BaseBuilder stakeBuilder = foldMap ( \(stakeDatum, refIdx) -> @@ -166,13 +160,13 @@ cosign ps = buildTxInfoUnsafe builder if ps.alterOutputStakes then stakeDatum {stakedAmount = 0} else stakeDatum - in mconcat @BaseBuilder + in mconcat [ input $ script stakeValidatorHash . withValue stakeValue . withDatum stakeDatum . withTxId stakeTxRef - . withRefIndex refIdx + . withOutRef (mkStakeRef refIdx) , output $ script stakeValidatorHash . withValue stakeValue @@ -182,7 +176,7 @@ cosign ps = buildTxInfoUnsafe builder ) $ zip stakeInputDatums - [2 ..] + [0 ..] --- @@ -192,7 +186,6 @@ cosign ps = buildTxInfoUnsafe builder proposalOutputDatum :: ProposalDatum proposalOutputDatum = mkProposalOutputDatum ps - proposalBuilder :: BaseBuilder proposalBuilder = mconcat [ input $ @@ -200,7 +193,7 @@ cosign ps = buildTxInfoUnsafe builder . withValue pst . withDatum proposalInputDatum . withTxId proposalTxRef - . withRefIndex proposalRefIdx + . withOutRef proposalRef , output $ script proposalValidatorHash . withValue (sortValue (pst <> minAda)) @@ -217,7 +210,6 @@ cosign ps = buildTxInfoUnsafe builder --- - builder :: BaseBuilder builder = mconcat [ txId "05c67819fc3381a2052b929ab439244b7b5fe3b3bd07f2134055bbbb21bd9e52" @@ -231,21 +223,15 @@ proposalRefIdx :: Integer proposalRefIdx = 1 -- | Spend the proposal ST. -proposalScriptPurpose :: ScriptPurpose -proposalScriptPurpose = - Spending - ( TxOutRef - proposalTxRef - proposalRefIdx - ) +proposalRef :: TxOutRef +proposalRef = TxOutRef proposalTxRef proposalRefIdx -- | Consume the given stake. -mkStakeScriptPurpose :: Int -> ScriptPurpose -mkStakeScriptPurpose idx = - Spending $ - TxOutRef - stakeTxRef - $ proposalRefIdx + 1 + fromIntegral idx +mkStakeRef :: Int -> TxOutRef +mkStakeRef idx = + TxOutRef + stakeTxRef + $ proposalRefIdx + 1 + fromIntegral idx -- | Create a proposal redeemer which cosigns with the new cosginers. mkProposalRedeemer :: Parameters -> ProposalRedeemer @@ -321,7 +307,7 @@ mkTestTree :: SpecificationTree mkTestTree name ps isValid = group name [proposal, stake] where - txInfo = cosign ps + spend = mkSpending cosign ps proposal = let proposalInputDatum = mkProposalInputDatum ps @@ -331,10 +317,7 @@ mkTestTree name ps isValid = group name [proposal, stake] (proposalValidator Shared.proposal) proposalInputDatum (mkProposalRedeemer ps) - ( ScriptContext - txInfo - proposalScriptPurpose - ) + (spend proposalRef) stake = let idx = 0 @@ -346,7 +329,4 @@ mkTestTree name ps isValid = group name [proposal, stake] (stakeValidator Shared.stake) stakeInputDatum stakeRedeemer - ( ScriptContext - txInfo - (mkStakeScriptPurpose idx) - ) + (spend $ mkStakeRef idx) diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index 83749203..6ec1fac2 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -45,8 +45,6 @@ import Data.Coerce (coerce) import Data.Default (Default (def)) import Data.Tagged (Tagged, untag) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, mint, output, @@ -63,9 +61,6 @@ import PlutusLedgerApi.V1 ( POSIXTime (POSIXTime), POSIXTimeRange, PubKeyHash, - ScriptContext (ScriptContext), - ScriptPurpose (Minting, Spending), - TxInfo, TxOutRef (TxOutRef), ValidatorHash, always, @@ -88,7 +83,7 @@ import Sample.Shared ( ) import Sample.Shared qualified as Shared import Test.Specification (SpecificationTree, group, testPolicy, testValidator) -import Test.Util (closedBoundedInterval, sortValue) +import Test.Util (CombinableBuilder, closedBoundedInterval, mkMinting, mkSpending, sortValue) -- | Parameters for creating a proposal. data Parameters = Parameters @@ -269,8 +264,8 @@ governorRef = TxOutRef "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be -------------------------------------------------------------------------------- -- | Create a 'TxInfo' that spends a stake to create a new proposal. -createProposal :: Parameters -> TxInfo -createProposal ps = buildTxInfoUnsafe builder +createProposal :: forall b. CombinableBuilder b => Parameters -> b +createProposal ps = builder where pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 @@ -296,7 +291,6 @@ createProposal ps = buildTxInfoUnsafe builder --- - builder :: BaseBuilder builder = mconcat [ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" @@ -426,7 +420,8 @@ mkTestTree validForStakeValidator = group name [proposalTest, governorTest, stakeTest] where - txInfo = createProposal ps + mint = mkMinting createProposal ps + spend = mkSpending createProposal ps proposalTest = testPolicy @@ -434,7 +429,7 @@ mkTestTree "proposal" (proposalPolicy Shared.proposal.governorSTAssetClass) proposalPolicyRedeemer - (ScriptContext txInfo (Minting proposalPolicySymbol)) + (mint proposalPolicySymbol) governorTest = testValidator @@ -443,11 +438,7 @@ mkTestTree (governorValidator Shared.governor) governorInputDatum governorRedeemer - ( ScriptContext - txInfo - (Spending governorRef) - ) - + (spend governorRef) stakeTest = testValidator validForStakeValidator @@ -455,7 +446,4 @@ mkTestTree (stakeValidator Shared.stake) (mkStakeInputDatum ps) stakeRedeemer - ( ScriptContext - txInfo - (Spending stakeRef) - ) + (spend stakeRef) diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index 3165a5e4..e5b47d6d 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -40,8 +40,6 @@ import Agora.Stake.Scripts (stakeValidator) import Data.Default.Class (Default (def)) import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, output, script, @@ -54,9 +52,6 @@ import Plutarch.Context ( import PlutusLedgerApi.V1 ( DatumHash, PubKeyHash, - ScriptContext (..), - ScriptPurpose (Spending), - TxInfo (..), TxOutRef (..), ValidatorHash, ) @@ -74,7 +69,7 @@ import Sample.Shared ( ) import Sample.Shared qualified as Shared import Test.Specification (SpecificationTree, group, testValidator) -import Test.Util (sortValue, updateMap) +import Test.Util (CombinableBuilder, mkSpending, sortValue, updateMap) -------------------------------------------------------------------------------- @@ -249,7 +244,7 @@ mkProposalDatumPair params pid = getProposalVotes votesTemplate -- | Create a 'TxInfo' that tries to unlock a stake. -unlockStake :: Parameters -> TxInfo +unlockStake :: forall b. CombinableBuilder b => Parameters -> b unlockStake ps = let pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 @@ -260,7 +255,6 @@ unlockStake ps = foldMap ( \((i, o), idx) -> mconcat - @BaseBuilder [ input $ script proposalValidatorHash . withValue pst @@ -288,7 +282,7 @@ unlockStake ps = sOutDatum = mkStakeOutputDatum ps stakes = - mconcat @BaseBuilder + mconcat [ input $ script stakeValidatorHash . withValue stakeValue @@ -301,13 +295,13 @@ unlockStake ps = ] builder = - mconcat @BaseBuilder + mconcat [ txId "388bc0b897b3dadcd479da4c88291de4113a50b72ddbed001faf7fc03f11bc52" , proposals , stakes , signedWith defOwner ] - in buildTxInfoUnsafe builder + in builder -- | Reference to the stake UTXO. stakeRef :: TxOutRef @@ -523,7 +517,7 @@ mkAlterStakeParameters nProposals = do mkTestTree :: String -> Parameters -> Bool -> SpecificationTree mkTestTree name ps isValid = group name [stake, proposal] where - txInfo = unlockStake ps + spend = mkSpending unlockStake ps stake = testValidator @@ -532,7 +526,7 @@ mkTestTree name ps isValid = group name [stake, proposal] (stakeValidator Shared.stake) (mkStakeInputDatum ps) stakeRedeemer - (ScriptContext txInfo (Spending stakeRef)) + (spend stakeRef) proposal = let idx = 0 @@ -544,4 +538,4 @@ mkTestTree name ps isValid = group name [stake, proposal] (proposalValidator Shared.proposal) (mkProposalInputDatum ps pid) proposalRedeemer - (ScriptContext txInfo (Spending ref)) + (spend ref) diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index f841dd28..765cd823 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -33,8 +33,6 @@ import Agora.Stake.Scripts (stakeValidator) import Data.Default (Default (def)) import Data.Tagged (Tagged (Tagged), untag) import Plutarch.Context ( - BaseBuilder, - buildTxInfoUnsafe, input, output, script, @@ -47,9 +45,6 @@ import Plutarch.Context ( ) import PlutusLedgerApi.V1 ( PubKeyHash, - ScriptContext (..), - ScriptPurpose (Spending), - TxInfo, TxOutRef (TxOutRef), ) import PlutusLedgerApi.V1.Value qualified as Value @@ -71,7 +66,7 @@ import Test.Specification ( testValidator, validatorSucceedsWith, ) -import Test.Util (closedBoundedInterval, sortValue, updateMap) +import Test.Util (CombinableBuilder, closedBoundedInterval, mkSpending, sortValue, updateMap) -- | Reference to the proposal UTXO. proposalRef :: TxOutRef @@ -152,7 +147,7 @@ stakeRedeemer :: StakeRedeemer stakeRedeemer = PermitVote -- | Create a valid transaction that votes on a propsal, given the parameters. -vote :: Parameters -> TxInfo +vote :: forall b. CombinableBuilder b => Parameters -> b vote params = let pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 @@ -203,7 +198,6 @@ vote params = <> Value.assetClassValue (untag stake.gtClassRef) params.voteCount <> minAda - builder :: BaseBuilder builder = mconcat [ txId "827598fb2d69a896bbd9e645bb14c307df907f422b39eecbe4d6329bc30b428c" @@ -228,7 +222,7 @@ vote params = . withValue stakeValue . withDatum stakeOutputDatum ] - in buildTxInfoUnsafe builder + in builder --- @@ -248,7 +242,7 @@ validVoteParameters = mkTestTree :: String -> Parameters -> Bool -> SpecificationTree mkTestTree name ps isValid = group name [proposal, stake] where - txInfo = vote ps + spend = mkSpending vote ps proposal = testValidator @@ -257,10 +251,7 @@ mkTestTree name ps isValid = group name [proposal, stake] (proposalValidator Shared.proposal) proposalInputDatum (mkProposalRedeemer ps) - ( ScriptContext - txInfo - (Spending proposalRef) - ) + (spend proposalRef) stake = let stakeInputDatum = mkStakeInputDatum ps @@ -269,7 +260,4 @@ mkTestTree name ps isValid = group name [proposal, stake] (stakeValidator Shared.stake) stakeInputDatum stakeRedeemer - ( ScriptContext - txInfo - (Spending stakeRef) - ) + (spend stakeRef) diff --git a/agora-specs/Sample/Stake.hs b/agora-specs/Sample/Stake.hs index 88e5dc77..ba1a8354 100644 --- a/agora-specs/Sample/Stake.hs +++ b/agora-specs/Sample/Stake.hs @@ -40,8 +40,9 @@ import Plutarch.Context ( signedWith, txId, withDatum, - withSpending, - withTxId, + withMinting, + withOutRef, + withSpendingOutRef, withValue, ) import PlutusLedgerApi.V1 ( @@ -53,6 +54,7 @@ import PlutusLedgerApi.V1 ( TxInfo (txInfoData, txInfoSignatories), ValidatorHash (ValidatorHash), ) +import PlutusLedgerApi.V1.Contexts (TxOutRef (..)) import PlutusLedgerApi.V1.Value qualified as Value ( assetClassValue, singleton, @@ -86,6 +88,7 @@ stakeCreation = script stakeValidatorHash . withValue (st <> Value.singleton "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" "LQ" 424242424242) . withDatum datum + , withMinting stakeSymbol ] in buildMintingUnsafe builder @@ -130,6 +133,9 @@ stakeDepositWithdraw config = stakeAfter :: StakeDatum stakeAfter = stakeBefore {stakedAmount = stakeBefore.stakedAmount + config.delta} + stakeRef :: TxOutRef + stakeRef = TxOutRef "0ffef57e30cc604342c738e31e0451593837b313e7bfb94b0922b142782f98e6" 1 + builder :: SpendingBuilder builder = mconcat @@ -140,14 +146,11 @@ stakeDepositWithdraw config = script stakeValidatorHash . withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeBefore.stakedAmount)) . withDatum stakeAfter - . withTxId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" + . withOutRef stakeRef , output $ script stakeValidatorHash . withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeAfter.stakedAmount)) . withDatum stakeAfter - , withSpending $ - script stakeValidatorHash - . withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeBefore.stakedAmount)) - . withDatum stakeAfter + , withSpendingOutRef stakeRef ] in buildSpendingUnsafe builder diff --git a/agora-specs/Sample/Treasury.hs b/agora-specs/Sample/Treasury.hs index 632f5593..2c3c9027 100644 --- a/agora-specs/Sample/Treasury.hs +++ b/agora-specs/Sample/Treasury.hs @@ -28,6 +28,7 @@ import Plutarch.Context ( script, signedWith, txId, + withMinting, withTxId, withValue, ) @@ -67,6 +68,7 @@ baseCtxBuilder = , mint (Value.singleton gatCs gatTn (-1)) , input treasury , output treasury + , withMinting gatCs ] {- | A `ScriptContext` that should be compatible with treasury diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index e7914b78..dff8990d 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -20,6 +20,9 @@ module Test.Util ( validatorHashes, groupsOfN, withOptional, + mkSpending, + mkMinting, + CombinableBuilder, ) where -------------------------------------------------------------------------------- @@ -32,9 +35,26 @@ import Data.ByteString qualified as BS import Data.ByteString.Char8 qualified as C import Data.ByteString.Lazy qualified as ByteString.Lazy import Data.List (sortOn) -import Plutarch.Context (UTXO) +import Plutarch.Context ( + Builder, + UTXO, + buildMintingUnsafe, + buildSpendingUnsafe, + withMinting, + withSpendingOutRef, + ) import Plutarch.Crypto (pblake2b_256) -import PlutusLedgerApi.V1 (Credential (PubKeyCredential, ScriptCredential), PubKeyHash (..), ValidatorHash (ValidatorHash)) +import PlutusLedgerApi.V1 ( + Credential ( + PubKeyCredential, + ScriptCredential + ), + CurrencySymbol, + PubKeyHash (..), + ScriptContext, + TxOutRef, + ValidatorHash (ValidatorHash), + ) import PlutusLedgerApi.V1.Interval qualified as PlutusTx import PlutusLedgerApi.V1.Scripts (Datum (Datum), DatumHash (DatumHash)) import PlutusLedgerApi.V1.Value (Value (..)) @@ -168,3 +188,25 @@ withOptional :: UTXO withOptional f (Just b) = f b withOptional _ _ = id + +mkSpending :: + forall ps. + (forall b. (Monoid b, Builder b) => ps -> b) -> + ps -> + TxOutRef -> + ScriptContext +mkSpending mkBuilder ps oref = + buildSpendingUnsafe $ + mkBuilder ps <> withSpendingOutRef oref + +mkMinting :: + forall ps. + (forall b. (Monoid b, Builder b) => ps -> b) -> + ps -> + CurrencySymbol -> + ScriptContext +mkMinting mkBuilder ps cs = + buildMintingUnsafe $ + mkBuilder ps <> withMinting cs + +type CombinableBuilder b = (Monoid b, Builder b) diff --git a/bench.csv b/bench.csv index e5c5b9b9..58ff462f 100644 --- a/bench.csv +++ b/bench.csv @@ -5,8 +5,8 @@ Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8290 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 Agora/Stake/policy/stakeCreation,51008580,149029,2522 -Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 -Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 +Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4753 +Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4741 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2005 Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8769 Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5407 From fec3b2f13b919e9339e36da490b529cc4ccd74fc Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 22 Jul 2022 21:15:09 +0800 Subject: [PATCH 52/78] add docstrings for some crucial test facilities --- agora-specs/Sample/Governor/Initialize.hs | 35 +++++-- agora-specs/Sample/Governor/Mutate.hs | 9 ++ agora-specs/Sample/Proposal/Advance.hs | 119 ++++++++++++++++++++-- agora-testlib/Test/Util.hs | 8 ++ 4 files changed, 157 insertions(+), 14 deletions(-) diff --git a/agora-specs/Sample/Governor/Initialize.hs b/agora-specs/Sample/Governor/Initialize.hs index 4bdc0e3e..954d9cb4 100644 --- a/agora-specs/Sample/Governor/Initialize.hs +++ b/agora-specs/Sample/Governor/Initialize.hs @@ -56,14 +56,25 @@ import Sample.Shared qualified as Shared import Test.Specification (SpecificationTree, testPolicy) import Test.Util (CombinableBuilder, mkMinting, pubKeyHashes, sortValue) +-- | The parameters that control the generation of the transaction. data Parameters = Parameters { datumThresholdsValid :: Bool + -- ^ Whether the 'GovernorDatum.proposalThresholds' field of the output + -- governor datum is valid or not. , datumMaxTimeRangeWidthValid :: Bool + -- ^ Whether the 'GovernorDatum.maximumProposalsPerStake'field of the + -- output governor datum is valid or not. , datumTimingConfigValid :: Bool + -- ^ Whether the 'GovernorDatum.proposalTimings'field of the output + -- governor datum is valid or not. , withGovernorDatum :: Bool - , presentWitness :: Bool - , mintMoreThanOneStateToken :: Bool - , mintStateTokenWithName :: Bool + , -- Whether the output GST UTxO will carry the governor datum. + presentWitness :: Bool + , -- Whether to spend the UTxO referenced by 'Governor.gstOutRef'. + mintMoreThanOneStateToken :: Bool + , -- More than one GST will be minted if this is set to true. + mintStateTokenWithName :: Bool + -- The token name of the GST won't be empty if this is set to true. } -------------------------------------------------------------------------------- @@ -126,9 +137,18 @@ mintGST ps = builder --- governorOutputDatum = - let th = if ps.datumThresholdsValid then def else invalidProposalThresholds - trw = if ps.datumMaxTimeRangeWidthValid then def else invalidMaxTimeRangeWidth - ptc = if ps.datumTimingConfigValid then def else invalidProposalTimings + let th = + if ps.datumThresholdsValid + then def + else invalidProposalThresholds + trw = + if ps.datumMaxTimeRangeWidthValid + then def + else invalidMaxTimeRangeWidth + ptc = + if ps.datumTimingConfigValid + then def + else invalidProposalTimings in validGovernorOutputDatum { proposalThresholds = th , proposalTimings = ptc @@ -237,6 +257,9 @@ mintGSTWithNoneEmptyNameParameters = -------------------------------------------------------------------------------- +{- | Create a test tree that runs the governor policy to test the initialization + of the governor. +-} mkTestCase :: String -> Parameters -> Bool -> SpecificationTree mkTestCase name ps valid = testPolicy diff --git a/agora-specs/Sample/Governor/Mutate.hs b/agora-specs/Sample/Governor/Mutate.hs index fa818e41..735aae1b 100644 --- a/agora-specs/Sample/Governor/Mutate.hs +++ b/agora-specs/Sample/Governor/Mutate.hs @@ -53,6 +53,7 @@ import Test.Util (CombinableBuilder, mkSpending, pubKeyHashes, sortValue, valida -------------------------------------------------------------------------------- +-- | Represent the validity property of the governor output datum. data GovernorOutputDatumValidity = DatumValid | ValueInvalid @@ -60,6 +61,7 @@ data GovernorOutputDatumValidity | NoDatum deriving stock (Bounded, Enum) +-- | Represent the validity property of the authority token UTxO. data GATValidity = GATValid | WrongTag @@ -69,11 +71,13 @@ data GATValidity data GovernorParameters = GovernorParameters { governorOutputDatumValidity :: GovernorOutputDatumValidity , stealGST :: Bool + -- ^ Send the GST to somewhere else other than the govenor validator. } data MockEffectParameters = MockEffectParameters { gatValidity :: GATValidity , burnGAT :: Bool + -- ^ Whether to burn the GAT in the transaction or not. } data ParameterBundle = ParameterBundle @@ -201,6 +205,7 @@ mutate pb = -------------------------------------------------------------------------------- +-- | Run the governor to test the mutation functionality. mkTestCase :: String -> ParameterBundle -> Validity -> SpecificationTree mkTestCase name pb (Validity forGov) = testValidator @@ -213,6 +218,7 @@ mkTestCase name pb (Validity forGov) = -------------------------------------------------------------------------------- +-- | The only one valid combination of all the parameters. totallyValidBundle :: ParameterBundle totallyValidBundle = ParameterBundle @@ -230,6 +236,9 @@ totallyValidBundle = -------------------------------------------------------------------------------- +{- | All the invalid combination of the parameters. + TODO: use 'Gen'? +-} invalidBundles :: [ParameterBundle] invalidBundles = do gdv <- enumFrom ValueInvalid diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 8c2665cf..91fa17d7 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -139,19 +139,36 @@ import Test.Util ( validatorHashes, ) +{- | A bunch of parameters that control the generation of the transaction + context. +-} data ParameterBundle = ParameterBundle { proposalParameters :: ProposalParameters + -- ^ Parameters related to the the advancing proposal. , stakeParameters :: StakeParameters + -- ^ Parameters related to stakes. , governorParameters :: Maybe GovernorParameters + -- ^ Parameters related to GST moving. If set to 'Nothing', the GST won't + -- be moved, thus the governor validator won't be run in 'mkTestTree'. , authorityTokenParameters :: Maybe AuthorityTokenParameters + -- ^ Parameters related to GAT minting. If set to 'Nothing', no GAT will + -- be minted, thus the GAT minting policy won't be run in 'mkTestTree'. , transactionTimeRange :: POSIXTimeRange + -- ^ The value of 'TxInfo.txInfoValidRange', valid range of the generated + -- transaction. , extraSignature :: Maybe PubKeyHash + -- ^ An extra signator. Intended to be used when + -- 'StakeParametersstakeParameters.transactionSignedByOwners' is set to + -- false. } +-- | Everything about the generated governor stuff. newtype GovernorParameters = GovernorParameters { invalidGovernorOutputDatum :: Bool + -- ^ The output governor datum will be changed. } +-- | Everything about the generated authority token stuff. data AuthorityTokenParameters = forall (datum :: Type) (pdatum :: S -> Type). @@ -161,21 +178,40 @@ data AuthorityTokenParameters = forall ) => AuthorityTokenParameters { mintGATsFor :: [ValidatorHash] + -- ^ GATs will be minted and sent to the given group of effects. , carryDatum :: Maybe datum + -- ^ The datum that GAT UTxOs will be carrying. , invalidTokenName :: Bool + -- ^ If set to true, GATs won't be tagged by their corresponding effect + -- hashes. } -data Winner = EffectAt Index | All +-- | Represent the winning effect group(s). +data Winner + = -- | Only one effect at the given index has the highest votes. + EffectAt Index + | -- | All the effects have the same highest votes. + All +-- | Everything about the generated proposal stuff. data ProposalParameters = ProposalParameters { fromStatus :: ProposalStatus + -- ^ What status is the proposal advancing from , toStatus :: ProposalStatus + -- ^ What status is the proposal advancing to , effectList :: [AssocMap.Map ValidatorHash DatumHash] + -- ^ The effect groups of the proposal. A neutral effect group is not + -- required here. , winnerAndVotes :: Maybe (Winner, Integer) + -- ^ Specify the effect group(s) that have the highest votes, and the value + -- of the highest votes. , numCosigners :: NumStake + -- ^ The number of cosigners. , invalidProposalOutputDatum :: Bool + -- ^ Whether to make the proposal output datum invalid or not. } +-- | Everything about the generated stake stuff. data StakeParameters = StakeParameters { numStake :: NumStake , perStakeGTs :: Integer @@ -183,9 +219,15 @@ data StakeParameters = StakeParameters , invalidStakeOutputDatum :: Bool } +-- | Represent the number of stakes or the number of the cosigners. type NumStake = Int + +-- | Represent an index. type Index = Int +{- | The validity of the generated transacrion for variuos componets. + 'True' means valid, 'False' means invalid. +-} data Validity = Validity { forProposalValidator :: Bool , forStakeValidator :: Bool @@ -197,12 +239,15 @@ data Validity = Validity -- * Proposal +-- | Mock cosigners. mkCosigners :: NumStake -> [PubKeyHash] mkCosigners = sort . flip take pubKeyHashes +-- | Allocate the result tag for the effect at the given index. outcomeIdxToResultTag :: Index -> ResultTag outcomeIdxToResultTag = ResultTag . fromIntegral +-- | Add a neutral effect group and allocate result tags for the effect groups. mkEffects :: ProposalParameters -> AssocMap.Map ResultTag (AssocMap.Map ValidatorHash DatumHash) @@ -212,6 +257,7 @@ mkEffects ps = finalEffects = ps.effectList <> [neutralEffect] in AssocMap.fromList $ zip resultTags finalEffects +-- | Set the votes of the winning group(s). setWinner :: (Winner, Integer) -> ProposalVotes -> ProposalVotes setWinner (All, votes) (ProposalVotes m) = ProposalVotes $ AssocMap.mapMaybe (const $ Just votes) m @@ -219,6 +265,7 @@ setWinner (EffectAt winnerIdx, votes) (ProposalVotes m) = let winnerResultTag = outcomeIdxToResultTag winnerIdx in ProposalVotes $ updateMap (const $ Just votes) winnerResultTag m +-- | Mock votes for the proposal, given the parameters. mkVotes :: ProposalParameters -> ProposalVotes @@ -227,9 +274,11 @@ mkVotes ps = emptyVotes = emptyVotesFor effects in maybe emptyVotes (`setWinner` emptyVotes) (ps.winnerAndVotes) +-- | The starting time of every generated proposal. proposalStartingTime :: POSIXTime proposalStartingTime = 0 +-- | Create the input proposal datum given the parameters. mkProposalInputDatum :: ProposalParameters -> ProposalDatum mkProposalInputDatum ps = let effects = mkEffects ps @@ -246,6 +295,7 @@ mkProposalInputDatum ps = , startingTime = st } +-- | Create the output proposal datum given the parameters. mkProposalOutputDatum :: ProposalParameters -> ProposalDatum mkProposalOutputDatum ps = let inputDatum = mkProposalInputDatum ps @@ -262,6 +312,9 @@ mkProposalOutputDatum ps = proposalRef :: TxOutRef proposalRef = TxOutRef proposalTxRef 1 +{- | Create a context builder that contains all the information about the + input/output of the proposal validator, given the paramters. +-} mkProposalBuilder :: forall b. CombinableBuilder b => ProposalParameters -> b mkProposalBuilder ps = let pst = Value.singleton proposalPolicySymbol "" 1 @@ -288,6 +341,7 @@ proposalRedeemer = AdvanceProposal -- * Stake +-- Mock owners of the stakes. mkStakeOwners :: NumStake -> [PubKeyHash] mkStakeOwners = mkCosigners @@ -303,6 +357,7 @@ mkStakeInputDatums ps = in (\owner -> template {owner = owner}) <$> mkStakeOwners ps.numStake +-- | Create the output stake datums given the parameters. mkStakeOutputDatums :: StakeParameters -> [StakeDatum] mkStakeOutputDatums ps = let inputDatums = mkStakeInputDatums ps @@ -314,6 +369,9 @@ mkStakeOutputDatums ps = modify inp = inp {stakedAmount = outputStakedAmount} in modify <$> inputDatums +{- | Get the input stake datum given the index. The range of the index is + @[0, 'StakeParameters.numStake - 1']@ +-} getStakeInputDatumAt :: StakeParameters -> Index -> StakeDatum getStakeInputDatumAt ps = (!!) (mkStakeInputDatums ps) @@ -321,6 +379,9 @@ getStakeInputDatumAt ps = (!!) (mkStakeInputDatums ps) mkStakeRef :: Index -> TxOutRef mkStakeRef = TxOutRef stakeTxRef . (+ 3) . fromIntegral +{- | Create a context builder that contains all the inputs/outputs of the + stake validator. +-} mkStakeBuilder :: forall b. CombinableBuilder b => StakeParameters -> b mkStakeBuilder ps = let perStakeValue = @@ -364,6 +425,7 @@ stakeRedeemer = WitnessStake -- * Governor +-- | The input governor datum. governorInputDatum :: GovernorDatum governorInputDatum = GovernorDatum @@ -374,6 +436,7 @@ governorInputDatum = , maximumProposalsPerStake = 3 } +-- | Create the output governor datum given the parameters. mkGovernorOutputDatum :: GovernorParameters -> GovernorDatum mkGovernorOutputDatum ps = if ps.invalidGovernorOutputDatum @@ -384,6 +447,9 @@ mkGovernorOutputDatum ps = governorRef :: TxOutRef governorRef = TxOutRef governorTxRef 2 +{- | Create a context builder that contains the input and the output of the + governor validator. +-} mkGovernorBuilder :: forall b. CombinableBuilder b => GovernorParameters -> b mkGovernorBuilder ps = let gst = Value.assetClassValue govAssetClass 1 @@ -411,7 +477,14 @@ governorRedeemer = MintGATs -- * Authority Token -mkAuthorityTokenBuilder :: forall b. CombinableBuilder b => AuthorityTokenParameters -> b +{- | Create a context builder that contains the infomation about the minted + authority tokens and where they're sent to. +-} +mkAuthorityTokenBuilder :: + forall b. + CombinableBuilder b => + AuthorityTokenParameters -> + b mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = foldMap perEffect es where @@ -432,6 +505,7 @@ mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = . withValue value ] +-- | The redeemer used while running the authority token policy. authorityTokenRedeemer :: () authorityTokenRedeemer = () @@ -456,8 +530,8 @@ advance pb = -------------------------------------------------------------------------------- -{- | Create a test tree that runs the stake validator and proposal validator to - test the advancing functionalities. +{- | Create a test tree that runs the relavant componets to test the advancing + functionalities. -} mkTestTree :: String -> @@ -512,6 +586,9 @@ mkTestTree name pb val = (mint authorityTokenSymbol) <$ (pb.authorityTokenParameters) +{- | Create a test tree that runs a bunch of parameter bundles. These bundles + should have the same validity. +-} mkTestTree' :: String -> (ParameterBundle -> String) -> @@ -626,6 +703,7 @@ getNextState = \case Locked -> Finished Finished -> error "Cannot advance 'Finished' proposal" +-- | Calculate the number of GTs per stake in order to exceed the minimum limit. compPerStakeGTsForDraft :: NumStake -> Integer compPerStakeGTsForDraft nCosigners = untag (def :: ProposalThresholds).vote @@ -637,6 +715,7 @@ dummyDatum = () dummyDatumHash :: DatumHash dummyDatumHash = datumHash $ toDatum dummyDatum +-- | Create given number of effect groups. Each group will have 3 effects. mkMockEffects :: Int -> [AssocMap.Map ValidatorHash DatumHash] mkMockEffects = flip @@ -646,11 +725,21 @@ mkMockEffects = <$> groupsOfN 3 validatorHashes ) +numberOfVotesThatExceedsTheMinimumRequirement :: Integer +numberOfVotesThatExceedsTheMinimumRequirement = + untag (def @ProposalThresholds).execute + 1 + mkWinnerVotes :: Index -> (Winner, Integer) -mkWinnerVotes idx = (EffectAt idx, untag (def @ProposalThresholds).execute + 1) +mkWinnerVotes idx = + ( EffectAt idx + , numberOfVotesThatExceedsTheMinimumRequirement + ) ambiguousWinnerVotes :: (Winner, Integer) -ambiguousWinnerVotes = (All, untag (def @ProposalThresholds).execute + 1) +ambiguousWinnerVotes = + ( All + , numberOfVotesThatExceedsTheMinimumRequirement + ) -------------------------------------------------------------------------------- @@ -663,7 +752,19 @@ ambiguousWinnerVotes = (All, untag (def @ProposalThresholds).execute + 1) defaultWinnerIdx :: Index defaultWinnerIdx = 0 -mkValidToNextStateBundle :: Word -> Word -> ProposalStatus -> ParameterBundle +{- | Advance a proposal to the next state, perfectly valid for all the + componets. +-} +mkValidToNextStateBundle :: + -- | Number of cosigners. + Word -> + -- | Number of effects + Word -> + -- | The initial proposal state, should not be 'Finished'. + ProposalStatus -> + ParameterBundle +mkValidToNextStateBundle _ _ Finished = + error "Cannot advance from Finished" mkValidToNextStateBundle nCosigners nEffects from = let next = getNextState from effects = mkMockEffects $ fromIntegral nEffects @@ -695,6 +796,7 @@ mkValidToNextStateBundle nCosigners nEffects from = , extraSignature = Just signer } + -- This is my favourite part of the test suite, lol. modifyTemplate = do when (from == Draft) $ modify $ \b -> @@ -889,7 +991,8 @@ mkAmbiguousWinnerBundle nCosigners nEffects = -- * From Locked mkValidFromLockedBundle :: Word -> Word -> ParameterBundle -mkValidFromLockedBundle nCosigners nEffects = mkValidToNextStateBundle nCosigners nEffects Locked +mkValidFromLockedBundle nCosigners nEffects = + mkValidToNextStateBundle nCosigners nEffects Locked mkMintGATsForWrongEffectsBundle :: Word -> diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index dff8990d..3d2c8cbf 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -166,6 +166,7 @@ scriptCredentials = ScriptCredential <$> validatorHashes -------------------------------------------------------------------------------- +-- | Turn the given list in to groups which have the given length. groupsOfN :: Int -> [a] -> [[a]] groupsOfN _ [] = [] groupsOfN n xs = @@ -181,6 +182,7 @@ groupsOfN n xs = -------------------------------------------------------------------------------- +-- | Optionally apply a modifier to the given 'UTXO'. withOptional :: (a -> UTXO -> UTXO) -> Maybe a -> @@ -189,6 +191,9 @@ withOptional :: withOptional f (Just b) = f b withOptional _ _ = id +{- | Given the builder generator and the parameters, create a 'ScriptContext' + that spends the UTXO that referenced by the given 'TxOutRef'. +-} mkSpending :: forall ps. (forall b. (Monoid b, Builder b) => ps -> b) -> @@ -199,6 +204,9 @@ mkSpending mkBuilder ps oref = buildSpendingUnsafe $ mkBuilder ps <> withSpendingOutRef oref +{- | Given the builder generator and the parameters, create a 'ScriptContext' + that mints the token of the given currency symbol. +-} mkMinting :: forall ps. (forall b. (Monoid b, Builder b) => ps -> b) -> From a6280b05a7218b02e7a475a72f22cfb6f76d2637 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 26 Jul 2022 21:45:35 +0800 Subject: [PATCH 53/78] fix typos --- agora/Agora/Governor.hs | 6 +- agora/Agora/Proposal/Time.hs | 6 +- bench.csv | 690 +++++++++++++++++------------------ 3 files changed, 351 insertions(+), 351 deletions(-) diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index db5157c1..ae7acef1 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -36,7 +36,7 @@ import Agora.Proposal.Time ( PProposalTimingConfig, ProposalTimingConfig, pisMaxTimeRangeWidthValid, - pisProposalTimeingConfigValid, + pisProposalTimingConfigValid, ) import Agora.SafeMoney (GTTag) import Data.Tagged (Tagged (..)) @@ -254,10 +254,10 @@ pisGovernorDatumValid = phoistAcyclic $ pure $ foldr1 (#&&) - [ ptraceIfFalse "thersholds valid" $ + [ ptraceIfFalse "thresholds valid" $ pisProposalThresholdsValid # datumF.proposalThresholds , ptraceIfFalse "timings valid" $ - pisProposalTimeingConfigValid # datumF.proposalTimings + pisProposalTimingConfigValid # datumF.proposalTimings , ptraceIfFalse "time range valid" $ pisMaxTimeRangeWidthValid # datumF.createProposalTimeRangeMaxWidth ] diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index 44c4cf47..b2728340 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -26,7 +26,7 @@ module Agora.Proposal.Time ( isVotingPeriod, isLockingPeriod, isExecutionPeriod, - pisProposalTimeingConfigValid, + pisProposalTimingConfigValid, pisMaxTimeRangeWidthValid, ) where @@ -280,8 +280,8 @@ deriving via @since 0.2.0 -} -pisProposalTimeingConfigValid :: Term s (PProposalTimingConfig :--> PBool) -pisProposalTimeingConfigValid = phoistAcyclic $ +pisProposalTimingConfigValid :: Term s (PProposalTimingConfig :--> PBool) +pisProposalTimingConfigValid = phoistAcyclic $ plam $ \conf -> unTermCont $ do confF <- pletAllC conf diff --git a/bench.csv b/bench.csv index 58ff462f..1b0cc51d 100644 --- a/bench.csv +++ b/bench.csv @@ -30,544 +30,544 @@ Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2005 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5407 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,235543219,658307,8363 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,118915099,307672,5215 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,124051829,322526,5215 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,670567262,1868918,10993 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,549710287,1450080,7725 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,554847017,1464934,7725 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1328689536,3642435,14281 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1097682628,2902865,10862 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,118915099,307672,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,118915099,307672,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,118915099,307672,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,118915099,307672,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,549710287,1450080,7725 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,549710287,1450080,7725 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,549710287,1450080,7725 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1097682628,2902865,10862 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1097682628,2902865,10862 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1097682628,2902865,10862 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1102819358,2917719,10862 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,124051829,322526,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,124051829,322526,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,124051829,322526,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,124051829,322526,5215 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,554847017,1464934,7725 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,554847017,1464934,7725 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,554847017,1464934,7725 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1102819358,2917719,10862 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1102819358,2917719,10862 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1102819358,2917719,10862 Agora/Proposal/validator/voting/legal/proposal,253679830,711967,8345 -Agora/Proposal/validator/voting/legal/stake,136152299,356425,5241 +Agora/Proposal/validator/voting/legal/stake,141289029,371279,5241 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,248836586,692474,8858 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,129324200,334140,5551 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,134460930,348994,5551 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,292528703,801889,8867 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5558 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,5558 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340029740,936478,10019 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,458676371,1153000,10085 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474044919,1182110,10085 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3653 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,243781894,681753,8860 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5553 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,5553 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279014261,764750,8861 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,5554 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,5554 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280145239,767154,8861 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,5554 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,129324200,334140,5551 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,5558 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,5554 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,134460930,348994,5551 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,5558 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,6710 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,129324200,334140,5551 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,130046736,336404,5554 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,130046736,336404,5562 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,129324200,334140,5553 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5558 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,458676371,1153000,10085 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,134460930,348994,5551 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,135183466,351258,5554 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135183466,351258,5562 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,134460930,348994,5553 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,5558 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,191489761,484291,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474044919,1182110,10085 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,458676371,1153000,10086 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474044919,1182110,10086 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3654 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,315778694,863869,9307 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,5998 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,178389602,458680,5998 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348113422,960681,10246 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,6937 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,6937 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3880 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340029740,936478,9841 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,180556487,455715,6532 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,191489761,484291,6532 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340029740,936478,10013 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,180556487,455715,6704 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,191489761,484291,6704 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3647 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340029740,936478,10019 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,180556487,455715,6710 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,191489761,484291,6710 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3653 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294237934,810566,9447 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,129324200,334140,5944 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,134460930,348994,5944 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,341624937,929969,9456 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5951 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,5951 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,385431088,1054570,10609 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,478594542,1207445,10479 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,493963090,1236555,10479 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4047 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289183242,799845,9449 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5946 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,5946 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,324415609,882842,9450 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,5947 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,5947 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,325546587,885246,9450 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,5947 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,129324200,334140,5944 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,5951 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,5947 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,134460930,348994,5944 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,5951 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7104 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,129324200,334140,5944 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,130046736,336404,5947 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,130046736,336404,5959 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,129324200,334140,5946 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5951 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,478594542,1207445,10479 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,134460930,348994,5944 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,135183466,351258,5947 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135183466,351258,5959 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,134460930,348994,5946 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,5951 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,493963090,1236555,10479 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,478594542,1207445,10480 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,493963090,1236555,10480 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4048 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361180042,981961,9897 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6392 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,178389602,458680,6392 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,393514770,1078773,10836 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7331 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7331 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4274 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,385431088,1054570,10430 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,180556487,455715,6925 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,191489761,484291,6925 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,385431088,1054570,10603 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,180556487,455715,7098 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,191489761,484291,7098 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4041 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,385431088,1054570,10609 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,180556487,455715,7104 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,191489761,484291,7104 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4047 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430441978,1164842,11219 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,129324200,334140,7125 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,134460930,348994,7125 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,488913639,1314209,11228 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7132 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,7132 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,521635132,1408846,12380 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,538349055,1370780,11659 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,553717603,1399890,11659 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5227 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425387286,1154121,11221 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7127 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,7127 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,460619653,1237118,11222 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,7128 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,7128 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,461750631,1239522,11222 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,7128 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,129324200,334140,7125 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,7132 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,7128 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,134460930,348994,7125 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,7132 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,8284 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,129324200,334140,7125 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,130046736,336404,7128 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,130046736,336404,7152 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,129324200,334140,7127 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7132 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,538349055,1370780,11659 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,134460930,348994,7125 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,135183466,351258,7128 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135183466,351258,7152 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,134460930,348994,7127 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,7132 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,191489761,484291,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,553717603,1399890,11659 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,538349055,1370780,11660 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,553717603,1399890,11660 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5228 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,497384086,1336237,11669 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,7573 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,178389602,458680,7573 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,529718814,1433049,12607 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,8511 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,8511 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5454 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,521635132,1408846,12202 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,180556487,455715,8106 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,191489761,484291,8106 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,521635132,1408846,12374 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,180556487,455715,8278 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,191489761,484291,8278 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5221 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,521635132,1408846,12380 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,180556487,455715,8284 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,191489761,484291,8284 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5227 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,612521495,1742349,11604 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,546746396,1437604,8176 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,551883126,1452458,8176 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,314898051,863953,9224 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,5794 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,5794 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,362399088,998542,10376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,465864319,1173688,10322 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,481232867,1202798,10322 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3890 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266151242,743817,9217 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,5789 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,5789 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,301383609,826814,9218 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,5790 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,5790 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,302514587,829218,9218 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,5790 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,546746396,1437604,8176 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,5794 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,5790 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,551883126,1452458,8176 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,5794 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,6946 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,559378094,1474482,8176 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,130046736,336404,5790 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,130046736,336404,5798 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,8178 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,5794 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,465864319,1173688,10322 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,564514824,1489336,8176 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,135183466,351258,5790 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135183466,351258,5798 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,551883126,1452458,8178 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,5794 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,191489761,484291,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,481232867,1202798,10322 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,465864319,1173688,10323 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,481232867,1202798,10323 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3891 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338148042,925933,9664 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,6234 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,178389602,458680,6234 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,370482770,1022745,10603 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7173 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7173 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4117 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,362399088,998542,10198 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,180556487,455715,6768 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,191489761,484291,6768 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,362399088,998542,10370 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,180556487,455715,6940 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,191489761,484291,6940 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3884 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,362399088,998542,10376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,180556487,455715,6946 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,191489761,484291,6946 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3890 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,657922843,1860441,12195 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,546746396,1437604,8570 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,551883126,1452458,8570 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,363994285,992033,9814 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6187 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,6187 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,407800436,1116634,10967 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,485782490,1228133,10716 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,501151038,1257243,10716 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4284 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311552590,861909,9807 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6182 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,6182 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,346784957,944906,9808 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,6183 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,6183 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,347915935,947310,9808 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,6183 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,546746396,1437604,8570 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,6187 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,6183 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,551883126,1452458,8570 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,6187 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7340 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,559378094,1474482,8570 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,130046736,336404,6183 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,130046736,336404,6195 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,8572 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6187 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,485782490,1228133,10716 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,564514824,1489336,8570 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,135183466,351258,6183 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135183466,351258,6195 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,551883126,1452458,8572 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,6187 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,501151038,1257243,10716 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,485782490,1228133,10717 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,501151038,1257243,10717 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4285 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,383549390,1044025,10255 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6628 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,178389602,458680,6628 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,415884118,1140837,11194 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7567 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7567 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4511 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,407800436,1116634,10788 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,180556487,455715,7161 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,191489761,484291,7161 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,407800436,1116634,10961 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,180556487,455715,7334 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,191489761,484291,7334 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4278 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,407800436,1116634,10967 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,180556487,455715,7340 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,191489761,484291,7340 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4284 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,794126887,2214717,13965 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,546746396,1437604,9750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,551883126,1452458,9750 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,511282987,1376273,11585 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,7368 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544004480,1470910,12737 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,545537003,1391468,11896 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560905551,1420578,11896 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5464 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,447756634,1216185,11578 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7363 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,7363 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,482989001,1299182,11579 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,7364 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,7364 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484119979,1301586,11579 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,7364 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,546746396,1437604,9750 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,7368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,7364 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,551883126,1452458,9750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,7368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,8520 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,559378094,1474482,9750 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,130046736,336404,7364 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,130046736,336404,7388 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,546746396,1437604,9752 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,545537003,1391468,11896 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,564514824,1489336,9750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,135183466,351258,7364 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135183466,351258,7388 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,551883126,1452458,9752 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,7368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,191489761,484291,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560905551,1420578,11896 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,545537003,1391468,11897 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,560905551,1420578,11897 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5465 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,519753434,1398301,12026 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,7809 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,178389602,458680,7809 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552088162,1495113,12964 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,8747 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,8747 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5691 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544004480,1470910,12559 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,180556487,455715,8342 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,191489761,484291,8342 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544004480,1470910,12731 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,180556487,455715,8514 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,191489761,484291,8514 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5458 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544004480,1470910,12737 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,180556487,455715,8520 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,191489761,484291,8520 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5464 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1145091822,3281720,15043 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1161583697,3085109,11464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1166720427,3099963,11464 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,342859736,941533,9676 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6095 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,6095 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,390360773,1076122,10828 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474849254,1199548,10623 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,490217802,1228658,10623 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4191 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294112927,821397,9669 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6090 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,6090 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,329345294,904394,9670 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,6091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,6091 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,330476272,906798,9670 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,6091 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1161583697,3085109,11464 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,6095 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,6091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1166720427,3099963,11464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,6095 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7247 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1108833023,2931399,11464 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,130046736,336404,6091 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,130046736,336404,6099 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,11466 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6095 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474849254,1199548,10623 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1113969753,2946253,11464 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,135183466,351258,6091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135183466,351258,6099 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1166720427,3099963,11466 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,6095 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,490217802,1228658,10623 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474849254,1199548,10624 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,490217802,1228658,10624 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4192 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366109727,1003513,10117 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,167456328,430104,6536 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,178389602,458680,6536 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,398444455,1100325,11055 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7474 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7474 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4418 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,390360773,1076122,10650 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,180556487,455715,7069 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,191489761,484291,7069 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,390360773,1076122,10822 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,180556487,455715,7241 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,191489761,484291,7241 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4185 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,390360773,1076122,10828 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,180556487,455715,7247 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,191489761,484291,7247 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4191 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1190493170,3399812,15632 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1161583697,3085109,11857 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1166720427,3099963,11857 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,391955970,1069613,10265 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,6488 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,6488 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,435762121,1194214,11418 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,494767425,1253993,11017 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,510135973,1283103,11017 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4585 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339514275,939489,10258 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,6483 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,6483 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,374746642,1022486,10259 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,6484 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,6484 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,375877620,1024890,10259 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,6484 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1161583697,3085109,11857 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,6488 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,6484 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1166720427,3099963,11857 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,6488 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7641 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1108833023,2931399,11857 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,130046736,336404,6484 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,130046736,336404,6496 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,11859 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,6488 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,180556487,455715,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,494767425,1253993,11017 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1113969753,2946253,11857 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,135183466,351258,6484 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135183466,351258,6496 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1166720427,3099963,11859 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,6488 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,510135973,1283103,11017 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,494767425,1253993,11018 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,510135973,1283103,11018 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4586 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,411511075,1121605,10706 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,167456328,430104,6929 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,178389602,458680,6929 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,443845803,1218417,11645 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,7868 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7868 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4812 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,435762121,1194214,11239 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,180556487,455715,7462 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,191489761,484291,7462 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,435762121,1194214,11412 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,180556487,455715,7635 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,191489761,484291,7635 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4579 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,435762121,1194214,11418 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,180556487,455715,7641 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,191489761,484291,7641 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4585 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1326697214,3754088,17404 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1161583697,3085109,13038 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1166720427,3099963,13038 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,539244672,1453853,12037 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,130046736,336404,7669 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,7669 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,571966165,1548490,13190 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,180556487,455715,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,554521938,1417328,12198 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,569890486,1446438,12198 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5765 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,475718319,1293765,12030 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,130046736,336404,7664 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,7664 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,510950686,1376762,12031 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,130046736,336404,7665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,7665 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512081664,1379166,12031 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,130046736,336404,7665 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1161583697,3085109,13038 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,130046736,336404,7669 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,180556487,455715,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,7665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1166720427,3099963,13038 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,7669 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,8822 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1108833023,2931399,13038 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,130046736,336404,7665 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,130046736,336404,7689 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1161583697,3085109,13040 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,130046736,336404,7669 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,180556487,455715,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,554521938,1417328,12198 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1113969753,2946253,13038 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,135183466,351258,7665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135183466,351258,7689 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1166720427,3099963,13040 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,7669 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,191489761,484291,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,569890486,1446438,12198 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,554521938,1417328,12199 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,569890486,1446438,12199 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5766 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,547715119,1475881,12478 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,167456328,430104,8110 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,178389602,458680,8110 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580049847,1572693,13416 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,184104596,462942,9048 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,9048 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5992 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,571966165,1548490,13011 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,180556487,455715,8643 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,191489761,484291,8643 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,571966165,1548490,13184 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,180556487,455715,8816 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,191489761,484291,8816 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5759 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,571966165,1548490,13190 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,180556487,455715,8822 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,191489761,484291,8822 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5765 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,125083340,324576,5221 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,130220070,339430,5221 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,236574652,665124,8326 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,128314586,333630,5237 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,133451316,348484,5237 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250046859,705066,8337 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,125083340,324576,5219 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,130220070,339430,5219 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204366787,584979,8323 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,125083340,324576,5235 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,130220070,339430,5235 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,212801044,609883,8335 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,125083340,324576,5225 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,130220070,339430,5225 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,205682939,588863,8330 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,125083340,324576,5225 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,130220070,339430,5225 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,205682939,588863,8330 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,128314586,333630,5241 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,133451316,348484,5241 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,219686722,630197,8341 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,259870480,666572,7313 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,297011418,750706,7313 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379215900,1077788,10394 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,276026710,711842,7390 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,313167648,795976,7390 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,444744435,1269042,10446 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,259870480,666572,7303 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,297011418,750706,7303 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,312447599,902835,10387 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,259870480,666572,7384 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,297011418,750706,7384 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,350836580,1014587,10440 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,259870480,666572,7334 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,297011418,750706,7334 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,317916859,917911,10415 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,259870480,666572,7334 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,297011418,750706,7334 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,317916859,917911,10415 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,276026710,711842,7410 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,313167648,795976,7410 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,383976970,1110557,10466 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,428354405,1094067,9929 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,505500603,1264801,9929 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,557517460,1593618,12980 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,460666865,1184607,10080 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,537813063,1355341,10080 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688116405,1974012,13081 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,428354405,1094067,9909 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,505500603,1264801,9909 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,447548614,1300155,12968 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,428354405,1094067,10069 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,505500603,1264801,10069 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523381000,1520467,13070 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,428354405,1094067,9969 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,505500603,1264801,9969 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458209259,1329221,13020 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,428354405,1094067,9969 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,505500603,1264801,9969 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458209259,1329221,13020 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,460666865,1184607,10120 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,537813063,1355341,10120 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589339780,1711007,13121 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1506651525,3830035,26759 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1839831387,4555009,26759 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1698647444,4894930,29599 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1642363857,4210303,27446 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1975543719,4935277,27446 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2245697013,6485820,30057 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1506651525,3830035,26674 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1839831387,4555009,26674 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312195110,3843003,29554 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1506651525,3830035,27385 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1839831387,4555009,27385 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1627665288,4758099,29996 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1506651525,3830035,26927 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1839831387,4555009,26927 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356080619,3961605,29767 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1506651525,3830035,26927 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1839831387,4555009,26927 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356080619,3961605,29767 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1642363857,4210303,27615 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1975543719,4935277,27615 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1903661764,5553887,30226 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",125083340,324576,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",125083340,324576,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",125083340,324576,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",120712754,312726,5223 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",120712754,312726,5223 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",120712754,312726,5223 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",128314586,333630,5237 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",128314586,333630,5237 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",128314586,333630,5237 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",117481508,303672,5203 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",117481508,303672,5203 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,117481508,303672,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,125083340,324576,5219 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,125083340,324576,5219 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,125083340,324576,5219 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,125083340,324576,5217 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",259870480,666572,7313 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",259870480,666572,7313 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",259870480,666572,7313 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",253221214,649130,7320 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",253221214,649130,7320 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",253221214,649130,7320 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",276026710,711842,7390 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",276026710,711842,7390 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",276026710,711842,7390 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",237064984,603860,7231 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",237064984,603860,7231 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,237064984,603860,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,259870480,666572,7303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,259870480,666572,7303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,259870480,666572,7303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,259870480,666572,7293 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",428354405,1094067,9929 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",428354405,1094067,9929 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",428354405,1094067,9929 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",418856789,1069635,9940 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",418856789,1069635,9940 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",418856789,1069635,9940 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",460666865,1184607,10080 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",460666865,1184607,10080 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",460666865,1184607,10080 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",386544329,979095,9766 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",386544329,979095,9766 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,386544329,979095,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,428354405,1094067,9909 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,428354405,1094067,9909 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,428354405,1094067,9909 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,428354405,1094067,9888 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1506651525,3830035,26759 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1506651525,3830035,26759 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1506651525,3830035,26759 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1478924469,3760867,26820 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1478924469,3760867,26820 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1478924469,3760867,26820 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1642363857,4210303,27446 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1642363857,4210303,27446 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1642363857,4210303,27446 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1343212137,3380599,26046 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1343212137,3380599,26046 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1343212137,3380599,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1506651525,3830035,26674 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1506651525,3830035,26674 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1506651525,3830035,26674 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1506651525,3830035,26590 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",130220070,339430,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",130220070,339430,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",130220070,339430,5221 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",125849484,327580,5223 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",125849484,327580,5223 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",125849484,327580,5223 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",133451316,348484,5237 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",133451316,348484,5237 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",133451316,348484,5237 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",122618238,318526,5203 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",122618238,318526,5203 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,122618238,318526,5203 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,130220070,339430,5219 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,130220070,339430,5219 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,130220070,339430,5219 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,130220070,339430,5217 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",297011418,750706,7313 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",297011418,750706,7313 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",297011418,750706,7313 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",290362152,733264,7320 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",290362152,733264,7320 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",290362152,733264,7320 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",313167648,795976,7390 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",313167648,795976,7390 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",313167648,795976,7390 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",274205922,687994,7231 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",274205922,687994,7231 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,274205922,687994,7231 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,297011418,750706,7303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,297011418,750706,7303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,297011418,750706,7303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,297011418,750706,7293 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",505500603,1264801,9929 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",505500603,1264801,9929 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",505500603,1264801,9929 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",496002987,1240369,9940 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",496002987,1240369,9940 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",496002987,1240369,9940 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",537813063,1355341,10080 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",537813063,1355341,10080 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",537813063,1355341,10080 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",463690527,1149829,9766 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",463690527,1149829,9766 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,463690527,1149829,9766 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,505500603,1264801,9909 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,505500603,1264801,9909 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,505500603,1264801,9909 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,505500603,1264801,9888 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1839831387,4555009,26759 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1839831387,4555009,26759 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1839831387,4555009,26759 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1812104331,4485841,26820 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1812104331,4485841,26820 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1812104331,4485841,26820 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1975543719,4935277,27446 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1975543719,4935277,27446 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1975543719,4935277,27446 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1676391999,4105573,26046 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1676391999,4105573,26046 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1676391999,4105573,26046 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1839831387,4555009,26674 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1839831387,4555009,26674 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1839831387,4555009,26674 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1839831387,4555009,26590 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 From fc81025796bff3ef8e500358ecb6ab312baaf52b Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 26 Jul 2022 22:15:01 +0800 Subject: [PATCH 54/78] update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index a26e5e76..2b5e3c71 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ This format is based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0). ### Modified +- Fixed bug that checks the proposal thresholds in an incorrect way. Added negative tests for the governor scripts. + + Included by [#146](https://github.com/Liqwid-Labs/agora/pull/146). + - Draft phase and cosigning for Proposals. Included by [#136](https://github.com/Liqwid-Labs/agora/pull/136). From 7c36cd95ae5ed2a8ba0b2d64388c7c0d83fbbc4a Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 25 Jul 2022 17:59:43 +0800 Subject: [PATCH 55/78] add `pmaybe` and `pmaybeData` utils --- agora/Agora/Utils.hs | 29 +++++++++++++++++++++++++++++ 1 file changed, 29 insertions(+) diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 166451db..21e35582 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -24,6 +24,8 @@ module Agora.Utils ( pltAsData, pon, withBuiltinPairAsData, + pmaybeData, + pmaybe, ) where import Plutarch.Api.V1 ( @@ -240,3 +242,30 @@ withBuiltinPairAsData f p = let a = pfromData $ pfstBuiltin # p b = pfromData $ psndBuiltin # p in f a b + +{- | Plutarch version of 'Data.Maybe.maybe'. Take a default value and a function + @f@. If the given 'PMaybe' value is @'PJust' x@, apply the function @f@ to + @x@, otherewise the default value will be retuned. + + @since 0.2.0 +-} +pmaybe :: + forall (a :: PType) (b :: PType) (s :: S). + Term s (b :--> (a :--> b) :--> PMaybe a :--> b) +pmaybe = phoistAcyclic $ + plam $ \n f m -> pmatch m $ \case + PJust x -> f # x + _ -> n + +{- | Special version of 'pmaybe' that works with 'PMaybedata'. + + @since 0.2.0 +-} +pmaybeData :: + forall (a :: PType) (b :: PType) (s :: S). + PIsData a => + Term s (b :--> (a :--> b) :--> PMaybeData a :--> b) +pmaybeData = phoistAcyclic $ + plam $ \n f m -> pmatch m $ \case + PDJust ((pfield @"_0" #) -> x) -> f # x + _ -> n \ No newline at end of file From 2d6e8b4c4e5e599a01ef38d91c7d5d555ae04644 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 25 Jul 2022 18:37:22 +0800 Subject: [PATCH 56/78] allow delegating stake for voting --- agora-specs/Sample/Proposal/Advance.hs | 1 + agora-specs/Sample/Proposal/Cosign.hs | 2 +- agora-specs/Sample/Proposal/Create.hs | 1 + agora-specs/Sample/Proposal/UnlockStake.hs | 1 + agora-specs/Sample/Proposal/Vote.hs | 1 + agora-specs/Sample/Stake.hs | 6 +- agora-specs/Spec/Stake.hs | 7 +- agora/Agora/Proposal/Scripts.hs | 2 + agora/Agora/Stake.hs | 13 + agora/Agora/Stake/Scripts.hs | 67 +- agora/Agora/Utils.hs | 2 +- bench.csv | 1132 ++++++++++---------- 12 files changed, 650 insertions(+), 585 deletions(-) diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 91fa17d7..2039f562 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -352,6 +352,7 @@ mkStakeInputDatums ps = StakeDatum { stakedAmount = Tagged ps.perStakeGTs , owner = "" + , delegatedTo = Nothing , lockedBy = [] } in (\owner -> template {owner = owner}) diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index 4922c041..04535339 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -130,7 +130,7 @@ mkProposalOutputDatum ps = -- | Create all the input stakes given the parameters. mkStakeInputDatums :: Parameters -> [StakeDatum] -mkStakeInputDatums = fmap (\pk -> StakeDatum perStakedGTs pk []) . newCosigners +mkStakeInputDatums = fmap (\pk -> StakeDatum perStakedGTs pk Nothing []) . newCosigners -- | Create a 'TxInfo' that tries to cosign a proposal with new cosigners. cosign :: forall b. CombinableBuilder b => Parameters -> b diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index 6ec1fac2..4dd15e2a 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -185,6 +185,7 @@ mkStakeInputDatum ps = in StakeDatum { stakedAmount = stakedGTs , owner = stakeOwner + , delegatedTo = Nothing , lockedBy = locks } diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index e5b47d6d..a664d4e2 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -177,6 +177,7 @@ mkStakeInputDatum ps = StakeDatum { stakedAmount = defStakedGTs , owner = defOwner + , delegatedTo = Nothing , lockedBy = mkInputStakeLocks ps } diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index 765cd823..0b28b0a8 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -129,6 +129,7 @@ mkStakeInputDatum params = StakeDatum { stakedAmount = Tagged params.voteCount , owner = stakeOwner + , delegatedTo = Nothing , lockedBy = existingLocks } diff --git a/agora-specs/Sample/Stake.hs b/agora-specs/Sample/Stake.hs index ba1a8354..ee60d447 100644 --- a/agora-specs/Sample/Stake.hs +++ b/agora-specs/Sample/Stake.hs @@ -76,7 +76,7 @@ stakeCreation :: ScriptContext stakeCreation = let st = Value.assetClassValue stakeAssetClass 1 -- Stake ST datum :: StakeDatum - datum = StakeDatum 424242424242 signer [] + datum = StakeDatum 424242424242 signer Nothing [] builder :: MintingBuilder builder = @@ -96,7 +96,7 @@ stakeCreation = stakeCreationWrongDatum :: ScriptContext stakeCreationWrongDatum = let datum :: Datum - datum = Datum (toBuiltinData $ StakeDatum 4242424242424242 signer []) -- Too much GT + datum = Datum (toBuiltinData $ StakeDatum 4242424242424242 signer Nothing []) -- Too much GT in ScriptContext { scriptContextTxInfo = stakeCreation.scriptContextTxInfo {txInfoData = [("", datum)]} , scriptContextPurpose = Minting stakeSymbol @@ -128,7 +128,7 @@ stakeDepositWithdraw :: DepositWithdrawExample -> ScriptContext stakeDepositWithdraw config = let st = Value.assetClassValue stakeAssetClass 1 -- Stake ST stakeBefore :: StakeDatum - stakeBefore = StakeDatum config.startAmount signer [] + stakeBefore = StakeDatum config.startAmount signer Nothing [] stakeAfter :: StakeDatum stakeAfter = stakeBefore {stakedAmount = stakeBefore.stakedAmount + config.delta} diff --git a/agora-specs/Spec/Stake.hs b/agora-specs/Spec/Stake.hs index e8f0c78a..7c395978 100644 --- a/agora-specs/Spec/Stake.hs +++ b/agora-specs/Spec/Stake.hs @@ -15,6 +15,7 @@ import Agora.Stake ( StakeRedeemer (DepositWithdraw), ) import Agora.Stake.Scripts (stakePolicy, stakeValidator) +import Data.Maybe (Maybe (..)) import Sample.Stake ( DepositWithdrawExample ( DepositWithdrawExample, @@ -67,19 +68,19 @@ specs = [ validatorSucceedsWith "stakeDepositWithdraw deposit" (stakeValidator Stake.stake) - (toDatum $ StakeDatum 100_000 signer []) + (toDatum $ StakeDatum 100_000 signer Nothing []) (toDatum $ DepositWithdraw 100_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = 100_000}) , validatorSucceedsWith "stakeDepositWithdraw withdraw" (stakeValidator Stake.stake) - (toDatum $ StakeDatum 100_000 signer []) + (toDatum $ StakeDatum 100_000 signer Nothing []) (toDatum $ DepositWithdraw $ negate 100_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = negate 100_000}) , validatorFailsWith "stakeDepositWithdraw negative GT" (stakeValidator Stake.stake) - (toDatum $ StakeDatum 100_000 signer []) + (toDatum $ StakeDatum 100_000 signer Nothing []) (toDatum $ DepositWithdraw 1_000_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = negate 1_000_000}) ] diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 247b56e2..d79e508c 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -511,6 +511,7 @@ proposalValidator proposal = PStakeDatum ( #stakedAmount .= stakeInF.stakedAmount .& #owner .= stakeInF.owner + .& #delegatedTo .= stakeInF.delegatedTo .& #lockedBy .= pdata expectedProposalLocks ) @@ -588,6 +589,7 @@ proposalValidator proposal = PStakeDatum ( #stakedAmount .= stakeInF.stakedAmount .& #owner .= stakeInF.owner + .& #delegatedTo .= stakeInF.delegatedTo .& #lockedBy .= pdata stakeOutputLocks ) diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 0dff631d..46e1237a 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -38,6 +38,7 @@ import Data.Tagged (Tagged (..)) import GHC.Generics qualified as GHC import Generics.SOP (Generic, HasDatatypeInfo, I (I)) import Plutarch.Api.V1 ( + PMaybeData, PPubKeyHash, ) import Plutarch.DataRepr ( @@ -170,6 +171,11 @@ data StakeRedeemer | -- | The owner can consume stake if nothing is changed about it. -- If the proposal token moves, this is equivalent to the owner consuming it. WitnessStake + | -- | The owner can delegate the stake to another user, allowing the + -- delegate to vote on prooposals with the stake. + DelegateTo PubKeyHash + | -- | Revoke the existing delegation. + ClearDelegate deriving stock (Show, GHC.Generic) PlutusTx.makeIsDataIndexed @@ -179,6 +185,8 @@ PlutusTx.makeIsDataIndexed , ('PermitVote, 2) , ('RetractVotes, 3) , ('WitnessStake, 4) + , ('DelegateTo, 5) + , ('ClearDelegate, 6) ] {- | Haskell-level datum for Stake scripts. @@ -194,6 +202,8 @@ data StakeDatum = StakeDatum -- -- TODO Support for MultiSig/Scripts is tracked here: -- https://github.com/Liqwid-Labs/agora/issues/45 + , delegatedTo :: Maybe PubKeyHash + -- ^ To whom this stake has been delegated. , lockedBy :: [ProposalLock] -- ^ The current proposals locking this stake. This field must be empty -- for the stake to be usable for deposits and withdrawals. @@ -221,6 +231,7 @@ newtype PStakeDatum (s :: S) = PStakeDatum ( PDataRecord '[ "stakedAmount" ':= PDiscrete GTTag , "owner" ':= PPubKeyHash + , "delegatedTo" ':= PMaybeData PPubKeyHash , "lockedBy" ':= PBuiltinList (PAsData PProposalLock) ] ) @@ -277,6 +288,8 @@ data PStakeRedeemer (s :: S) | PPermitVote (Term s (PDataRecord '[])) | PRetractVotes (Term s (PDataRecord '[])) | PWitnessStake (Term s (PDataRecord '[])) + | PDelegateTo (Term s (PDataRecord '["pkh" ':= PPubKeyHash])) + | PClearDelegate (Term s (PDataRecord '[])) deriving stock ( -- | @since 0.1.0 GHC.Generic diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 50a3ddf5..0fa20d62 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -10,12 +10,7 @@ module Agora.Stake.Scripts (stakePolicy, stakeValidator) where import Agora.SafeMoney (GTTag) import Agora.Stake ( PStakeDatum (PStakeDatum), - PStakeRedeemer ( - PDepositWithdraw, - PDestroy, - PPermitVote, - PRetractVotes - ), + PStakeRedeemer (..), Stake (gtClassRef, proposalSTClass), StakeRedeemer (WitnessStake), pstakeLocked, @@ -23,6 +18,7 @@ import Agora.Stake ( import Agora.Utils ( mustBePJust, mustFindDatum', + pmaybeData, pvalidatorHashToTokenName, ) import Data.Function (on) @@ -31,6 +27,7 @@ import Plutarch.Api.V1 ( AmountGuarantees (Positive), PCredential (PPubKeyCredential, PScriptCredential), PDatumHash, + PMaybeData (..), PMintingPolicy, PScriptPurpose (PMinting, PSpending), PTokenName, @@ -44,6 +41,7 @@ import Plutarch.Api.V1 ( import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf, pvalueOf) import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, ptxSignedBy, pvalueSpent) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pgeqByClass', pgeqBySymbol, psymbolValueOf) +import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.List (pmapMaybe, pmsortBy) import Plutarch.Extra.Maybe (pfromDJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) @@ -239,7 +237,7 @@ stakeValidator stake = -- TODO: Use PTryFrom let stakeDatum' :: Term _ PStakeDatum stakeDatum' = pfromData $ punsafeCoerce datum - stakeDatum <- pletFieldsC @'["owner", "stakedAmount", "lockedBy"] stakeDatum' + stakeDatum <- pletAllC stakeDatum' PSpending txOutRef <- pmatchC $ pfromData ctx.purpose @@ -251,7 +249,14 @@ stakeValidator stake = resolvedF <- pletFieldsC @'["address", "value", "datumHash"] resolved -- Whether the owner signs this transaction or not. - ownerSignsTransaction <- pletC $ ptxSignedBy # txInfoF.signatories # stakeDatum.owner + signedBy <- pletC $ ptxSignedBy # txInfoF.signatories + + ownerSignsTransaction <- pletC $ signedBy # stakeDatum.owner + delegateSignsTransaction <- + pletC $ + pmaybeData # pconstant False + # plam ((signedBy #) . pdata) + # stakeDatum.delegatedTo stCurrencySymbol <- pletC $ @@ -378,10 +383,36 @@ stakeValidator stake = PStakeDatum ( #stakedAmount .= stakeDatum.stakedAmount .& #owner .= stakeDatum.owner + .& #delegatedTo .= stakeDatum.delegatedTo .& #lockedBy .= pfield @"lockedBy" # stakeOut ) in stakeOut #== templateStakeDatum + setDelegate <- pletC $ + plam $ \maybePkh -> unTermCont $ do + pguardC + "Owner signs this transaction" + ownerSignsTransaction + + pguardC "A UTXO must exist with the correct output" $ + let correctOutputDatum = + stakeOut + #== mkRecordConstr + PStakeDatum + ( #stakedAmount .= stakeDatum.stakedAmount + .& #owner .= stakeDatum.owner + .& #delegatedTo .= pdata maybePkh + .& #lockedBy .= stakeDatum.lockedBy + ) + valueCorrect = ownOutputValueUnchanged + in foldl1 + (#&&) + [ ptraceIfFalse "valueCorrect" valueCorrect + , ptraceIfFalse "datumCorrect" correctOutputDatum + ] + + pure $ popaque (pconstant ()) + pure $ pmatch stakeRedeemer $ \case PRetractVotes _ -> unTermCont $ do @@ -408,8 +439,8 @@ stakeValidator stake = PPermitVote _ -> unTermCont $ do pguardC - "Owner signs this transaction" - ownerSignsTransaction + "Owner or delegate signs this transaction" + $ ownerSignsTransaction #|| delegateSignsTransaction let proposalTokenMinted = passetClassValueOf # txInfoF.mint # proposalSTClass #== 1 @@ -418,7 +449,6 @@ stakeValidator stake = -- that this is not abused. pguardC "Proposal ST spent or minted" $ proposalTokenMoved #|| proposalTokenMinted - pguardC "A UTXO must exist with the correct output" $ let correctOutputDatum = onlyLocksUpdated valueCorrect = ownOutputValueUnchanged @@ -453,6 +483,7 @@ stakeValidator stake = PStakeDatum ( #stakedAmount .= pdata newStakedAmount .& #owner .= stakeDatum.owner + .& #delegatedTo .= stakeDatum.delegatedTo .& #lockedBy .= stakeDatum.lockedBy ) datumCorrect = stakeOut #== expectedDatum @@ -486,6 +517,20 @@ stakeValidator stake = ] -- pure $ popaque (pconstant ()) + + ------------------------------------------------------------ + + PDelegateTo ((pfield @"pkh" #) -> pkh) -> unTermCont $ do + pguardC "Cannot delegate to the owner" $ + pnot #$ stakeDatum.owner #== pfromData pkh + + pure $ setDelegate #$ pcon $ PDJust $ pdcons @"_0" # pkh #$ pdnil + ------------------------------------------------------------ + + PClearDelegate _ -> + setDelegate #$ pcon $ PDNothing pdnil + ------------------------------------------------------------ + _ -> popaque (pconstant ()) pure $ diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 21e35582..64f49968 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -268,4 +268,4 @@ pmaybeData :: pmaybeData = phoistAcyclic $ plam $ \n f m -> pmatch m $ \case PDJust ((pfield @"_0" #) -> x) -> f # x - _ -> n \ No newline at end of file + _ -> n diff --git a/bench.csv b/bench.csv index 1b0cc51d..9d6770f1 100644 --- a/bench.csv +++ b/bench.csv @@ -2,576 +2,576 @@ name,cpu,mem,size Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8290 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8317 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 -Agora/Stake/policy/stakeCreation,51008580,149029,2522 -Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4753 -Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4741 -Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/legal/governor,324511293,861435,8769 -Agora/Proposal/policy (proposal creation)/legal/stake,153960499,403133,5407 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,5407 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1974 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,324511293,861435,8738 -Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2013 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5415 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2025 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160422991,421241,5437 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153960499,403133,5407 -Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2001 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153960499,403133,5403 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153960499,403133,5407 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153960499,403133,5407 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2005 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153960499,403133,5407 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,235543219,658307,8363 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,124051829,322526,5215 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,670567262,1868918,10993 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,554847017,1464934,7725 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1328689536,3642435,14281 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1102819358,2917719,10862 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,124051829,322526,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,124051829,322526,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,124051829,322526,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,124051829,322526,5215 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,554847017,1464934,7725 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,554847017,1464934,7725 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,554847017,1464934,7725 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1102819358,2917719,10862 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1102819358,2917719,10862 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1102819358,2917719,10862 -Agora/Proposal/validator/voting/legal/proposal,253679830,711967,8345 -Agora/Proposal/validator/voting/legal/stake,141289029,371279,5241 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,248836586,692474,8858 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,134460930,348994,5551 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,292528703,801889,8867 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,5558 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340029740,936478,10019 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474044919,1182110,10085 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,243781894,681753,8860 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,5553 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279014261,764750,8861 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,5554 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280145239,767154,8861 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,5554 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,134460930,348994,5551 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,5558 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,134460930,348994,5551 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,135183466,351258,5554 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135183466,351258,5562 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,134460930,348994,5553 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,5558 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,191489761,484291,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474044919,1182110,10085 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474044919,1182110,10086 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3654 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,315778694,863869,9307 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,178389602,458680,5998 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348113422,960681,10246 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,6937 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3880 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340029740,936478,9841 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,191489761,484291,6532 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340029740,936478,10013 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,191489761,484291,6704 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3647 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340029740,936478,10019 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,191489761,484291,6710 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294237934,810566,9447 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,134460930,348994,5944 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,341624937,929969,9456 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,5951 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,385431088,1054570,10609 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,493963090,1236555,10479 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289183242,799845,9449 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,5946 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,324415609,882842,9450 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,5947 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,325546587,885246,9450 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,5947 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,134460930,348994,5944 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,5951 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,134460930,348994,5944 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,135183466,351258,5947 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135183466,351258,5959 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,134460930,348994,5946 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,5951 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,493963090,1236555,10479 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,493963090,1236555,10480 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4048 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361180042,981961,9897 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,178389602,458680,6392 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,393514770,1078773,10836 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7331 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4274 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,385431088,1054570,10430 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,191489761,484291,6925 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,385431088,1054570,10603 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,191489761,484291,7098 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4041 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,385431088,1054570,10609 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,191489761,484291,7104 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430441978,1164842,11219 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,134460930,348994,7125 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,488913639,1314209,11228 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,7132 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,521635132,1408846,12380 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,553717603,1399890,11659 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425387286,1154121,11221 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,7127 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,460619653,1237118,11222 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,7128 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,461750631,1239522,11222 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,7128 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,134460930,348994,7125 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,7132 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,134460930,348994,7125 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,135183466,351258,7128 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135183466,351258,7152 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,134460930,348994,7127 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,7132 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,191489761,484291,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,553717603,1399890,11659 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,553717603,1399890,11660 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5228 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,497384086,1336237,11669 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,178389602,458680,7573 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,529718814,1433049,12607 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,8511 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5454 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,521635132,1408846,12202 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,191489761,484291,8106 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,521635132,1408846,12374 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,191489761,484291,8278 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5221 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,521635132,1408846,12380 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,191489761,484291,8284 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,612521495,1742349,11604 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,551883126,1452458,8176 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,314898051,863953,9224 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,5794 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,362399088,998542,10376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,481232867,1202798,10322 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266151242,743817,9217 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,5789 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,301383609,826814,9218 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,5790 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,302514587,829218,9218 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,5790 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,551883126,1452458,8176 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,5794 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,564514824,1489336,8176 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,135183466,351258,5790 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135183466,351258,5798 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,551883126,1452458,8178 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,5794 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,191489761,484291,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,481232867,1202798,10322 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,481232867,1202798,10323 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3891 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338148042,925933,9664 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,178389602,458680,6234 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,370482770,1022745,10603 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7173 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4117 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,362399088,998542,10198 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,191489761,484291,6768 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,362399088,998542,10370 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,191489761,484291,6940 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3884 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,362399088,998542,10376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,191489761,484291,6946 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,657922843,1860441,12195 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,551883126,1452458,8570 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,363994285,992033,9814 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,6187 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,407800436,1116634,10967 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,501151038,1257243,10716 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311552590,861909,9807 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,6182 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,346784957,944906,9808 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,6183 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,347915935,947310,9808 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,6183 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,551883126,1452458,8570 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,6187 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,564514824,1489336,8570 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,135183466,351258,6183 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135183466,351258,6195 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,551883126,1452458,8572 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,6187 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,501151038,1257243,10716 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,501151038,1257243,10717 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4285 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,383549390,1044025,10255 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,178389602,458680,6628 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,415884118,1140837,11194 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7567 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4511 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,407800436,1116634,10788 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,191489761,484291,7161 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,407800436,1116634,10961 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,191489761,484291,7334 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4278 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,407800436,1116634,10967 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,191489761,484291,7340 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,794126887,2214717,13965 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,551883126,1452458,9750 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,511282987,1376273,11585 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,7368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544004480,1470910,12737 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560905551,1420578,11896 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,447756634,1216185,11578 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,7363 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,482989001,1299182,11579 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,7364 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484119979,1301586,11579 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,7364 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,551883126,1452458,9750 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,7368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,564514824,1489336,9750 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,135183466,351258,7364 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135183466,351258,7388 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,551883126,1452458,9752 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,7368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,191489761,484291,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560905551,1420578,11896 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,560905551,1420578,11897 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5465 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,519753434,1398301,12026 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,178389602,458680,7809 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552088162,1495113,12964 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,8747 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5691 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544004480,1470910,12559 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,191489761,484291,8342 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544004480,1470910,12731 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,191489761,484291,8514 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5458 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544004480,1470910,12737 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,191489761,484291,8520 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1145091822,3281720,15043 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1166720427,3099963,11464 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,342859736,941533,9676 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,6095 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,390360773,1076122,10828 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,490217802,1228658,10623 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294112927,821397,9669 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,6090 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,329345294,904394,9670 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,6091 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,330476272,906798,9670 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,6091 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1166720427,3099963,11464 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,6095 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1113969753,2946253,11464 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,135183466,351258,6091 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135183466,351258,6099 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1166720427,3099963,11466 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,6095 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,490217802,1228658,10623 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,490217802,1228658,10624 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4192 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366109727,1003513,10117 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,178389602,458680,6536 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,398444455,1100325,11055 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7474 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4418 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,390360773,1076122,10650 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,191489761,484291,7069 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,390360773,1076122,10822 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,191489761,484291,7241 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4185 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,390360773,1076122,10828 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,191489761,484291,7247 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1190493170,3399812,15632 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1166720427,3099963,11857 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,391955970,1069613,10265 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,6488 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,435762121,1194214,11418 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,510135973,1283103,11017 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339514275,939489,10258 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,6483 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,374746642,1022486,10259 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,6484 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,375877620,1024890,10259 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,6484 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1166720427,3099963,11857 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,6488 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1113969753,2946253,11857 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,135183466,351258,6484 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135183466,351258,6496 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1166720427,3099963,11859 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,6488 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,191489761,484291,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,510135973,1283103,11017 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,510135973,1283103,11018 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4586 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,411511075,1121605,10706 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,178389602,458680,6929 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,443845803,1218417,11645 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,7868 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4812 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,435762121,1194214,11239 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,191489761,484291,7462 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,435762121,1194214,11412 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,191489761,484291,7635 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4579 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,435762121,1194214,11418 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,191489761,484291,7641 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1326697214,3754088,17404 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1166720427,3099963,13038 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,539244672,1453853,12037 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135183466,351258,7669 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,571966165,1548490,13190 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,191489761,484291,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,569890486,1446438,12198 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,475718319,1293765,12030 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135183466,351258,7664 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,510950686,1376762,12031 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135183466,351258,7665 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512081664,1379166,12031 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135183466,351258,7665 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1166720427,3099963,13038 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135183466,351258,7669 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,191489761,484291,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1113969753,2946253,13038 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,135183466,351258,7665 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135183466,351258,7689 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1166720427,3099963,13040 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135183466,351258,7669 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,191489761,484291,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,569890486,1446438,12198 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,569890486,1446438,12199 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5766 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,547715119,1475881,12478 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,178389602,458680,8110 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580049847,1572693,13416 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,195037870,491518,9048 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5992 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,571966165,1548490,13011 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,191489761,484291,8643 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,571966165,1548490,13184 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,191489761,484291,8816 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5759 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,571966165,1548490,13190 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,191489761,484291,8822 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5765 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,130220070,339430,5221 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,236574652,665124,8326 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,133451316,348484,5237 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250046859,705066,8337 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,130220070,339430,5219 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204366787,584979,8323 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,130220070,339430,5235 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,212801044,609883,8335 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,130220070,339430,5225 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,205682939,588863,8330 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,130220070,339430,5225 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,205682939,588863,8330 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,133451316,348484,5241 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,219686722,630197,8341 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,297011418,750706,7313 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379215900,1077788,10394 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,313167648,795976,7390 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,444744435,1269042,10446 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,297011418,750706,7303 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,312447599,902835,10387 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,297011418,750706,7384 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,350836580,1014587,10440 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,297011418,750706,7334 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,317916859,917911,10415 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,297011418,750706,7334 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,317916859,917911,10415 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,313167648,795976,7410 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,383976970,1110557,10466 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,505500603,1264801,9929 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,557517460,1593618,12980 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,537813063,1355341,10080 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688116405,1974012,13081 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,505500603,1264801,9909 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,447548614,1300155,12968 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,505500603,1264801,10069 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523381000,1520467,13070 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,505500603,1264801,9969 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458209259,1329221,13020 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,505500603,1264801,9969 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458209259,1329221,13020 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,537813063,1355341,10120 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589339780,1711007,13121 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1839831387,4555009,26759 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1698647444,4894930,29599 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1975543719,4935277,27446 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2245697013,6485820,30057 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1839831387,4555009,26674 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312195110,3843003,29554 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1839831387,4555009,27385 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1627665288,4758099,29996 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1839831387,4555009,26927 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356080619,3961605,29767 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1839831387,4555009,26927 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356080619,3961605,29767 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1975543719,4935277,27615 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1903661764,5553887,30226 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",130220070,339430,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",130220070,339430,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",130220070,339430,5221 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",125849484,327580,5223 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",125849484,327580,5223 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",125849484,327580,5223 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",133451316,348484,5237 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",133451316,348484,5237 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",133451316,348484,5237 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",122618238,318526,5203 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",122618238,318526,5203 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,122618238,318526,5203 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,130220070,339430,5219 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,130220070,339430,5219 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,130220070,339430,5219 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,130220070,339430,5217 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",297011418,750706,7313 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",297011418,750706,7313 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",297011418,750706,7313 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",290362152,733264,7320 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",290362152,733264,7320 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",290362152,733264,7320 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",313167648,795976,7390 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",313167648,795976,7390 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",313167648,795976,7390 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",274205922,687994,7231 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",274205922,687994,7231 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,274205922,687994,7231 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,297011418,750706,7303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,297011418,750706,7303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,297011418,750706,7303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,297011418,750706,7293 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",505500603,1264801,9929 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",505500603,1264801,9929 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",505500603,1264801,9929 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",496002987,1240369,9940 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",496002987,1240369,9940 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",496002987,1240369,9940 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",537813063,1355341,10080 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",537813063,1355341,10080 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",537813063,1355341,10080 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",463690527,1149829,9766 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",463690527,1149829,9766 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,463690527,1149829,9766 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,505500603,1264801,9909 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,505500603,1264801,9909 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,505500603,1264801,9909 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,505500603,1264801,9888 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1839831387,4555009,26759 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1839831387,4555009,26759 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1839831387,4555009,26759 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1812104331,4485841,26820 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1812104331,4485841,26820 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1812104331,4485841,26820 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1975543719,4935277,27446 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1975543719,4935277,27446 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1975543719,4935277,27446 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1676391999,4105573,26046 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1676391999,4105573,26046 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1676391999,4105573,26046 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1839831387,4555009,26674 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1839831387,4555009,26674 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1839831387,4555009,26674 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1839831387,4555009,26590 +Agora/Stake/policy/stakeCreation,51392011,150393,2536 +Agora/Stake/validator/stakeDepositWithdraw deposit,186634362,508256,5324 +Agora/Stake/validator/stakeDepositWithdraw withdraw,186634362,508256,5312 +Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/legal/governor,325452519,864627,8802 +Agora/Proposal/policy (proposal creation)/legal/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1980 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,325452519,864627,8771 +Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2019 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,162558579,427638,5986 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2031 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,163587411,431096,6008 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2007 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,157124919,412988,5974 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2011 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,157124919,412988,5978 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,236423139,660573,8414 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,126045994,328720,5786 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,665645490,1853924,11068 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,541985602,1428052,8320 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1353965353,3721747,14387 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1157564197,3077623,11488 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,126045994,328720,5786 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,126045994,328720,5786 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,126045994,328720,5786 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,126045994,328720,5786 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,541985602,1428052,8320 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,541985602,1428052,8320 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,541985602,1428052,8320 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157564197,3077623,11488 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157564197,3077623,11488 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157564197,3077623,11488 +Agora/Proposal/validator/voting/legal/proposal,254761960,715291,8396 +Agora/Proposal/validator/voting/legal/stake,144453449,381134,5812 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,249151017,693538,8909 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,6122 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,293313747,804549,8918 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6129 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340814784,939138,10070 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474044919,1182110,10118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3659 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,244096325,682817,8911 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6124 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279799305,767410,8912 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6125 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280930283,769814,8912 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6125 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,136455095,355188,6122 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6129 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3659 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,136455095,355188,6122 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,137177631,357452,6125 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137177631,357452,6133 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,136455095,355188,6124 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6129 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474044919,1182110,10118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3659 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474044919,1182110,10119 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3660 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,316563738,866529,9359 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,180383767,464874,6570 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348898466,963341,10297 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,7508 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3886 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340814784,939138,9892 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7103 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340814784,939138,10064 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,193483926,490485,7275 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3653 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340814784,939138,10070 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3659 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294552365,811630,9498 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,6515 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,342409981,932629,9507 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6522 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,386216132,1057230,10660 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,493963090,1236555,10512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4053 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289497673,800909,9500 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6517 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,325200653,885502,9501 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6518 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,326331631,887906,9501 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6518 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,136455095,355188,6515 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6522 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4053 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,136455095,355188,6515 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,137177631,357452,6518 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137177631,357452,6530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,136455095,355188,6517 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6522 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,493963090,1236555,10512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4053 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,493963090,1236555,10513 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4054 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361965086,984621,9948 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,180383767,464874,6963 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,394299814,1081433,10887 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,7902 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4280 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,386216132,1057230,10481 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7496 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,386216132,1057230,10654 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,193483926,490485,7669 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4047 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,386216132,1057230,10660 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4053 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430756409,1165906,11270 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,7696 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,489698683,1316869,11279 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,7703 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,522420176,1411506,12431 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,553717603,1399890,11692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5233 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425701717,1155185,11272 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,7698 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,461404697,1239778,11273 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,7699 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,462535675,1242182,11273 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,7699 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,136455095,355188,7696 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,7703 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5233 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,136455095,355188,7696 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,137177631,357452,7699 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137177631,357452,7723 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,136455095,355188,7698 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,7703 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,553717603,1399890,11692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5233 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,553717603,1399890,11693 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5234 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,498169130,1338897,11720 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,180383767,464874,8144 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,530503858,1435709,12658 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,9082 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5460 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,522420176,1411506,12253 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193483926,490485,8677 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,522420176,1411506,12425 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,193483926,490485,8849 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5227 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,522420176,1411506,12431 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5233 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,607775528,1728219,11679 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,539763005,1417642,8771 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,315683095,866613,9275 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6365 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,363184132,1001202,10427 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,481232867,1202798,10355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3896 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266465673,744881,9268 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6360 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,302168653,829474,9269 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6361 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,303299631,831878,9269 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6361 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,539763005,1417642,8771 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6365 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3896 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,525648719,1376632,8771 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,137177631,357452,6361 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137177631,357452,6369 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,539763005,1417642,8773 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6365 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,481232867,1202798,10355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3896 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,481232867,1202798,10356 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3897 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338933086,928593,9715 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,180383767,464874,6805 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,371267814,1025405,10654 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,7744 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4123 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,363184132,1001202,10249 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7339 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,363184132,1001202,10421 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,193483926,490485,7511 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3890 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,363184132,1001202,10427 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3896 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,653176876,1846311,12270 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,539763005,1417642,9165 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,364779329,994693,9865 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6758 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,408585480,1119294,11018 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,501151038,1257243,10749 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4290 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311867021,862973,9858 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6753 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,347570001,947566,9859 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6754 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,348700979,949970,9859 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6754 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,539763005,1417642,9165 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6758 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4290 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,525648719,1376632,9165 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,137177631,357452,6754 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137177631,357452,6766 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,539763005,1417642,9167 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6758 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,501151038,1257243,10749 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4290 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,501151038,1257243,10750 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4291 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,384334434,1046685,10306 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,180383767,464874,7199 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,416669162,1143497,11245 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,8138 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4517 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,408585480,1119294,10839 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7732 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,408585480,1119294,11012 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,193483926,490485,7905 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4284 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,408585480,1119294,11018 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4290 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,789380920,2200587,14040 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,539763005,1417642,10345 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,512068031,1378933,11636 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,7939 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544789524,1473570,12788 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560905551,1420578,11929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5470 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,448071065,1217249,11629 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,7934 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,483774045,1301842,11630 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,7935 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484905023,1304246,11630 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,7935 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,539763005,1417642,10345 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,7939 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5470 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,525648719,1376632,10345 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,137177631,357452,7935 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137177631,357452,7959 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,539763005,1417642,10347 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,7939 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560905551,1420578,11929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5470 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,560905551,1420578,11930 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5471 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,520538478,1400961,12077 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,180383767,464874,8380 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552873206,1497773,13015 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,9318 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5697 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544789524,1473570,12610 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193483926,490485,8913 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544789524,1473570,12782 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,193483926,490485,9085 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5464 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544789524,1473570,12788 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5470 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1143400598,3277042,15148 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1156082894,3069279,12089 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,343644780,944193,9727 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6666 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,391145817,1078782,10879 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,490217802,1228658,10656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4197 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294427358,822461,9720 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6661 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,330130338,907054,9721 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6662 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,331261316,909458,9721 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6662 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1156082894,3069279,12089 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6666 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4197 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1170197180,3110289,12089 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,137177631,357452,6662 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137177631,357452,6670 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1156082894,3069279,12091 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6666 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,490217802,1228658,10656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4197 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,490217802,1228658,10657 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4198 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366894771,1006173,10168 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,180383767,464874,7107 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,399229499,1102985,11106 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,8045 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4424 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,391145817,1078782,10701 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7640 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,391145817,1078782,10873 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,193483926,490485,7812 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4191 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,391145817,1078782,10879 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4197 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1188801946,3395134,15738 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1156082894,3069279,12483 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,392741014,1072273,10316 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,7059 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436547165,1196874,11469 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,510135973,1283103,11050 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4591 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339828706,940553,10309 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,7054 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,375531686,1025146,10310 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,7055 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,376662664,1027550,10310 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,7055 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1156082894,3069279,12483 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,7059 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4591 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1170197180,3110289,12483 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,137177631,357452,7055 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137177631,357452,7067 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1156082894,3069279,12485 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,7059 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,510135973,1283103,11050 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4591 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,510135973,1283103,11051 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4592 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,412296119,1124265,10757 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,180383767,464874,7500 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444630847,1221077,11696 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,8439 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4818 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436547165,1196874,11290 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193483926,490485,8033 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436547165,1196874,11463 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,193483926,490485,8206 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4585 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436547165,1196874,11469 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4591 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1325005990,3749410,17509 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1156082894,3069279,13663 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,540029716,1456513,12088 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,8240 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,572751209,1551150,13241 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,569890486,1446438,12231 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5772 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,476032750,1294829,12081 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,8235 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,511735730,1379422,12082 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,8236 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512866708,1381826,12082 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,8236 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1156082894,3069279,13663 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,8240 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5772 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1170197180,3110289,13663 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,137177631,357452,8236 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137177631,357452,8260 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1156082894,3069279,13665 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,8240 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,569890486,1446438,12231 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5772 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,569890486,1446438,12232 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5773 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,548500163,1478541,12529 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,180383767,464874,8681 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580834891,1575353,13467 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,9619 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5998 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,572751209,1551150,13062 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193483926,490485,9214 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,572751209,1551150,13235 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,193483926,490485,9387 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5765 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,572751209,1551150,13241 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5772 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,133050934,348184,5792 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,237178475,667478,8377 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,136282180,357238,5808 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250650682,707420,8388 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,133050934,348184,5790 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204970610,587333,8374 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,133050934,348184,5806 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,213404867,612237,8386 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,133050934,348184,5796 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,206286762,591217,8381 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,133050934,348184,5796 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,206286762,591217,8381 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,136282180,357238,5812 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,220290545,632551,8392 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,299842282,759460,7885 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379819723,1080142,10446 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,315998512,804730,7961 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,445348258,1271396,10497 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,299842282,759460,7874 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,313051422,905189,10438 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,299842282,759460,7955 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,351440403,1016941,10491 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,299842282,759460,7905 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,318520682,920265,10466 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,299842282,759460,7905 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,318520682,920265,10466 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,315998512,804730,7981 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,384580793,1112911,10517 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,508331467,1273555,10500 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,558121283,1595972,13031 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,540643927,1364095,10651 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688720228,1976366,13132 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,508331467,1273555,10480 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,448152437,1302509,13019 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,508331467,1273555,10640 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523984823,1522821,13121 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,508331467,1273555,10540 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458813082,1331575,13071 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,508331467,1273555,10540 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458813082,1331575,13071 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,540643927,1364095,10691 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589943603,1713361,13172 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1842662251,4563763,27330 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1699251267,4897284,29650 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1978374583,4944031,28017 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2246300836,6488174,30108 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1842662251,4563763,27245 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312798933,3845357,29605 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1842662251,4563763,27956 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1628269111,4760453,30047 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1842662251,4563763,27498 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356684442,3963959,29818 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1842662251,4563763,27498 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356684442,3963959,29818 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1978374583,4944031,28186 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1904265587,5556241,30277 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",133050934,348184,5792 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",133050934,348184,5792 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",133050934,348184,5792 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",128680348,336334,5794 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",128680348,336334,5794 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",128680348,336334,5794 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",136282180,357238,5808 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",136282180,357238,5808 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",136282180,357238,5808 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",125449102,327280,5774 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",125449102,327280,5774 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,125449102,327280,5774 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,133050934,348184,5790 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,133050934,348184,5790 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,133050934,348184,5790 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,133050934,348184,5788 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",299842282,759460,7885 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",299842282,759460,7885 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",299842282,759460,7885 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",293193016,742018,7891 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",293193016,742018,7891 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",293193016,742018,7891 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",315998512,804730,7961 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",315998512,804730,7961 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",315998512,804730,7961 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",277036786,696748,7802 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",277036786,696748,7802 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,277036786,696748,7802 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,299842282,759460,7874 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,299842282,759460,7874 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,299842282,759460,7874 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,299842282,759460,7864 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",508331467,1273555,10500 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",508331467,1273555,10500 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",508331467,1273555,10500 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",498833851,1249123,10511 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",498833851,1249123,10511 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",498833851,1249123,10511 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",540643927,1364095,10651 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",540643927,1364095,10651 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",540643927,1364095,10651 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",466521391,1158583,10337 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",466521391,1158583,10337 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,466521391,1158583,10337 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,508331467,1273555,10480 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,508331467,1273555,10480 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,508331467,1273555,10480 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,508331467,1273555,10459 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1842662251,4563763,27330 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1842662251,4563763,27330 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1842662251,4563763,27330 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1814935195,4494595,27391 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1814935195,4494595,27391 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1814935195,4494595,27391 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1978374583,4944031,28017 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1978374583,4944031,28017 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1978374583,4944031,28017 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1679222863,4114327,26617 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1679222863,4114327,26617 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1679222863,4114327,26617 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1842662251,4563763,27245 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1842662251,4563763,27245 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1842662251,4563763,27245 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1842662251,4563763,27161 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Governor/policy/totally legal,60002734,167736,2268 -Agora/Governor/validator/mutate/legal,100216324,268169,8154 +Agora/Governor/validator/mutate/legal,100216324,268169,8181 From be1eabc26109eec0beb6df6aeafc0269fc5d266c Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 25 Jul 2022 22:07:27 +0800 Subject: [PATCH 57/78] simple tests for setting delegate --- agora-specs/Sample/Stake/SetDelegate.hs | 204 ++++++++++++++++++++++++ agora-specs/Spec/Stake.hs | 29 ++++ agora.cabal | 1 + agora/Agora/Stake/Scripts.hs | 2 +- bench.csv | 3 + 5 files changed, 238 insertions(+), 1 deletion(-) create mode 100644 agora-specs/Sample/Stake/SetDelegate.hs diff --git a/agora-specs/Sample/Stake/SetDelegate.hs b/agora-specs/Sample/Stake/SetDelegate.hs new file mode 100644 index 00000000..cf46e2a8 --- /dev/null +++ b/agora-specs/Sample/Stake/SetDelegate.hs @@ -0,0 +1,204 @@ +{- | +Module : Sample.Stake.SetDelegate +Maintainer : connor@mlabs.city +Description: Generate sample data for testing the functionalities of setting the delegate. + +Sample and utilities for testing the functionalities of setting the delegate. +-} +module Sample.Stake.SetDelegate ( + Parameters (..), + setDelegate, + mkStakeRedeemer, + mkStakeInputDatum, + mkTestCase, + overrideExistingDelegateParameters, + clearDelegateParameters, + setDelegateParameters, + invalidOutputStakeDatumParameters, + ownerDoesntSignParameters, + delegateToOwnerParameters, +) where + +import Agora.Stake ( + Stake (gtClassRef), + StakeDatum (..), + StakeRedeemer (ClearDelegate, DelegateTo), + ) +import Agora.Stake.Scripts (stakeValidator) +import Data.Tagged (untag) +import Plutarch.Context ( + SpendingBuilder, + buildSpendingUnsafe, + input, + output, + script, + signedWith, + txId, + withDatum, + withOutRef, + withSpendingOutRef, + withValue, + ) +import PlutusLedgerApi.V1 ( + PubKeyHash, + ScriptContext, + TxOutRef (TxOutRef), + ) +import PlutusLedgerApi.V1.Value qualified as Value +import Sample.Shared ( + minAda, + signer, + signer2, + stake, + stakeAssetClass, + stakeValidatorHash, + ) +import Test.Specification (SpecificationTree, testValidator) +import Test.Util (pubKeyHashes, sortValue) + +-------------------------------------------------------------------------------- + +-- | Parameters that control the script context generation of 'setDelegate'. +data Parameters = Parameters + { existingDelegate :: Maybe PubKeyHash + -- ^ Whom the stake has been delegated to. + , newDelegate :: Maybe PubKeyHash + -- ^ The new delegate to set to. + , invalidOutputStake :: Bool + -- ^ The output stake datum will be invalid if this is set to true. + , signedByOwner :: Bool + -- ^ Whether the stake owner signs the transaction o not. + } + +-- | Select the correct stake redeemer based on the existence of the new delegate. +mkStakeRedeemer :: Parameters -> StakeRedeemer +mkStakeRedeemer (newDelegate -> d) = maybe ClearDelegate DelegateTo d + +-- | The owner of the input stake. +stakeOwner :: PubKeyHash +stakeOwner = signer + +-- | Create input stake datum given the parameters. +mkStakeInputDatum :: Parameters -> StakeDatum +mkStakeInputDatum ps = + StakeDatum + { stakedAmount = 5 + , owner = stakeOwner + , delegatedTo = ps.existingDelegate + , lockedBy = [] + } + +-- | Generate a 'ScriptContext' that tries to change the delegate of a stake. +setDelegate :: Parameters -> ScriptContext +setDelegate ps = buildSpendingUnsafe builder + where + stakeRef :: TxOutRef + stakeRef = TxOutRef "0ffef57e30cc604342c738e31e0451593837b313e7bfb94b0922b142782f98e6" 1 + + stakeInput = mkStakeInputDatum ps + + stakeOutput = + let stakedAmount = + if ps.invalidOutputStake + then stakeInput.stakedAmount - 1 + else stakeInput.stakedAmount + in stakeInput + { stakedAmount = stakedAmount + , delegatedTo = ps.newDelegate + } + + signer = + if ps.signedByOwner + then stakeInput.owner + else signer2 + + st = Value.assetClassValue stakeAssetClass 1 -- Stake ST + stakeValue = + sortValue $ + mconcat + [ st + , Value.assetClassValue + (untag stake.gtClassRef) + (untag stakeInput.stakedAmount) + , minAda + ] + + builder :: SpendingBuilder + builder = + mconcat + [ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" + , signedWith signer + , input $ + script stakeValidatorHash + . withValue stakeValue + . withDatum stakeInput + . withOutRef stakeRef + , output $ + script stakeValidatorHash + . withValue stakeValue + . withDatum stakeOutput + , withSpendingOutRef stakeRef + ] + +-------------------------------------------------------------------------------- + +{- | Create a test case that runs the stake validator to test the functionality + of setting the delegate.P +-} +mkTestCase :: String -> Parameters -> Bool -> SpecificationTree +mkTestCase name ps valid = + testValidator + valid + name + (stakeValidator stake) + (mkStakeInputDatum ps) + (mkStakeRedeemer ps) + (setDelegate ps) + +-------------------------------------------------------------------------------- + +-- * Valid Parameters + +overrideExistingDelegateParameters :: Parameters +overrideExistingDelegateParameters = + Parameters + { existingDelegate = Just $ head pubKeyHashes + , newDelegate = Just $ pubKeyHashes !! 2 + , invalidOutputStake = False + , signedByOwner = True + } + +clearDelegateParameters :: Parameters +clearDelegateParameters = + overrideExistingDelegateParameters + { newDelegate = Nothing + } + +setDelegateParameters :: Parameters +setDelegateParameters = + overrideExistingDelegateParameters + { existingDelegate = Nothing + } + +-------------------------------------------------------------------------------- + +-- * Invalid Parameters + +ownerDoesntSignParameters :: Parameters +ownerDoesntSignParameters = + overrideExistingDelegateParameters + { signedByOwner = False + } + +delegateToOwnerParameters :: Parameters +delegateToOwnerParameters = + overrideExistingDelegateParameters + { existingDelegate = Nothing + , newDelegate = Just stakeOwner + } + +invalidOutputStakeDatumParameters :: Parameters +invalidOutputStakeDatumParameters = + overrideExistingDelegateParameters + { invalidOutputStake = True + } diff --git a/agora-specs/Spec/Stake.hs b/agora-specs/Spec/Stake.hs index 7c395978..686e4416 100644 --- a/agora-specs/Spec/Stake.hs +++ b/agora-specs/Spec/Stake.hs @@ -15,6 +15,7 @@ import Agora.Stake ( StakeRedeemer (DepositWithdraw), ) import Agora.Stake.Scripts (stakePolicy, stakeValidator) +import Data.Bool (Bool (..)) import Data.Maybe (Maybe (..)) import Sample.Stake ( DepositWithdrawExample ( @@ -31,6 +32,7 @@ import Sample.Stake qualified as Stake ( stakeCreationWrongDatum, stakeDepositWithdraw, ) +import Sample.Stake.SetDelegate qualified as SetDelegate import Test.Specification ( SpecificationTree, group, @@ -83,5 +85,32 @@ specs = (toDatum $ StakeDatum 100_000 signer Nothing []) (toDatum $ DepositWithdraw 1_000_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = negate 1_000_000}) + , group + "set delegate" + [ SetDelegate.mkTestCase + "override existing delegate" + SetDelegate.overrideExistingDelegateParameters + True + , SetDelegate.mkTestCase + "remove existing delegate" + SetDelegate.clearDelegateParameters + True + , SetDelegate.mkTestCase + "set delegate to something" + SetDelegate.setDelegateParameters + True + , SetDelegate.mkTestCase + "owner doesn't sign the transaction" + SetDelegate.ownerDoesntSignParameters + False + , SetDelegate.mkTestCase + "delegate to the owner" + SetDelegate.delegateToOwnerParameters + False + , SetDelegate.mkTestCase + "invalid output stake" + SetDelegate.invalidOutputStakeDatumParameters + False + ] ] ] diff --git a/agora.cabal b/agora.cabal index 8c7d8606..1050c071 100644 --- a/agora.cabal +++ b/agora.cabal @@ -197,6 +197,7 @@ library agora-specs Sample.Proposal.Vote Sample.Shared Sample.Stake + Sample.Stake.SetDelegate Sample.Treasury Spec.AuthorityToken Spec.Effect.GovernorMutation diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 0fa20d62..2c09e30f 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -522,7 +522,7 @@ stakeValidator stake = PDelegateTo ((pfield @"pkh" #) -> pkh) -> unTermCont $ do pguardC "Cannot delegate to the owner" $ - pnot #$ stakeDatum.owner #== pfromData pkh + pnot #$ stakeDatum.owner #== pfromData pkh pure $ setDelegate #$ pcon $ PDJust $ pdcons @"_0" # pkh #$ pdnil ------------------------------------------------------------ diff --git a/bench.csv b/bench.csv index 9d6770f1..cbb095bb 100644 --- a/bench.csv +++ b/bench.csv @@ -7,6 +7,9 @@ Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect Agora/Stake/policy/stakeCreation,51392011,150393,2536 Agora/Stake/validator/stakeDepositWithdraw deposit,186634362,508256,5324 Agora/Stake/validator/stakeDepositWithdraw withdraw,186634362,508256,5312 +Agora/Stake/validator/set delegate/override existing delegate,113448429,294926,5376 +Agora/Stake/validator/set delegate/remove existing delegate,110848776,287015,5313 +Agora/Stake/validator/set delegate/set delegate to something,110031522,287900,5313 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/legal/governor,325452519,864627,8802 Agora/Proposal/policy (proposal creation)/legal/stake,157124919,412988,5978 From a355482feadc5f64b20c69cbf16c679eb4f1bd5b Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Mon, 25 Jul 2022 22:18:54 +0800 Subject: [PATCH 58/78] tests for delegate voting --- agora-specs/Sample/Proposal/Vote.hs | 27 ++++++++++++++++++++++++--- agora-specs/Spec/Proposal.hs | 8 ++++++-- bench.csv | 6 ++++-- 3 files changed, 34 insertions(+), 7 deletions(-) diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index 0b28b0a8..dd4f6613 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -8,6 +8,7 @@ Sample and utilities for testing the functionalities of voting on proposals. module Sample.Proposal.Vote ( validVoteParameters, mkTestTree, + validVoteAsDelegateParameters, ) where import Agora.Proposal ( @@ -66,7 +67,7 @@ import Test.Specification ( testValidator, validatorSucceedsWith, ) -import Test.Util (CombinableBuilder, closedBoundedInterval, mkSpending, sortValue, updateMap) +import Test.Util (CombinableBuilder, closedBoundedInterval, mkSpending, pubKeyHashes, sortValue, updateMap) -- | Reference to the proposal UTXO. proposalRef :: TxOutRef @@ -82,6 +83,8 @@ data Parameters = Parameters -- ^ The outcome the transaction is voting for. , voteCount :: Integer -- ^ The count of votes. + , voteAsDelegate :: Bool + -- ^ Delegate the stake and use it to vote. } -- | The public key hash of the stake owner. @@ -121,6 +124,9 @@ existingLocks = , Voted (ProposalId 1) (ResultTag 2) ] +delegate :: PubKeyHash +delegate = head pubKeyHashes + {- | Set the 'StakeDatum.stakedAmount' according to the number of votes being casted. -} @@ -129,7 +135,10 @@ mkStakeInputDatum params = StakeDatum { stakedAmount = Tagged params.voteCount , owner = stakeOwner - , delegatedTo = Nothing + , delegatedTo = + if params.voteAsDelegate + then Just delegate + else Nothing , lockedBy = existingLocks } @@ -199,10 +208,15 @@ vote params = <> Value.assetClassValue (untag stake.gtClassRef) params.voteCount <> minAda + signer = + if params.voteAsDelegate + then delegate + else stakeOwner + builder = mconcat [ txId "827598fb2d69a896bbd9e645bb14c307df907f422b39eecbe4d6329bc30b428c" - , signedWith stakeOwner + , signedWith signer , timeRange validTimeRange , input $ script proposalValidatorHash @@ -233,6 +247,13 @@ validVoteParameters = Parameters { voteFor = ResultTag 0 , voteCount = 27 + , voteAsDelegate = False + } + +validVoteAsDelegateParameters :: Parameters +validVoteAsDelegateParameters = + validVoteParameters + { voteAsDelegate = True } --- diff --git a/agora-specs/Spec/Proposal.hs b/agora-specs/Spec/Proposal.hs index 6dd51b0c..b49dd60f 100644 --- a/agora-specs/Spec/Proposal.hs +++ b/agora-specs/Spec/Proposal.hs @@ -130,8 +130,12 @@ specs = in [legalGroup, illegalGroup] , group "voting" - [ Vote.mkTestTree "legal" Vote.validVoteParameters True - -- TODO: add negative test cases + [ group + "legal" + [ Vote.mkTestTree "ordinary" Vote.validVoteParameters True + , Vote.mkTestTree "delegate" Vote.validVoteAsDelegateParameters True + ] + -- TODO: add negative test cases ] , group "advancing" diff --git a/bench.csv b/bench.csv index cbb095bb..64f905bf 100644 --- a/bench.csv +++ b/bench.csv @@ -48,8 +48,10 @@ Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 co Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157564197,3077623,11488 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157564197,3077623,11488 Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157564197,3077623,11488 -Agora/Proposal/validator/voting/legal/proposal,254761960,715291,8396 -Agora/Proposal/validator/voting/legal/stake,144453449,381134,5812 +Agora/Proposal/validator/voting/legal/ordinary/proposal,254761960,715291,8396 +Agora/Proposal/validator/voting/legal/ordinary/stake,144453449,381134,5812 +Agora/Proposal/validator/voting/legal/delegate/proposal,254862648,715291,8459 +Agora/Proposal/validator/voting/legal/delegate/stake,147870356,388160,5906 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,249151017,693538,8909 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,6122 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,293313747,804549,8918 From 53160efbeb9c133c629ff7f9b04943e8bd683649 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 26 Jul 2022 22:19:44 +0800 Subject: [PATCH 59/78] allows delegate to retract votes --- agora/Agora/Stake/Scripts.hs | 4 +- bench.csv | 666 +++++++++++++++++------------------ 2 files changed, 335 insertions(+), 335 deletions(-) diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 2c09e30f..776aa7ca 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -417,8 +417,8 @@ stakeValidator stake = pmatch stakeRedeemer $ \case PRetractVotes _ -> unTermCont $ do pguardC - "Owner signs this transaction" - ownerSignsTransaction + "Owner or delegate signs this transaction" + $ ownerSignsTransaction #|| delegateSignsTransaction -- This puts trust into the Proposal. The Proposal must necessarily check -- that this is not abused. diff --git a/bench.csv b/bench.csv index 64f905bf..e69778ef 100644 --- a/bench.csv +++ b/bench.csv @@ -5,574 +5,574 @@ Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8317 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 Agora/Stake/policy/stakeCreation,51392011,150393,2536 -Agora/Stake/validator/stakeDepositWithdraw deposit,186634362,508256,5324 -Agora/Stake/validator/stakeDepositWithdraw withdraw,186634362,508256,5312 -Agora/Stake/validator/set delegate/override existing delegate,113448429,294926,5376 -Agora/Stake/validator/set delegate/remove existing delegate,110848776,287015,5313 -Agora/Stake/validator/set delegate/set delegate to something,110031522,287900,5313 +Agora/Stake/validator/stakeDepositWithdraw deposit,186703362,508556,5333 +Agora/Stake/validator/stakeDepositWithdraw withdraw,186703362,508556,5321 +Agora/Stake/validator/set delegate/override existing delegate,113517429,295226,5385 +Agora/Stake/validator/set delegate/remove existing delegate,110917776,287315,5322 +Agora/Stake/validator/set delegate/set delegate to something,110100522,288200,5322 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/legal/governor,325452519,864627,8802 -Agora/Proposal/policy (proposal creation)/legal/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/legal/stake,157193919,413288,5987 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,157193919,413288,5987 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1980 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,325452519,864627,8771 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2019 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,162558579,427638,5986 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,162627579,427938,5995 Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2031 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,163587411,431096,6008 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,163656411,431396,6017 Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,157193919,413288,5987 Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2007 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,157124919,412988,5974 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,157193919,413288,5983 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,157193919,413288,5987 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,157193919,413288,5987 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,157124919,412988,5978 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,157193919,413288,5987 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,236423139,660573,8414 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,126045994,328720,5786 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,126114994,329020,5795 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,665645490,1853924,11068 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,541985602,1428052,8320 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,542054602,1428352,8329 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1353965353,3721747,14387 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1157564197,3077623,11488 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,126045994,328720,5786 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,126045994,328720,5786 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,126045994,328720,5786 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,126045994,328720,5786 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,541985602,1428052,8320 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,541985602,1428052,8320 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,541985602,1428052,8320 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157564197,3077623,11488 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157564197,3077623,11488 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157564197,3077623,11488 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1157633197,3077923,11497 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,126114994,329020,5795 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,126114994,329020,5795 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,126114994,329020,5795 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,126114994,329020,5795 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,542054602,1428352,8329 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,542054602,1428352,8329 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,542054602,1428352,8329 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157633197,3077923,11497 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157633197,3077923,11497 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157633197,3077923,11497 Agora/Proposal/validator/voting/legal/ordinary/proposal,254761960,715291,8396 -Agora/Proposal/validator/voting/legal/ordinary/stake,144453449,381134,5812 +Agora/Proposal/validator/voting/legal/ordinary/stake,144522449,381434,5821 Agora/Proposal/validator/voting/legal/delegate/proposal,254862648,715291,8459 -Agora/Proposal/validator/voting/legal/delegate/stake,147870356,388160,5906 +Agora/Proposal/validator/voting/legal/delegate/stake,147939356,388460,5915 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,249151017,693538,8909 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,6122 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6131 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,293313747,804549,8918 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6129 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6138 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7290 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474044919,1182110,10118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,244096325,682817,8911 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6124 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6133 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279799305,767410,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6125 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6134 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280930283,769814,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6125 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,136455095,355188,6122 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6129 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6134 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6131 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6138 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7290 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,136455095,355188,6122 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,137177631,357452,6125 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137177631,357452,6133 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,136455095,355188,6124 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6129 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,136524095,355488,6131 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6134 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6142 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6133 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6138 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7290 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474044919,1182110,10118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474044919,1182110,10119 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3660 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,316563738,866529,9359 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,180383767,464874,6570 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6579 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348898466,963341,10297 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,7508 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7517 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3886 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340814784,939138,9892 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7103 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7112 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340814784,939138,10064 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,193483926,490485,7275 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7284 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3653 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,193483926,490485,7281 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7290 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294552365,811630,9498 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,6515 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6524 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,342409981,932629,9507 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6522 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6531 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7684 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,493963090,1236555,10512 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289497673,800909,9500 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6517 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6526 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,325200653,885502,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6518 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6527 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,326331631,887906,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6518 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,136455095,355188,6515 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6522 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6527 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6524 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6531 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7684 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,136455095,355188,6515 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,137177631,357452,6518 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137177631,357452,6530 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,136455095,355188,6517 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6522 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,136524095,355488,6524 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6527 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6539 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6526 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6531 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7684 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,493963090,1236555,10512 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,493963090,1236555,10513 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4054 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361965086,984621,9948 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,180383767,464874,6963 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,6972 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,394299814,1081433,10887 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,7902 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7911 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4280 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,386216132,1057230,10481 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7496 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7505 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,386216132,1057230,10654 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,193483926,490485,7669 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7678 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4047 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,193483926,490485,7675 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7684 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430756409,1165906,11270 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,136455095,355188,7696 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,7705 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,489698683,1316869,11279 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,7703 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7712 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8864 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,553717603,1399890,11692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425701717,1155185,11272 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,7698 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7707 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,461404697,1239778,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,7699 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7708 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,462535675,1242182,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,7699 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,136455095,355188,7696 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,7703 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7708 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,7705 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7712 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8864 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,136455095,355188,7696 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,137177631,357452,7699 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137177631,357452,7723 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,136455095,355188,7698 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,7703 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,136524095,355488,7705 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7708 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7732 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,136524095,355488,7707 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7712 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8864 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,553717603,1399890,11692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,553717603,1399890,11693 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5234 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,498169130,1338897,11720 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,180383767,464874,8144 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8153 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,530503858,1435709,12658 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,9082 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9091 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5460 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,522420176,1411506,12253 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193483926,490485,8677 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8686 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,522420176,1411506,12425 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,193483926,490485,8849 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,8858 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5227 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,193483926,490485,8855 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,8864 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,607775528,1728219,11679 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,539763005,1417642,8771 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,8780 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,315683095,866613,9275 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6365 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6374 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7526 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,481232867,1202798,10355 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266465673,744881,9268 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6360 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6369 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,302168653,829474,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6361 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6370 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,303299631,831878,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6361 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,539763005,1417642,8771 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6365 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6370 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,8780 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6374 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7526 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,525648719,1376632,8771 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,137177631,357452,6361 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137177631,357452,6369 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,539763005,1417642,8773 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6365 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,525717719,1376932,8780 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6370 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6378 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,8782 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6374 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7526 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,481232867,1202798,10355 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,481232867,1202798,10356 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3897 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338933086,928593,9715 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,180383767,464874,6805 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6814 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,371267814,1025405,10654 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,7744 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7753 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4123 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,363184132,1001202,10249 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7339 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7348 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,363184132,1001202,10421 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,193483926,490485,7511 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7520 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3890 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,193483926,490485,7517 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7526 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,653176876,1846311,12270 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,539763005,1417642,9165 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,9174 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,364779329,994693,9865 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6758 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6767 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7920 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,501151038,1257243,10749 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311867021,862973,9858 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6753 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6762 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,347570001,947566,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6754 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6763 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,348700979,949970,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6754 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,539763005,1417642,9165 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6758 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6763 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,9174 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6767 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7920 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,525648719,1376632,9165 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,137177631,357452,6754 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137177631,357452,6766 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,539763005,1417642,9167 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6758 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,525717719,1376932,9174 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6763 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6775 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,9176 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6767 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7920 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,501151038,1257243,10749 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,501151038,1257243,10750 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4291 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,384334434,1046685,10306 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,180383767,464874,7199 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7208 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,416669162,1143497,11245 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,8138 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8147 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4517 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,408585480,1119294,10839 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7732 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7741 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,408585480,1119294,11012 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,193483926,490485,7905 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7914 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4284 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,193483926,490485,7911 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7920 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,789380920,2200587,14040 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,539763005,1417642,10345 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,10354 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,512068031,1378933,11636 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,7939 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7948 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9100 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560905551,1420578,11929 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,448071065,1217249,11629 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,7934 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7943 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,483774045,1301842,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,7935 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7944 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484905023,1304246,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,7935 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,539763005,1417642,10345 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,7939 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7944 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,10354 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7948 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9100 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,525648719,1376632,10345 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,137177631,357452,7935 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137177631,357452,7959 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,539763005,1417642,10347 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,7939 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,525717719,1376932,10354 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7944 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7968 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,10356 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7948 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9100 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560905551,1420578,11929 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,560905551,1420578,11930 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5471 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,520538478,1400961,12077 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,180383767,464874,8380 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8389 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552873206,1497773,13015 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,9318 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9327 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5697 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544789524,1473570,12610 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193483926,490485,8913 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8922 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544789524,1473570,12782 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,193483926,490485,9085 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9094 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5464 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,193483926,490485,9091 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9100 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1143400598,3277042,15148 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1156082894,3069279,12089 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12098 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,343644780,944193,9727 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,6666 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6675 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7827 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,490217802,1228658,10656 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294427358,822461,9720 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,6661 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6670 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,330130338,907054,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,6662 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6671 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,331261316,909458,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,6662 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1156082894,3069279,12089 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,6666 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6671 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12098 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6675 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7827 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1170197180,3110289,12089 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,137177631,357452,6662 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137177631,357452,6670 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1156082894,3069279,12091 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,6666 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12098 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6671 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6679 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12100 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6675 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7827 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,490217802,1228658,10656 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,490217802,1228658,10657 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4198 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366894771,1006173,10168 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,180383767,464874,7107 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,7116 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,399229499,1102985,11106 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,8045 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8054 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4424 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,391145817,1078782,10701 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193483926,490485,7640 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7649 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,391145817,1078782,10873 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,193483926,490485,7812 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7821 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4191 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,193483926,490485,7818 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7827 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1188801946,3395134,15738 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1156082894,3069279,12483 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12492 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,392741014,1072273,10316 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,7059 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7068 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8221 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,510135973,1283103,11050 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339828706,940553,10309 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,7054 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7063 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,375531686,1025146,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,7055 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7064 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,376662664,1027550,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,7055 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1156082894,3069279,12483 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,7059 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7064 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12492 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7068 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8221 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1170197180,3110289,12483 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,137177631,357452,7055 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137177631,357452,7067 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1156082894,3069279,12485 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,7059 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12492 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,7064 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,7076 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12494 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7068 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8221 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,510135973,1283103,11050 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,510135973,1283103,11051 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4592 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,412296119,1124265,10757 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,180383767,464874,7500 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7509 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444630847,1221077,11696 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,8439 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8448 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4818 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436547165,1196874,11290 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193483926,490485,8033 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8042 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436547165,1196874,11463 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,193483926,490485,8206 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,8215 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4585 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,193483926,490485,8212 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,8221 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1325005990,3749410,17509 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1156082894,3069279,13663 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,13672 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,540029716,1456513,12088 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137177631,357452,8240 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,8249 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9402 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,569890486,1446438,12231 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5772 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,476032750,1294829,12081 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137177631,357452,8235 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,8244 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,511735730,1379422,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137177631,357452,8236 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,8245 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512866708,1381826,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137177631,357452,8236 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1156082894,3069279,13663 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137177631,357452,8240 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,8245 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,13672 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,8249 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9402 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1170197180,3110289,13663 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,137177631,357452,8236 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137177631,357452,8260 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1156082894,3069279,13665 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137177631,357452,8240 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1170266180,3110589,13672 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,8245 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,8269 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,13674 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,8249 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9402 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,569890486,1446438,12231 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5772 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,569890486,1446438,12232 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5773 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,548500163,1478541,12529 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,180383767,464874,8681 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8690 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580834891,1575353,13467 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197032035,497712,9619 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9628 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5998 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,572751209,1551150,13062 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193483926,490485,9214 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,9223 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,572751209,1551150,13235 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,193483926,490485,9387 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9396 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5765 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,193483926,490485,9393 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9402 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5772 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,133050934,348184,5792 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,133453490,349585,5801 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,237178475,667478,8377 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,136282180,357238,5808 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,136684736,358639,5817 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250650682,707420,8388 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,133050934,348184,5790 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,133453490,349585,5799 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204970610,587333,8374 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,133050934,348184,5806 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,133453490,349585,5815 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,213404867,612237,8386 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,133050934,348184,5796 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,133453490,349585,5805 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,133050934,348184,5796 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,133453490,349585,5805 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,136282180,357238,5812 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,136684736,358639,5821 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,220290545,632551,8392 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,299842282,759460,7885 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,300244838,760861,7894 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379819723,1080142,10446 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,315998512,804730,7961 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,316401068,806131,7970 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,445348258,1271396,10497 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,299842282,759460,7874 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,300244838,760861,7883 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,313051422,905189,10438 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,299842282,759460,7955 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,300244838,760861,7964 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,351440403,1016941,10491 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,299842282,759460,7905 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,300244838,760861,7914 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,299842282,759460,7905 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,300244838,760861,7914 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,315998512,804730,7981 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,316401068,806131,7990 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,384580793,1112911,10517 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,508331467,1273555,10500 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,508734023,1274956,10509 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,558121283,1595972,13031 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,540643927,1364095,10651 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,541046483,1365496,10660 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688720228,1976366,13132 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,508331467,1273555,10480 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,508734023,1274956,10489 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,448152437,1302509,13019 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,508331467,1273555,10640 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,508734023,1274956,10649 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523984823,1522821,13121 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,508331467,1273555,10540 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,508734023,1274956,10549 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,508331467,1273555,10540 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,508734023,1274956,10549 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,540643927,1364095,10691 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,541046483,1365496,10700 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589943603,1713361,13172 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1842662251,4563763,27330 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1843064807,4565164,27339 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1699251267,4897284,29650 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1978374583,4944031,28017 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1978777139,4945432,28026 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2246300836,6488174,30108 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1842662251,4563763,27245 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1843064807,4565164,27254 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312798933,3845357,29605 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1842662251,4563763,27956 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1843064807,4565164,27965 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1628269111,4760453,30047 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1842662251,4563763,27498 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1843064807,4565164,27507 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1842662251,4563763,27498 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1843064807,4565164,27507 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1978374583,4944031,28186 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1978777139,4945432,28195 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1904265587,5556241,30277 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",133050934,348184,5792 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",133050934,348184,5792 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",133050934,348184,5792 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",128680348,336334,5794 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",128680348,336334,5794 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",128680348,336334,5794 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",136282180,357238,5808 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",136282180,357238,5808 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",136282180,357238,5808 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",125449102,327280,5774 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",125449102,327280,5774 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,125449102,327280,5774 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,133050934,348184,5790 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,133050934,348184,5790 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,133050934,348184,5790 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,133050934,348184,5788 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",299842282,759460,7885 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",299842282,759460,7885 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",299842282,759460,7885 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",293193016,742018,7891 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",293193016,742018,7891 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",293193016,742018,7891 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",315998512,804730,7961 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",315998512,804730,7961 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",315998512,804730,7961 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",277036786,696748,7802 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",277036786,696748,7802 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,277036786,696748,7802 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,299842282,759460,7874 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,299842282,759460,7874 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,299842282,759460,7874 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,299842282,759460,7864 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",508331467,1273555,10500 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",508331467,1273555,10500 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",508331467,1273555,10500 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",498833851,1249123,10511 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",498833851,1249123,10511 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",498833851,1249123,10511 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",540643927,1364095,10651 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",540643927,1364095,10651 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",540643927,1364095,10651 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",466521391,1158583,10337 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",466521391,1158583,10337 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,466521391,1158583,10337 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,508331467,1273555,10480 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,508331467,1273555,10480 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,508331467,1273555,10480 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,508331467,1273555,10459 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1842662251,4563763,27330 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1842662251,4563763,27330 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1842662251,4563763,27330 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1814935195,4494595,27391 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1814935195,4494595,27391 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1814935195,4494595,27391 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1978374583,4944031,28017 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1978374583,4944031,28017 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1978374583,4944031,28017 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1679222863,4114327,26617 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1679222863,4114327,26617 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1679222863,4114327,26617 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1842662251,4563763,27245 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1842662251,4563763,27245 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1842662251,4563763,27245 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1842662251,4563763,27161 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",133453490,349585,5801 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",133453490,349585,5801 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",133453490,349585,5801 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",129082904,337735,5803 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",129082904,337735,5803 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",129082904,337735,5803 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",136684736,358639,5817 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",136684736,358639,5817 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",136684736,358639,5817 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",125851658,328681,5783 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",125851658,328681,5783 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,125851658,328681,5783 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,133453490,349585,5799 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,133453490,349585,5799 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,133453490,349585,5799 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,133453490,349585,5797 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",300244838,760861,7894 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",300244838,760861,7894 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",300244838,760861,7894 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",293595572,743419,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",293595572,743419,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",293595572,743419,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",316401068,806131,7970 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",316401068,806131,7970 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",316401068,806131,7970 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",277439342,698149,7811 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",277439342,698149,7811 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,277439342,698149,7811 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,300244838,760861,7883 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,300244838,760861,7883 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,300244838,760861,7883 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,300244838,760861,7873 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",508734023,1274956,10509 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",508734023,1274956,10509 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",508734023,1274956,10509 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",499236407,1250524,10520 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",499236407,1250524,10520 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",499236407,1250524,10520 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",541046483,1365496,10660 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",541046483,1365496,10660 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",541046483,1365496,10660 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",466923947,1159984,10346 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",466923947,1159984,10346 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,466923947,1159984,10346 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,508734023,1274956,10489 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,508734023,1274956,10489 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,508734023,1274956,10489 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,508734023,1274956,10468 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1843064807,4565164,27339 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1843064807,4565164,27339 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1843064807,4565164,27339 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1815337751,4495996,27400 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1815337751,4495996,27400 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1815337751,4495996,27400 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1978777139,4945432,28026 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1978777139,4945432,28026 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1978777139,4945432,28026 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1679625419,4115728,26626 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1679625419,4115728,26626 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1679625419,4115728,26626 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1843064807,4565164,27254 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1843064807,4565164,27254 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1843064807,4565164,27254 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1843064807,4565164,27170 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 From 95fd75399f37767fa0af28f4a7bf743047c68478 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 26 Jul 2022 22:26:13 +0800 Subject: [PATCH 60/78] add `pdjust` and `pdnothing` --- agora/Agora/Stake/Scripts.hs | 11 +- agora/Agora/Utils.hs | 28 +- bench.csv | 666 +++++++++++++++++------------------ 3 files changed, 366 insertions(+), 339 deletions(-) diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 776aa7ca..26f8d908 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -18,6 +18,8 @@ import Agora.Stake ( import Agora.Utils ( mustBePJust, mustFindDatum', + pdjust, + pdnothing, pmaybeData, pvalidatorHashToTokenName, ) @@ -27,7 +29,6 @@ import Plutarch.Api.V1 ( AmountGuarantees (Positive), PCredential (PPubKeyCredential, PScriptCredential), PDatumHash, - PMaybeData (..), PMintingPolicy, PScriptPurpose (PMinting, PSpending), PTokenName, @@ -520,15 +521,15 @@ stakeValidator stake = ------------------------------------------------------------ - PDelegateTo ((pfield @"pkh" #) -> pkh) -> unTermCont $ do + PDelegateTo ((pfromData . (pfield @"pkh" #)) -> pkh) -> unTermCont $ do pguardC "Cannot delegate to the owner" $ - pnot #$ stakeDatum.owner #== pfromData pkh + pnot #$ stakeDatum.owner #== pkh - pure $ setDelegate #$ pcon $ PDJust $ pdcons @"_0" # pkh #$ pdnil + pure $ setDelegate #$ pdjust # pkh ------------------------------------------------------------ PClearDelegate _ -> - setDelegate #$ pcon $ PDNothing pdnil + setDelegate # pdnothing ------------------------------------------------------------ _ -> popaque (pconstant ()) diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 64f49968..1a6f6f97 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -26,6 +26,8 @@ module Agora.Utils ( withBuiltinPairAsData, pmaybeData, pmaybe, + pdjust, + pdnothing, ) where import Plutarch.Api.V1 ( @@ -36,7 +38,7 @@ import Plutarch.Api.V1 ( PCurrencySymbol, PDatum, PDatumHash, - PMaybeData (PDJust), + PMaybeData (PDJust, PDNothing), PMintingPolicy, PTokenName (PTokenName), PTuple, @@ -269,3 +271,27 @@ pmaybeData = phoistAcyclic $ plam $ \n f m -> pmatch m $ \case PDJust ((pfield @"_0" #) -> x) -> f # x _ -> n + +{- Construct a 'PDJust' value. + + @since 0.2.0 +-} +pdjust :: + forall (a :: PType) (s :: S). + (PIsData a) => + Term s (a :--> PMaybeData a) +pdjust = phoistAcyclic $ + plam $ \x -> + pcon $ + PDJust $ + pdcons @"_0" # pdata x #$ pdnil + +{- Construct a 'PDNothing' value. + + @since 0.2.0 +-} +pdnothing :: + forall (a :: PType) (s :: S). + (PIsData a) => + Term s (PMaybeData a) +pdnothing = phoistAcyclic $ pcon $ PDNothing pdnil diff --git a/bench.csv b/bench.csv index e69778ef..5c885db5 100644 --- a/bench.csv +++ b/bench.csv @@ -5,574 +5,574 @@ Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8317 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 Agora/Stake/policy/stakeCreation,51392011,150393,2536 -Agora/Stake/validator/stakeDepositWithdraw deposit,186703362,508556,5333 -Agora/Stake/validator/stakeDepositWithdraw withdraw,186703362,508556,5321 -Agora/Stake/validator/set delegate/override existing delegate,113517429,295226,5385 -Agora/Stake/validator/set delegate/remove existing delegate,110917776,287315,5322 -Agora/Stake/validator/set delegate/set delegate to something,110100522,288200,5322 +Agora/Stake/validator/stakeDepositWithdraw deposit,186703362,508556,5339 +Agora/Stake/validator/stakeDepositWithdraw withdraw,186703362,508556,5327 +Agora/Stake/validator/set delegate/override existing delegate,113710649,295990,5391 +Agora/Stake/validator/set delegate/remove existing delegate,110917776,287315,5328 +Agora/Stake/validator/set delegate/set delegate to something,110293742,288964,5328 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/legal/governor,325452519,864627,8802 -Agora/Proposal/policy (proposal creation)/legal/stake,157193919,413288,5987 +Agora/Proposal/policy (proposal creation)/legal/stake,157193919,413288,5993 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,157193919,413288,5987 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,157193919,413288,5993 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1980 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,325452519,864627,8771 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2019 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,162627579,427938,5995 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,162627579,427938,6001 Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2031 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,163656411,431396,6017 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,163656411,431396,6023 Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,157193919,413288,5987 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,157193919,413288,5993 Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2007 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,157193919,413288,5983 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,157193919,413288,5989 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,157193919,413288,5987 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,157193919,413288,5993 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,157193919,413288,5987 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,157193919,413288,5993 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,157193919,413288,5987 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,157193919,413288,5993 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,236423139,660573,8414 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,126114994,329020,5795 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,126114994,329020,5801 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,665645490,1853924,11068 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,542054602,1428352,8329 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,542054602,1428352,8335 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1353965353,3721747,14387 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1157633197,3077923,11497 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,126114994,329020,5795 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,126114994,329020,5795 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,126114994,329020,5795 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,126114994,329020,5795 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,542054602,1428352,8329 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,542054602,1428352,8329 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,542054602,1428352,8329 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157633197,3077923,11497 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157633197,3077923,11497 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157633197,3077923,11497 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1157633197,3077923,11503 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,126114994,329020,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,126114994,329020,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,126114994,329020,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,126114994,329020,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,542054602,1428352,8335 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,542054602,1428352,8335 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,542054602,1428352,8335 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157633197,3077923,11503 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157633197,3077923,11503 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157633197,3077923,11503 Agora/Proposal/validator/voting/legal/ordinary/proposal,254761960,715291,8396 -Agora/Proposal/validator/voting/legal/ordinary/stake,144522449,381434,5821 +Agora/Proposal/validator/voting/legal/ordinary/stake,144522449,381434,5827 Agora/Proposal/validator/voting/legal/delegate/proposal,254862648,715291,8459 -Agora/Proposal/validator/voting/legal/delegate/stake,147939356,388460,5915 +Agora/Proposal/validator/voting/legal/delegate/stake,147939356,388460,5921 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,249151017,693538,8909 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6131 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6137 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,293313747,804549,8918 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6138 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6144 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7290 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7296 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474044919,1182110,10118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,244096325,682817,8911 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6133 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6139 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279799305,767410,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6134 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6140 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280930283,769814,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6134 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6131 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6138 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7290 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6140 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6137 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6144 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7296 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,136524095,355488,6131 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6134 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6142 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6133 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6138 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7290 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,136524095,355488,6137 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6140 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6148 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6139 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6144 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7296 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474044919,1182110,10118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474044919,1182110,10119 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3660 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,316563738,866529,9359 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6579 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6585 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348898466,963341,10297 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7517 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7523 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3886 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340814784,939138,9892 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7112 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340814784,939138,10064 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7284 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7290 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3653 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7290 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7296 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294552365,811630,9498 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6524 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6530 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,342409981,932629,9507 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6531 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6537 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7684 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7690 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,493963090,1236555,10512 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289497673,800909,9500 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6526 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6532 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,325200653,885502,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6527 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6533 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,326331631,887906,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6527 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6524 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6531 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7684 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6533 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6537 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7690 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,136524095,355488,6524 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6527 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6539 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6526 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6531 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7684 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,136524095,355488,6530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6533 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6545 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6532 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6537 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7690 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,493963090,1236555,10512 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,493963090,1236555,10513 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4054 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361965086,984621,9948 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,6972 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,6978 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,394299814,1081433,10887 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7911 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7917 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4280 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,386216132,1057230,10481 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7505 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7511 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,386216132,1057230,10654 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7678 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7684 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4047 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7684 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7690 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430756409,1165906,11270 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,7705 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,7711 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,489698683,1316869,11279 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7712 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7718 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8864 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8870 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,553717603,1399890,11692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425701717,1155185,11272 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7707 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7713 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,461404697,1239778,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7708 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7714 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,462535675,1242182,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7708 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,7705 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7712 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8864 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7714 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,7711 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7718 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8870 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,136524095,355488,7705 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7708 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7732 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,136524095,355488,7707 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7712 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8864 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,136524095,355488,7711 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7714 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7738 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,136524095,355488,7713 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7718 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8870 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,553717603,1399890,11692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,553717603,1399890,11693 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5234 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,498169130,1338897,11720 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8153 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8159 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,530503858,1435709,12658 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9091 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9097 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5460 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,522420176,1411506,12253 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8686 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,522420176,1411506,12425 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,8858 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,8864 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5227 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,8864 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,8870 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,607775528,1728219,11679 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,8780 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,8786 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,315683095,866613,9275 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6374 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6380 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7526 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7532 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,481232867,1202798,10355 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266465673,744881,9268 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6369 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6375 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,302168653,829474,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6370 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6376 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,303299631,831878,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6370 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,8780 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6374 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7526 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,8786 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6380 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7532 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,525717719,1376932,8780 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6370 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6378 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,8782 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6374 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7526 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,525717719,1376932,8786 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6384 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,8788 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6380 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7532 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,481232867,1202798,10355 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,481232867,1202798,10356 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3897 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338933086,928593,9715 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6814 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6820 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,371267814,1025405,10654 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7753 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7759 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4123 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,363184132,1001202,10249 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7348 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7354 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,363184132,1001202,10421 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7520 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7526 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3890 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7526 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7532 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,653176876,1846311,12270 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,9174 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,9180 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,364779329,994693,9865 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6767 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6773 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7920 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7926 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,501151038,1257243,10749 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311867021,862973,9858 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6762 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6768 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,347570001,947566,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6763 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6769 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,348700979,949970,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6763 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,9174 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6767 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7920 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6769 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,9180 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6773 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7926 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,525717719,1376932,9174 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6763 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6775 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,9176 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6767 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7920 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,525717719,1376932,9180 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6769 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6781 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,9182 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6773 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7926 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,501151038,1257243,10749 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,501151038,1257243,10750 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4291 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,384334434,1046685,10306 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7208 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7214 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,416669162,1143497,11245 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8147 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8153 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4517 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,408585480,1119294,10839 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7741 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7747 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,408585480,1119294,11012 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7914 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7920 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4284 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7920 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7926 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,789380920,2200587,14040 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,10354 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,10360 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,512068031,1378933,11636 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7948 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7954 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9100 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9106 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560905551,1420578,11929 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,448071065,1217249,11629 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7943 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7949 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,483774045,1301842,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7944 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7950 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484905023,1304246,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7944 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,10354 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7948 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9100 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7950 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,10360 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7954 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9106 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,525717719,1376932,10354 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7944 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7968 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,10356 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7948 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9100 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,525717719,1376932,10360 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7950 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7974 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,10362 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7954 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9106 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560905551,1420578,11929 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,560905551,1420578,11930 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5471 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,520538478,1400961,12077 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8389 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8395 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552873206,1497773,13015 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9327 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9333 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5697 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544789524,1473570,12610 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8922 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8928 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544789524,1473570,12782 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9094 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9100 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5464 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9100 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9106 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1143400598,3277042,15148 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12098 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12104 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,343644780,944193,9727 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6675 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6681 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7827 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7833 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,490217802,1228658,10656 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294427358,822461,9720 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6670 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6676 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,330130338,907054,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6671 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6677 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,331261316,909458,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6671 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12098 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6675 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7827 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6677 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12104 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6681 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7833 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12098 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6671 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6679 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12100 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6675 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7827 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12104 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6677 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6685 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12106 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6681 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7833 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,490217802,1228658,10656 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,490217802,1228658,10657 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4198 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366894771,1006173,10168 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,7116 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,7122 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,399229499,1102985,11106 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8054 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8060 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4424 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,391145817,1078782,10701 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7649 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7655 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,391145817,1078782,10873 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7821 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7827 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4191 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7827 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7833 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1188801946,3395134,15738 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12492 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12498 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,392741014,1072273,10316 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7068 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7074 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8221 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8227 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,510135973,1283103,11050 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339828706,940553,10309 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7063 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7069 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,375531686,1025146,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7064 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7070 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,376662664,1027550,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7064 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12492 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7068 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8221 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7070 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12498 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7074 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8227 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12492 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,7064 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,7076 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12494 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7068 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8221 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12498 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,7070 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,7082 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12500 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7074 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8227 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,510135973,1283103,11050 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,510135973,1283103,11051 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4592 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,412296119,1124265,10757 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7509 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7515 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444630847,1221077,11696 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8448 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8454 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4818 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436547165,1196874,11290 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8042 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8048 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436547165,1196874,11463 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,8215 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,8221 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4585 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,8221 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,8227 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1325005990,3749410,17509 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,13672 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,13678 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,540029716,1456513,12088 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,8249 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,8255 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9402 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9408 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,569890486,1446438,12231 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5772 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,476032750,1294829,12081 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,8244 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,8250 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,511735730,1379422,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,8245 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,8251 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512866708,1381826,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,8245 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,13672 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,8249 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9402 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,8251 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,13678 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,8255 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9408 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1170266180,3110589,13672 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,8245 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,8269 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,13674 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,8249 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9402 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1170266180,3110589,13678 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,8251 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,8275 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,13680 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,8255 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9408 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,569890486,1446438,12231 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5772 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,569890486,1446438,12232 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5773 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,548500163,1478541,12529 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8690 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8696 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580834891,1575353,13467 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9628 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9634 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5998 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,572751209,1551150,13062 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,9223 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,9229 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,572751209,1551150,13235 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9396 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9402 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5765 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9402 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9408 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5772 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,133453490,349585,5801 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,133453490,349585,5807 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,237178475,667478,8377 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,136684736,358639,5817 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,136684736,358639,5823 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250650682,707420,8388 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,133453490,349585,5799 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,133453490,349585,5805 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204970610,587333,8374 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,133453490,349585,5815 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,133453490,349585,5821 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,213404867,612237,8386 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,133453490,349585,5805 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,133453490,349585,5811 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,133453490,349585,5805 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,133453490,349585,5811 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,136684736,358639,5821 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,136684736,358639,5827 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,220290545,632551,8392 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,300244838,760861,7894 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,300244838,760861,7900 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379819723,1080142,10446 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,316401068,806131,7970 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,316401068,806131,7976 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,445348258,1271396,10497 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,300244838,760861,7883 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,300244838,760861,7889 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,313051422,905189,10438 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,300244838,760861,7964 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,300244838,760861,7970 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,351440403,1016941,10491 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,300244838,760861,7914 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,300244838,760861,7920 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,300244838,760861,7914 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,300244838,760861,7920 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,316401068,806131,7990 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,316401068,806131,7996 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,384580793,1112911,10517 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,508734023,1274956,10509 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,508734023,1274956,10515 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,558121283,1595972,13031 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,541046483,1365496,10660 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,541046483,1365496,10666 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688720228,1976366,13132 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,508734023,1274956,10489 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,508734023,1274956,10495 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,448152437,1302509,13019 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,508734023,1274956,10649 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,508734023,1274956,10655 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523984823,1522821,13121 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,508734023,1274956,10549 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,508734023,1274956,10555 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,508734023,1274956,10549 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,508734023,1274956,10555 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,541046483,1365496,10700 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,541046483,1365496,10706 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589943603,1713361,13172 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1843064807,4565164,27339 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1843064807,4565164,27345 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1699251267,4897284,29650 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1978777139,4945432,28026 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1978777139,4945432,28032 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2246300836,6488174,30108 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1843064807,4565164,27254 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1843064807,4565164,27260 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312798933,3845357,29605 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1843064807,4565164,27965 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1843064807,4565164,27971 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1628269111,4760453,30047 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1843064807,4565164,27507 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1843064807,4565164,27513 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1843064807,4565164,27507 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1843064807,4565164,27513 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1978777139,4945432,28195 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1978777139,4945432,28201 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1904265587,5556241,30277 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",133453490,349585,5801 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",133453490,349585,5801 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",133453490,349585,5801 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",129082904,337735,5803 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",129082904,337735,5803 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",129082904,337735,5803 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",136684736,358639,5817 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",136684736,358639,5817 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",136684736,358639,5817 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",125851658,328681,5783 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",125851658,328681,5783 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,125851658,328681,5783 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,133453490,349585,5799 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,133453490,349585,5799 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,133453490,349585,5799 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,133453490,349585,5797 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",300244838,760861,7894 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",300244838,760861,7894 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",300244838,760861,7894 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",293595572,743419,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",293595572,743419,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",293595572,743419,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",316401068,806131,7970 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",316401068,806131,7970 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",316401068,806131,7970 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",277439342,698149,7811 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",277439342,698149,7811 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,277439342,698149,7811 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,300244838,760861,7883 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,300244838,760861,7883 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,300244838,760861,7883 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,300244838,760861,7873 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",508734023,1274956,10509 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",508734023,1274956,10509 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",508734023,1274956,10509 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",499236407,1250524,10520 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",499236407,1250524,10520 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",499236407,1250524,10520 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",541046483,1365496,10660 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",541046483,1365496,10660 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",541046483,1365496,10660 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",466923947,1159984,10346 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",466923947,1159984,10346 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,466923947,1159984,10346 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,508734023,1274956,10489 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,508734023,1274956,10489 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,508734023,1274956,10489 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,508734023,1274956,10468 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1843064807,4565164,27339 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1843064807,4565164,27339 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1843064807,4565164,27339 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1815337751,4495996,27400 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1815337751,4495996,27400 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1815337751,4495996,27400 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1978777139,4945432,28026 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1978777139,4945432,28026 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1978777139,4945432,28026 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1679625419,4115728,26626 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1679625419,4115728,26626 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1679625419,4115728,26626 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1843064807,4565164,27254 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1843064807,4565164,27254 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1843064807,4565164,27254 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1843064807,4565164,27170 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",133453490,349585,5807 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",133453490,349585,5807 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",133453490,349585,5807 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",129082904,337735,5809 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",129082904,337735,5809 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",129082904,337735,5809 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",136684736,358639,5823 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",136684736,358639,5823 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",136684736,358639,5823 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",125851658,328681,5789 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",125851658,328681,5789 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,125851658,328681,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,133453490,349585,5805 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,133453490,349585,5805 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,133453490,349585,5805 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,133453490,349585,5803 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",300244838,760861,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",300244838,760861,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",300244838,760861,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",293595572,743419,7906 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",293595572,743419,7906 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",293595572,743419,7906 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",316401068,806131,7976 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",316401068,806131,7976 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",316401068,806131,7976 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",277439342,698149,7817 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",277439342,698149,7817 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,277439342,698149,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,300244838,760861,7889 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,300244838,760861,7889 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,300244838,760861,7889 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,300244838,760861,7879 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",508734023,1274956,10515 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",508734023,1274956,10515 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",508734023,1274956,10515 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",499236407,1250524,10526 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",499236407,1250524,10526 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",499236407,1250524,10526 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",541046483,1365496,10666 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",541046483,1365496,10666 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",541046483,1365496,10666 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",466923947,1159984,10352 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",466923947,1159984,10352 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,466923947,1159984,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,508734023,1274956,10495 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,508734023,1274956,10495 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,508734023,1274956,10495 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,508734023,1274956,10474 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1843064807,4565164,27345 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1843064807,4565164,27345 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1843064807,4565164,27345 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1815337751,4495996,27406 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1815337751,4495996,27406 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1815337751,4495996,27406 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1978777139,4945432,28032 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1978777139,4945432,28032 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1978777139,4945432,28032 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1679625419,4115728,26632 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1679625419,4115728,26632 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1679625419,4115728,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1843064807,4565164,27260 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1843064807,4565164,27260 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1843064807,4565164,27260 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1843064807,4565164,27176 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 From f2ec8b0e1e80cd095feadc365480bfecb6f74148 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Tue, 26 Jul 2022 22:29:09 +0800 Subject: [PATCH 61/78] update CHANGELOG --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2b5e3c71..1f738654 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,10 @@ This format is based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0). ### Modified +- Stake delegation. + + Included by [#149](https://github.com/Liqwid-Labs/agora/pull/149). + - Fixed bug that checks the proposal thresholds in an incorrect way. Added negative tests for the governor scripts. Included by [#146](https://github.com/Liqwid-Labs/agora/pull/146). From 9a42ac8b5caaebc4ca49c8b9de99af6e6eff5036 Mon Sep 17 00:00:00 2001 From: nini-faroux Date: Tue, 2 Aug 2022 10:16:30 +0100 Subject: [PATCH 62/78] Update ProposalRedeemer comment --- agora/Agora/Proposal.hs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index cf7bddad..2c002ed8 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -342,12 +342,12 @@ data ProposalRedeemer -- -- === @'Draft' -> 'VotingReady'@: -- - -- 1. The sum of all of the cosigner's GT is larger than the 'startVoting' field of 'ProposalThresholds'. + -- 1. The sum of all of the cosigner's GT is larger than the 'vote' field of 'ProposalThresholds'. -- 2. The proposal's current time ensures 'isDraftPeriod'. -- -- === @'VotingReady' -> 'Locked'@: -- - -- 1. The sum of all votes is larger than 'countVoting'. + -- 1. The sum of all votes is larger than 'execute'. -- 2. The winning 'ResultTag' has more votes than all other 'ResultTag's. -- 3. The proposal's current time ensures 'isVotingPeriod'. -- From 3af4a7438a2a1cf40ef4cd3a29b0f50766a3da64 Mon Sep 17 00:00:00 2001 From: Seungheon Oh Date: Wed, 27 Jul 2022 09:41:01 -0500 Subject: [PATCH 63/78] remove `Agora.MultiSig` --- agora-purescript-bridge/AgoraTypes.hs | 3 - agora-specs/Property/MultiSig.hs | 107 -- agora-test/Spec.hs | 4 - agora.cabal | 2 - agora/Agora/MultiSig.hs | 137 -- flake.lock | 1925 ++++++++++++++++++++----- flake.nix | 6 +- 7 files changed, 1535 insertions(+), 649 deletions(-) delete mode 100644 agora-specs/Property/MultiSig.hs delete mode 100644 agora/Agora/MultiSig.hs diff --git a/agora-purescript-bridge/AgoraTypes.hs b/agora-purescript-bridge/AgoraTypes.hs index f4f0afe1..253f5de7 100644 --- a/agora-purescript-bridge/AgoraTypes.hs +++ b/agora-purescript-bridge/AgoraTypes.hs @@ -15,7 +15,6 @@ import Agora.AuthorityToken qualified as AuthorityToken import Agora.Effect.GovernorMutation qualified as GovernorMutation import Agora.Effect.TreasuryWithdrawal qualified as TreasuryWithdrawalEffect import Agora.Governor qualified as Governor -import Agora.MultiSig qualified as MultiSig import Agora.Proposal qualified as Proposal import Agora.Stake qualified as Stake import Agora.Treasury qualified as Treasury @@ -37,8 +36,6 @@ agoraTypes = mkSumType (Proxy @Governor.GovernorDatum) , mkSumType (Proxy @Governor.GovernorRedeemer) , mkSumType (Proxy @Governor.Governor) - , -- MultiSig - mkSumType (Proxy @MultiSig.MultiSig) , -- Stake mkSumType (Proxy @Stake.Stake) , mkSumType (Proxy @Stake.ProposalLock) diff --git a/agora-specs/Property/MultiSig.hs b/agora-specs/Property/MultiSig.hs deleted file mode 100644 index 3d0d98cc..00000000 --- a/agora-specs/Property/MultiSig.hs +++ /dev/null @@ -1,107 +0,0 @@ -{- | -Module : Property.MultiSig -Maintainer : seungheon.ooh@gmail.com -Description: Property tests for 'MultiSig' functions - -Property model and tests for 'MultiSig' functions --} -module Property.MultiSig (props) where - -import Agora.MultiSig ( - MultiSig (MultiSig), - PMultiSig, - pvalidatedByMultisig, - ) -import Data.Tagged (Tagged (Tagged)) -import Data.Universe (Finite (..), Universe (..)) -import Plutarch.Api.V1 (PScriptContext) -import Plutarch.Context -import Plutarch.Extra.TermCont (pletC) -import PlutusLedgerApi.V1 ( - ScriptContext (..), - ScriptPurpose (..), - TxInfo (txInfoSignatories), - TxOutRef (..), - ) -import Property.Generator (genPubKeyHash) -import Test.Tasty (TestTree) -import Test.Tasty.Plutarch.Property (classifiedPropertyNative) -import Test.Tasty.QuickCheck ( - Gen, - Property, - chooseInt, - listOf, - testProperty, - vectorOf, - ) - --- | Model for testing multisigs. -type MultiSigModel = (MultiSig, ScriptContext) - --- | Propositions that may hold true of a `MultiSigModel`. -data MultiSigProp - = -- | Sufficient number of signatories in the script context. - MeetsMinSigs - | -- | Insufficient number of signatories in the script context. - DoesNotMeetMinSigs - deriving stock (Eq, Show, Ord) - -instance Universe MultiSigProp where - universe = [MeetsMinSigs, DoesNotMeetMinSigs] - -instance Finite MultiSigProp where - universeF = universe - cardinality = Tagged 2 - --- | Generate model with given proposition. -genMultiSigProp :: MultiSigProp -> Gen MultiSigModel -genMultiSigProp prop = do - size <- chooseInt (4, 20) - pkhs <- vectorOf size genPubKeyHash - minSig <- chooseInt (1, length pkhs) - othersigners <- take 20 <$> listOf genPubKeyHash - - let ms = MultiSig pkhs (toInteger minSig) - - n <- case prop of - MeetsMinSigs -> chooseInt (minSig, length pkhs) - DoesNotMeetMinSigs -> chooseInt (0, minSig - 1) - - let builder :: BaseBuilder - builder = mconcat $ signedWith <$> take n pkhs <> othersigners - txinfo = buildTxInfoUnsafe builder - pure (ms, ScriptContext txinfo (Spending (TxOutRef "" 0))) - --- | Classify model into propositions. -classifyMultiSigProp :: MultiSigModel -> MultiSigProp -classifyMultiSigProp (MultiSig keys (fromIntegral -> minsig), ctx) - | minsig <= length signer = MeetsMinSigs - | otherwise = DoesNotMeetMinSigs - where - signer = filter (`elem` keys) $ txInfoSignatories . scriptContextTxInfo $ ctx - --- | Shrinker. Not used. -shrinkMultiSigProp :: MultiSigModel -> [MultiSigModel] -shrinkMultiSigProp = const [] - --- | Expected behavior of @pvalidatedByMultisig@. -expectedHs :: MultiSigModel -> Maybe Bool -expectedHs model = case classifyMultiSigProp model of - MeetsMinSigs -> Just True - _ -> Just False - --- | Actual implementation of @pvalidatedByMultisig@. -actual :: Term s (PBuiltinPair PMultiSig PScriptContext :--> PBool) -actual = plam $ \x -> unTermCont $ do - ms <- pletC $ pfstBuiltin # x - sc <- pletC $ psndBuiltin # x - pure $ pvalidatedByMultisig # ms # (pfield @"txInfo" # sc) - --- | Proposed property. -prop :: Property -prop = classifiedPropertyNative genMultiSigProp shrinkMultiSigProp expectedHs classifyMultiSigProp actual - -props :: [TestTree] -props = - [ testProperty "MultiSig property" prop - ] diff --git a/agora-test/Spec.hs b/agora-test/Spec.hs index e11a5e13..ed7b9838 100644 --- a/agora-test/Spec.hs +++ b/agora-test/Spec.hs @@ -8,7 +8,6 @@ import Test.Tasty (defaultMain, testGroup) -------------------------------------------------------------------------------- import Property.Governor qualified as Governer -import Property.MultiSig qualified as MultiSig import Spec.AuthorityToken qualified as AuthorityToken import Spec.Effect.GovernorMutation qualified as GovernorMutation import Spec.Effect.TreasuryWithdrawal qualified as TreasuryWithdrawal @@ -42,7 +41,4 @@ main = do , testGroup "Utility tests" Utils.tests - , testGroup - "Multisig tests" - MultiSig.props ] diff --git a/agora.cabal b/agora.cabal index 1050c071..5fb6e634 100644 --- a/agora.cabal +++ b/agora.cabal @@ -149,7 +149,6 @@ library Agora.Effect.TreasuryWithdrawal Agora.Governor Agora.Governor.Scripts - Agora.MultiSig Agora.Plutarch.Orphans Agora.Proposal Agora.Proposal.Scripts @@ -184,7 +183,6 @@ library agora-specs exposed-modules: Property.Generator Property.Governor - Property.MultiSig Sample.Effect.GovernorMutation Sample.Effect.TreasuryWithdrawal Sample.Governor.Initialize diff --git a/agora/Agora/MultiSig.hs b/agora/Agora/MultiSig.hs deleted file mode 100644 index 5f34ec8f..00000000 --- a/agora/Agora/MultiSig.hs +++ /dev/null @@ -1,137 +0,0 @@ -{-# LANGUAGE TemplateHaskell #-} - -{- | -Module : Agora.MultiSig -Maintainer : riley_kilgore@outlook.com -Description: A basic N of M multisignature validation function. - -A basic N of M multisignature validation function. --} -module Agora.MultiSig ( - validatedByMultisig, - pvalidatedByMultisig, - PMultiSig (..), - MultiSig (..), -) where - -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, I (I)) -import Plutarch.Api.V1 ( - PPubKeyHash, - PTxInfo (..), - ) -import Plutarch.DataRepr ( - DerivePConstantViaData (DerivePConstantViaData), - PDataFields, - PIsDataReprInstances (PIsDataReprInstances), - ) -import Plutarch.Extra.TermCont (pletFieldsC) -import Plutarch.Lift ( - PConstantDecl, - PLifted, - PUnsafeLiftDecl, - ) -import PlutusLedgerApi.V1.Crypto (PubKeyHash) -import PlutusTx qualified -import Prelude - --------------------------------------------------------------------------------- - -{- | A MultiSig represents a proof that a particular set of signatures - are present on a transaction. - - @since 0.1.0 --} -data MultiSig = MultiSig - { keys :: [PubKeyHash] - -- ^ List of PubKeyHashes that must be present in the list of signatories. - , minSigs :: Integer - } - deriving stock - ( -- | @since 0.1.0 - GHC.Generic - , -- | @since 0.1.0 - Eq - , -- | @since 0.1.0 - Show - ) - deriving anyclass - ( -- | @since 0.1.0 - Generic - ) - -PlutusTx.makeLift ''MultiSig -PlutusTx.unstableMakeIsData ''MultiSig - -{- | Plutarch-level MultiSig - - @since 0.1.0 --} -newtype PMultiSig (s :: S) = PMultiSig - { getMultiSig :: - Term - s - ( PDataRecord - '[ "keys" ':= PBuiltinList (PAsData PPubKeyHash) - , "minSigs" ':= PInteger - ] - ) - } - deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass - ( -- | @since 0.1.0 - Generic - ) - deriving anyclass - ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 - PlutusType - , -- | @since 0.1.0 - PIsData - , -- | @since 0.1.0 - PDataFields - ) - via (PIsDataReprInstances PMultiSig) - --- | @since 0.1.0 -instance PUnsafeLiftDecl PMultiSig where type PLifted PMultiSig = MultiSig - --- | @since 0.1.0 -deriving via (DerivePConstantViaData MultiSig PMultiSig) instance (PConstantDecl MultiSig) - --------------------------------------------------------------------------------- - -{- | Check if a Haskell-level MultiSig signs this transaction. - - @since 0.1.0 --} -validatedByMultisig :: MultiSig -> Term s (PTxInfo :--> PBool) -validatedByMultisig params = - phoistAcyclic $ - pvalidatedByMultisig # pconstant params - -{- | Check if a Plutarch-level MultiSig signs this transaction. - - @since 0.1.0 --} -pvalidatedByMultisig :: Term s (PMultiSig :--> PTxInfo :--> PBool) -pvalidatedByMultisig = - phoistAcyclic $ - plam $ \multi' txInfo -> unTermCont $ do - multi <- pletFieldsC @'["keys", "minSigs"] multi' - let signatories = pfield @"signatories" # txInfo - pure $ - pfromData multi.minSigs - #<= ( plength #$ pfilter - # plam - ( \a -> - pelem # a # pfromData signatories - ) - # multi.keys - ) diff --git a/flake.lock b/flake.lock index 04af4ee1..9e4d7574 100644 --- a/flake.lock +++ b/flake.lock @@ -64,6 +64,22 @@ "type": "github" } }, + "HTTP_13": { + "flake": false, + "locked": { + "lastModified": 1451647621, + "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", + "owner": "phadej", + "repo": "HTTP", + "rev": "9bc0996d412fef1787449d841277ef663ad9a915", + "type": "github" + }, + "original": { + "owner": "phadej", + "repo": "HTTP", + "type": "github" + } + }, "HTTP_2": { "flake": false, "locked": { @@ -276,6 +292,23 @@ "type": "github" } }, + "cabal-32_13": { + "flake": false, + "locked": { + "lastModified": 1603716527, + "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", + "owner": "haskell", + "repo": "cabal", + "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.2", + "repo": "cabal", + "type": "github" + } + }, "cabal-32_2": { "flake": false, "locked": { @@ -480,6 +513,23 @@ "type": "github" } }, + "cabal-34_13": { + "flake": false, + "locked": { + "lastModified": 1640353650, + "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=", + "owner": "haskell", + "repo": "cabal", + "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.4", + "repo": "cabal", + "type": "github" + } + }, "cabal-34_2": { "flake": false, "locked": { @@ -684,6 +734,23 @@ "type": "github" } }, + "cabal-36_13": { + "flake": false, + "locked": { + "lastModified": 1641652457, + "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=", + "owner": "haskell", + "repo": "cabal", + "rev": "f27667f8ec360c475027dcaee0138c937477b070", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.6", + "repo": "cabal", + "type": "github" + } + }, "cabal-36_2": { "flake": false, "locked": { @@ -853,6 +920,22 @@ } }, "cardano-base_11": { + "flake": false, + "locked": { + "lastModified": 1652788515, + "narHash": "sha256-l0KgomRi6YhEoOlFnBYEXhnZO2+PW68rhfUrbMXjhCQ=", + "owner": "input-output-hk", + "repo": "cardano-base", + "rev": "631cb6cf1fa01ab346233b610a38b3b4cba6e6ab", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-base", + "type": "github" + } + }, + "cardano-base_12": { "flake": false, "locked": { "lastModified": 1638456794, @@ -868,7 +951,7 @@ "type": "github" } }, - "cardano-base_12": { + "cardano-base_13": { "flake": false, "locked": { "lastModified": 1652788515, @@ -1080,6 +1163,23 @@ "type": "github" } }, + "cardano-crypto_13": { + "flake": false, + "locked": { + "lastModified": 1621376239, + "narHash": "sha256-oxIOVlgm07FAEmgGRF1C2me9TXqVxQulEOcJ22zpTRs=", + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + } + }, "cardano-crypto_2": { "flake": false, "locked": { @@ -1251,6 +1351,23 @@ } }, "cardano-prelude_11": { + "flake": false, + "locked": { + "lastModified": 1653997332, + "narHash": "sha256-E+YSfUsvxdoOr7n7fz4xd7zb4z8XBRGNYOKipc2A1pw=", + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + } + }, + "cardano-prelude_12": { "flake": false, "locked": { "lastModified": 1641566029, @@ -1267,7 +1384,7 @@ "type": "github" } }, - "cardano-prelude_12": { + "cardano-prelude_13": { "flake": false, "locked": { "lastModified": 1653997332, @@ -1484,6 +1601,22 @@ "type": "github" } }, + "cardano-repo-tool_13": { + "flake": false, + "locked": { + "lastModified": 1624584417, + "narHash": "sha256-YSepT97PagR/1jTYV/Yer8a2GjFe9+tTwaTCHxuK50M=", + "owner": "input-output-hk", + "repo": "cardano-repo-tool", + "rev": "30e826ed8f00e3e154453b122a6f3d779b2f73ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-repo-tool", + "type": "github" + } + }, "cardano-repo-tool_2": { "flake": false, "locked": { @@ -1676,6 +1809,22 @@ "type": "github" } }, + "cardano-shell_13": { + "flake": false, + "locked": { + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-shell", + "type": "github" + } + }, "cardano-shell_2": { "flake": false, "locked": { @@ -1846,9 +1995,30 @@ "inputs": { "flake-compat": "flake-compat_19", "flake-utils": "flake-utils_29", - "lint-utils": "lint-utils", "nixpkgs": "nixpkgs_49" }, + "locked": { + "lastModified": 1653742730, + "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", + "owner": "srid", + "repo": "ema", + "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "multisite", + "repo": "ema", + "type": "github" + } + }, + "ema_11": { + "inputs": { + "flake-compat": "flake-compat_21", + "flake-utils": "flake-utils_32", + "lint-utils": "lint-utils", + "nixpkgs": "nixpkgs_54" + }, "locked": { "lastModified": 1650932571, "narHash": "sha256-rdpfJ+10a1uBPtHMNoAcpDE183RzpILRpsMgxj/YJek=", @@ -1909,8 +2079,8 @@ "ema_4": { "inputs": { "flake-compat": "flake-compat_7", - "flake-utils": "flake-utils_11", - "nixpkgs": "nixpkgs_19" + "flake-utils": "flake-utils_10", + "nixpkgs": "nixpkgs_16" }, "locked": { "lastModified": 1653742730, @@ -2081,7 +2251,6 @@ "ema": "ema_10", "flake-compat": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2089,7 +2258,6 @@ ], "flake-utils": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2099,15 +2267,61 @@ "ixset-typed": "ixset-typed_10", "nixpkgs": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "emanote", "ema", "nixpkgs" ], "pandoc-link-context": "pandoc-link-context_10", + "tailwind-haskell": "tailwind-haskell_10" + }, + "locked": { + "lastModified": 1653742875, + "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", + "owner": "srid", + "repo": "emanote", + "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "master", + "repo": "emanote", + "type": "github" + } + }, + "emanote_11": { + "inputs": { + "ema": "ema_11", + "flake-compat": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "emanote", + "ema", + "flake-compat" + ], + "flake-utils": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "emanote", + "ema", + "flake-utils" + ], + "heist": "heist_11", + "ixset-typed": "ixset-typed_11", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "emanote", + "ema", + "nixpkgs" + ], + "pandoc-link-context": "pandoc-link-context_11", "pathtree": "pathtree", - "tailwind-haskell": "tailwind-haskell_10", + "tailwind-haskell": "tailwind-haskell_11", "unionmount": "unionmount" }, "locked": { @@ -2130,7 +2344,7 @@ "ema": "ema_2", "flake-compat": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -2138,7 +2352,7 @@ ], "flake-utils": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -2148,7 +2362,7 @@ "ixset-typed": "ixset-typed_2", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -2177,7 +2391,7 @@ "ema": "ema_3", "flake-compat": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2185,7 +2399,7 @@ ], "flake-utils": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2195,7 +2409,7 @@ "ixset-typed": "ixset-typed_3", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2223,14 +2437,16 @@ "inputs": { "ema": "ema_4", "flake-compat": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2239,7 +2455,8 @@ "heist": "heist_4", "ixset-typed": "ixset-typed_4", "nixpkgs": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2267,14 +2484,14 @@ "inputs": { "ema": "ema_5", "flake-compat": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -2283,7 +2500,7 @@ "heist": "heist_5", "ixset-typed": "ixset-typed_5", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema", @@ -2311,14 +2528,14 @@ "inputs": { "ema": "ema_6", "flake-compat": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2327,7 +2544,7 @@ "heist": "heist_6", "ixset-typed": "ixset-typed_6", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema", @@ -2355,16 +2572,14 @@ "inputs": { "ema": "ema_7", "flake-compat": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", "flake-compat" ], "flake-utils": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2373,8 +2588,7 @@ "heist": "heist_7", "ixset-typed": "ixset-typed_7", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2404,7 +2618,6 @@ "flake-compat": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2413,7 +2626,6 @@ "flake-utils": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2424,7 +2636,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2453,6 +2664,8 @@ "ema": "ema_9", "flake-compat": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2460,6 +2673,8 @@ ], "flake-utils": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2469,6 +2684,8 @@ "ixset-typed": "ixset-typed_9", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema", @@ -2655,11 +2872,11 @@ "flake-compat_19": { "flake": false, "locked": { - "lastModified": 1648199409, - "narHash": "sha256-JwPKdC2PoVBkG6E+eWw3j6BMR6sL3COpYWfif7RVb8Y=", + "lastModified": 1650374568, + "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", "owner": "edolstra", "repo": "flake-compat", - "rev": "64a525ee38886ab9028e6f61790de0832aa3ef03", + "rev": "b4a34015c698c7793d592d66adbab377907a2be8", "type": "github" }, "original": { @@ -2701,6 +2918,22 @@ } }, "flake-compat_21": { + "flake": false, + "locked": { + "lastModified": 1648199409, + "narHash": "sha256-JwPKdC2PoVBkG6E+eWw3j6BMR6sL3COpYWfif7RVb8Y=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "64a525ee38886ab9028e6f61790de0832aa3ef03", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_22": { "flake": false, "locked": { "lastModified": 1641205782, @@ -2716,7 +2949,23 @@ "type": "github" } }, - "flake-compat_22": { + "flake-compat_23": { + "flake": false, + "locked": { + "lastModified": 1641205782, + "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", + "owner": "edolstra", + "repo": "flake-compat", + "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", + "type": "github" + }, + "original": { + "owner": "edolstra", + "repo": "flake-compat", + "type": "github" + } + }, + "flake-compat_24": { "flake": false, "locked": { "lastModified": 1627913399, @@ -2862,15 +3111,16 @@ }, "flake-utils_10": { "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "lastModified": 1652776076, + "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", "owner": "numtide", "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", "type": "github" }, "original": { "owner": "numtide", + "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -2893,16 +3143,15 @@ }, "flake-utils_12": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -3175,15 +3424,16 @@ }, "flake-utils_29": { "locked": { - "lastModified": 1648297722, - "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "lastModified": 1652776076, + "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", "owner": "numtide", "repo": "flake-utils", - "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", "type": "github" }, "original": { "owner": "numtide", + "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -3204,6 +3454,22 @@ } }, "flake-utils_30": { + "locked": { + "lastModified": 1652776076, + "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "type": "github" + }, + "original": { + "owner": "numtide", + "ref": "v1.0.0", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_31": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3218,7 +3484,37 @@ "type": "github" } }, - "flake-utils_31": { + "flake-utils_32": { + "locked": { + "lastModified": 1648297722, + "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_33": { + "locked": { + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", + "owner": "numtide", + "repo": "flake-utils", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "type": "github" + }, + "original": { + "owner": "numtide", + "repo": "flake-utils", + "type": "github" + } + }, + "flake-utils_34": { "locked": { "lastModified": 1642700792, "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", @@ -3233,7 +3529,7 @@ "type": "github" } }, - "flake-utils_32": { + "flake-utils_35": { "locked": { "lastModified": 1642700792, "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", @@ -3248,7 +3544,7 @@ "type": "github" } }, - "flake-utils_33": { + "flake-utils_36": { "locked": { "lastModified": 1631561581, "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", @@ -3263,7 +3559,7 @@ "type": "github" } }, - "flake-utils_34": { + "flake-utils_37": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3278,7 +3574,7 @@ "type": "github" } }, - "flake-utils_35": { + "flake-utils_38": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3420,6 +3716,22 @@ } }, "flat_11": { + "flake": false, + "locked": { + "lastModified": 1651403785, + "narHash": "sha256-g+jGep1IXdw4q01W67J6f6OODY91QzIlW1+Eu8pR+u0=", + "owner": "Quid2", + "repo": "flat", + "rev": "559617e058098b776b431e2a67346ad3adea2440", + "type": "github" + }, + "original": { + "owner": "Quid2", + "repo": "flat", + "type": "github" + } + }, + "flat_12": { "flake": false, "locked": { "lastModified": 1641898475, @@ -3436,7 +3748,7 @@ "type": "github" } }, - "flat_12": { + "flat_13": { "flake": false, "locked": { "lastModified": 1651403785, @@ -3665,6 +3977,23 @@ "type": "github" } }, + "ghc-8.6.5-iohk_13": { + "flake": false, + "locked": { + "lastModified": 1600920045, + "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=", + "owner": "input-output-hk", + "repo": "ghc", + "rev": "95713a6ecce4551240da7c96b6176f980af75cae", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "ref": "release/8.6.5-iohk", + "repo": "ghc", + "type": "github" + } + }, "ghc-8.6.5-iohk_2": { "flake": false, "locked": { @@ -3865,6 +4194,22 @@ "type": "github" } }, + "gitignore-nix_13": { + "flake": false, + "locked": { + "lastModified": 1611672876, + "narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "211907489e9f198594c0eb0ca9256a1949c9d412", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "gitignore-nix_2": { "flake": false, "locked": { @@ -4042,6 +4387,22 @@ } }, "hackage-nix_11": { + "flake": false, + "locked": { + "lastModified": 1651108473, + "narHash": "sha256-zHGCnBdwKvrcYanjf3GARTWF8V2pyJl1QNONUNZSoc0=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "dbab3b292c3400d028a2257e3acd2ac0249da774", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage-nix_12": { "flake": false, "locked": { "lastModified": 1644369434, @@ -4057,7 +4418,7 @@ "type": "github" } }, - "hackage-nix_12": { + "hackage-nix_13": { "flake": false, "locked": { "lastModified": 1651108473, @@ -4218,6 +4579,22 @@ } }, "hackage_11": { + "flake": false, + "locked": { + "lastModified": 1654046237, + "narHash": "sha256-FpM9zE+Q+WrvCiaZBCg5U1g0bYpiZOCxY8V3R5ydBu8=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "eeae1790b9c6a880d96e4a7214fdf0a73bdd6fc0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage_12": { "flake": false, "locked": { "lastModified": 1644887696, @@ -4233,7 +4610,7 @@ "type": "github" } }, - "hackage_12": { + "hackage_13": { "flake": false, "locked": { "lastModified": 1654046237, @@ -4396,11 +4773,11 @@ "haskell-language-server_10": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", "type": "github" }, "original": { @@ -4412,16 +4789,15 @@ "haskell-language-server_11": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4429,15 +4805,16 @@ "haskell-language-server_12": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4608,11 +4985,11 @@ "haskell-language-server_22": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -4624,15 +5001,16 @@ "haskell-language-server_23": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4640,16 +5018,15 @@ "haskell-language-server_24": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4706,11 +5083,11 @@ "haskell-language-server_28": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1654120290, + "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", "type": "github" }, "original": { @@ -4722,16 +5099,15 @@ "haskell-language-server_29": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4756,20 +5132,70 @@ "haskell-language-server_30": { "flake": false, "locked": { - "lastModified": 1655140576, - "narHash": "sha256-mHJuIk1ElmgPxvEUO2Y3E6T674F2tO5SS/uixf4R2fM=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8a5840a020048c74285f9997b9b02b9b04c658c6", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, "haskell-language-server_31": { + "flake": false, + "locked": { + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_32": { + "flake": false, + "locked": { + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "1.7.0.0", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_33": { + "flake": false, + "locked": { + "lastModified": 1655140576, + "narHash": "sha256-mHJuIk1ElmgPxvEUO2Y3E6T674F2tO5SS/uixf4R2fM=", + "owner": "haskell", + "repo": "haskell-language-server", + "rev": "8a5840a020048c74285f9997b9b02b9b04c658c6", + "type": "github" + }, + "original": { + "owner": "haskell", + "repo": "haskell-language-server", + "type": "github" + } + }, + "haskell-language-server_34": { "flake": false, "locked": { "lastModified": 1645014262, @@ -4785,7 +5211,7 @@ "type": "github" } }, - "haskell-language-server_32": { + "haskell-language-server_35": { "flake": false, "locked": { "lastModified": 1643835246, @@ -4802,7 +5228,7 @@ "type": "github" } }, - "haskell-language-server_33": { + "haskell-language-server_36": { "flake": false, "locked": { "lastModified": 1653778781, @@ -4818,7 +5244,7 @@ "type": "github" } }, - "haskell-language-server_34": { + "haskell-language-server_37": { "flake": false, "locked": { "lastModified": 1650980856, @@ -5004,11 +5430,15 @@ "inputs": { "haskell-nix": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -5028,6 +5458,33 @@ } }, "haskell-nix-extra-hackage_11": { + "inputs": { + "haskell-nix": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-safe-money", + "plutarch", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1653405678, + "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "type": "github" + } + }, + "haskell-nix-extra-hackage_12": { "inputs": { "haskell-nix": [ "plutarch-script-export", @@ -5058,13 +5515,13 @@ "inputs": { "haskell-nix": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix" ], "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "nixpkgs" ] @@ -5087,13 +5544,13 @@ "inputs": { "haskell-nix": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix" ], "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "nixpkgs" ] @@ -5115,10 +5572,14 @@ "haskell-nix-extra-hackage_4": { "inputs": { "haskell-nix": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -5140,12 +5601,10 @@ "haskell-nix-extra-hackage_5": { "inputs": { "haskell-nix": [ - "plutarch-context-builder", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-context-builder", "plutarch", "nixpkgs" ] @@ -5167,12 +5626,12 @@ "haskell-nix-extra-hackage_6": { "inputs": { "haskell-nix": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "nixpkgs" ] @@ -5194,12 +5653,12 @@ "haskell-nix-extra-hackage_7": { "inputs": { "haskell-nix": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "nixpkgs" ] @@ -5221,14 +5680,12 @@ "haskell-nix-extra-hackage_8": { "inputs": { "haskell-nix": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -5252,14 +5709,12 @@ "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "nixpkgs" ] @@ -5308,7 +5763,7 @@ "hydra": "hydra_6", "nix-tools": "nix-tools_6", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5364,7 +5819,7 @@ "hydra": "hydra_7", "nix-tools": "nix-tools_7", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5420,8 +5875,7 @@ "hydra": "hydra_8", "nix-tools": "nix-tools_8", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5479,7 +5933,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5536,6 +5989,8 @@ "nix-tools": "nix-tools_10", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5600,14 +6055,14 @@ "cabal-34": "cabal-34_11", "cabal-36": "cabal-36_11", "cardano-shell": "cardano-shell_11", - "flake-utils": "flake-utils_34", + "flake-utils": "flake-utils_31", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_11", "hackage": "hackage_11", "hpc-coveralls": "hpc-coveralls_11", + "hydra": "hydra_11", "nix-tools": "nix-tools_11", "nixpkgs": [ "plutarch-safe-money", - "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5620,16 +6075,15 @@ "stackage": "stackage_11" }, "locked": { - "lastModified": 1644944726, - "narHash": "sha256-jJWdP/3Ne1y1akC3m9rSO5ItRoBc4UTdVQZBCuPmmrM=", - "owner": "L-as", + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "45c583b5580c130487eb5a342679f0bdbc2b23fc", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", "type": "github" }, "original": { - "owner": "L-as", - "ref": "master", + "owner": "input-output-hk", "repo": "haskell.nix", "type": "github" } @@ -5637,11 +6091,11 @@ "haskell-nix_22": { "flake": false, "locked": { - "lastModified": 1629380841, - "narHash": "sha256-gWOWCfX7IgVSvMMYN6rBGK6EA0pk6pmYguXzMvGte+Q=", + "lastModified": 1651151636, + "narHash": "sha256-WdMP9IMB5kByT0zimDuCYZF/dinRB104H8iDTG/c1Eo=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "7215f083b37741446aa325b20c8ba9f9f76015eb", + "rev": "f707aa2e75c0d33473166abc61c0b43ac6e107c0", "type": "github" }, "original": { @@ -5657,14 +6111,14 @@ "cabal-34": "cabal-34_12", "cabal-36": "cabal-36_12", "cardano-shell": "cardano-shell_12", - "flake-utils": "flake-utils_35", + "flake-utils": "flake-utils_37", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_12", "hackage": "hackage_12", "hpc-coveralls": "hpc-coveralls_12", - "hydra": "hydra_11", "nix-tools": "nix-tools_12", "nixpkgs": [ - "plutarch-script-export", + "plutarch-safe-money", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5676,6 +6130,63 @@ "old-ghc-nix": "old-ghc-nix_12", "stackage": "stackage_12" }, + "locked": { + "lastModified": 1644944726, + "narHash": "sha256-jJWdP/3Ne1y1akC3m9rSO5ItRoBc4UTdVQZBCuPmmrM=", + "owner": "L-as", + "repo": "haskell.nix", + "rev": "45c583b5580c130487eb5a342679f0bdbc2b23fc", + "type": "github" + }, + "original": { + "owner": "L-as", + "ref": "master", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_24": { + "flake": false, + "locked": { + "lastModified": 1629380841, + "narHash": "sha256-gWOWCfX7IgVSvMMYN6rBGK6EA0pk6pmYguXzMvGte+Q=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "7215f083b37741446aa325b20c8ba9f9f76015eb", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_25": { + "inputs": { + "HTTP": "HTTP_13", + "cabal-32": "cabal-32_13", + "cabal-34": "cabal-34_13", + "cabal-36": "cabal-36_13", + "cardano-shell": "cardano-shell_13", + "flake-utils": "flake-utils_38", + "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_13", + "hackage": "hackage_13", + "hpc-coveralls": "hpc-coveralls_13", + "hydra": "hydra_12", + "nix-tools": "nix-tools_13", + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-2003": "nixpkgs-2003_13", + "nixpkgs-2105": "nixpkgs-2105_13", + "nixpkgs-2111": "nixpkgs-2111_26", + "nixpkgs-unstable": "nixpkgs-unstable_13", + "old-ghc-nix": "old-ghc-nix_13", + "stackage": "stackage_13" + }, "locked": { "lastModified": 1654068838, "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", @@ -5690,7 +6201,7 @@ "type": "github" } }, - "haskell-nix_24": { + "haskell-nix_26": { "flake": false, "locked": { "lastModified": 1651151636, @@ -5721,7 +6232,7 @@ "nix-tools": "nix-tools_2", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5778,7 +6289,7 @@ "nix-tools": "nix-tools_3", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5827,13 +6338,15 @@ "cabal-34": "cabal-34_4", "cabal-36": "cabal-36_4", "cardano-shell": "cardano-shell_4", - "flake-utils": "flake-utils_10", + "flake-utils": "flake-utils_12", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_4", "hackage": "hackage_4", "hpc-coveralls": "hpc-coveralls_4", "hydra": "hydra_4", "nix-tools": "nix-tools_4", "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5889,7 +6402,6 @@ "hydra": "hydra_5", "nix-tools": "nix-tools_5", "nixpkgs": [ - "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -5933,6 +6445,23 @@ } }, "heist_10": { + "flake": false, + "locked": { + "lastModified": 1653169917, + "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", + "owner": "srid", + "repo": "heist", + "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "emanote", + "repo": "heist", + "type": "github" + } + }, + "heist_11": { "flake": false, "locked": { "lastModified": 1649279862, @@ -6123,7 +6652,25 @@ }, "hercules-ci-effects_11": { "inputs": { - "nixpkgs": "nixpkgs_53" + "nixpkgs": "nixpkgs_52" + }, + "locked": { + "lastModified": 1653841712, + "narHash": "sha256-XBF4i1MuIRAEbFpj3Z3fVaYxzNEsYapyENtw3vG+q1I=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "e14d2131b7c81acca3904b584ac45fb72da64dd2", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "type": "github" + } + }, + "hercules-ci-effects_12": { + "inputs": { + "nixpkgs": "nixpkgs_58" }, "locked": { "lastModified": 1647711660, @@ -6139,9 +6686,9 @@ "type": "github" } }, - "hercules-ci-effects_12": { + "hercules-ci-effects_13": { "inputs": { - "nixpkgs": "nixpkgs_56" + "nixpkgs": "nixpkgs_61" }, "locked": { "lastModified": 1653841712, @@ -6195,7 +6742,7 @@ }, "hercules-ci-effects_4": { "inputs": { - "nixpkgs": "nixpkgs_17" + "nixpkgs": "nixpkgs_19" }, "locked": { "lastModified": 1653841712, @@ -6365,6 +6912,22 @@ "type": "github" } }, + "hpc-coveralls_13": { + "flake": false, + "locked": { + "lastModified": 1607498076, + "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", + "type": "github" + }, + "original": { + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "type": "github" + } + }, "hpc-coveralls_2": { "flake": false, "locked": { @@ -6589,7 +7152,9 @@ "nix": "nix_10", "nixpkgs": [ "plutarch-safe-money", - "plutarch", + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", "haskell-nix", "hydra", "nix", @@ -6612,6 +7177,31 @@ "hydra_11": { "inputs": { "nix": "nix_11", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix", + "hydra", + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1646878427, + "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "owner": "NixOS", + "repo": "hydra", + "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", + "type": "github" + }, + "original": { + "id": "hydra", + "type": "indirect" + } + }, + "hydra_12": { + "inputs": { + "nix": "nix_12", "nixpkgs": [ "plutarch-script-export", "plutarch", @@ -6639,7 +7229,7 @@ "nix": "nix_2", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "hydra", @@ -6665,7 +7255,7 @@ "nix": "nix_3", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "hydra", @@ -6690,6 +7280,8 @@ "inputs": { "nix": "nix_4", "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -6714,7 +7306,6 @@ "inputs": { "nix": "nix_5", "nixpkgs": [ - "plutarch-context-builder", "plutarch", "haskell-nix", "hydra", @@ -6739,7 +7330,7 @@ "inputs": { "nix": "nix_6", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "hydra", @@ -6764,7 +7355,7 @@ "inputs": { "nix": "nix_7", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "hydra", @@ -6789,8 +7380,7 @@ "inputs": { "nix": "nix_8", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -6817,7 +7407,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix", "hydra", @@ -7047,6 +7636,38 @@ } }, "iohk-nix_21": { + "flake": false, + "locked": { + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_22": { + "flake": false, + "locked": { + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_23": { "flake": false, "locked": { "lastModified": 1643251385, @@ -7062,7 +7683,7 @@ "type": "github" } }, - "iohk-nix_22": { + "iohk-nix_24": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7078,7 +7699,7 @@ "type": "github" } }, - "iohk-nix_23": { + "iohk-nix_25": { "flake": false, "locked": { "lastModified": 1653579289, @@ -7094,7 +7715,7 @@ "type": "github" } }, - "iohk-nix_24": { + "iohk-nix_26": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7239,6 +7860,22 @@ } }, "ixset-typed_10": { + "flake": false, + "locked": { + "lastModified": 1652177108, + "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", + "owner": "well-typed", + "repo": "ixset-typed", + "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "type": "github" + }, + "original": { + "owner": "well-typed", + "repo": "ixset-typed", + "type": "github" + } + }, + "ixset-typed_11": { "flake": false, "locked": { "lastModified": 1639657838, @@ -7384,7 +8021,7 @@ }, "lint-utils": { "inputs": { - "flake-utils": "flake-utils_30", + "flake-utils": "flake-utils_33", "nixpkgs": [ "plutarch-safe-money", "plutarch-numeric", @@ -7425,27 +8062,28 @@ "nixpkgs-2111": "nixpkgs-2111", "nixpkgs-latest": "nixpkgs-latest", "plutarch": "plutarch", + "plutarch-context-builder": "plutarch-context-builder", "plutarch-numeric": "plutarch-numeric", "plutarch-quickcheck": "plutarch-quickcheck" }, "locked": { - "lastModified": 1657959892, - "narHash": "sha256-DKIu0T87UjhaQ96NdibFiIfvnQLN/eJYuLMiPgQmmT8=", + "lastModified": 1658864114, + "narHash": "sha256-6lMJubbJOVNFe/chEFmbGStI+Pm7zy1+t2wPcDVSiv8=", "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "a951b85d15e7cca1a03dd2a8e36b60fae561d74a", + "rev": "fb6d4d1fc73b1c5ff90b5356e8cb3367213aeae0", "type": "github" }, "original": { "owner": "Liqwid-Labs", + "ref": "seungheonoh/agoraUtils", "repo": "liqwid-plutarch-extra", - "rev": "a951b85d15e7cca1a03dd2a8e36b60fae561d74a", "type": "github" } }, "liqwid-plutarch-extra_2": { "inputs": { - "haskell-language-server": "haskell-language-server_22", + "haskell-language-server": "haskell-language-server_25", "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -7458,9 +8096,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_15", - "nixpkgs-latest": "nixpkgs-latest_15", - "plutarch": "plutarch_8", + "nixpkgs-2111": "nixpkgs-2111_17", + "nixpkgs-latest": "nixpkgs-latest_17", + "plutarch": "plutarch_9", "plutarch-quickcheck": "plutarch-quickcheck_3" }, "locked": { @@ -7526,6 +8164,22 @@ "type": "github" } }, + "lowdown-src_12": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, "lowdown-src_2": { "flake": false, "locked": { @@ -7708,6 +8362,22 @@ } }, "nix-tools_11": { + "flake": false, + "locked": { + "lastModified": 1649424170, + "narHash": "sha256-XgKXWispvv5RCvZzPb+p7e6Hy3LMuRjafKMl7kXzxGw=", + "owner": "input-output-hk", + "repo": "nix-tools", + "rev": "e109c94016e3b6e0db7ed413c793e2d4bdb24aa7", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "nix-tools", + "type": "github" + } + }, + "nix-tools_12": { "flake": false, "locked": { "lastModified": 1644395812, @@ -7723,7 +8393,7 @@ "type": "github" } }, - "nix-tools_12": { + "nix-tools_13": { "flake": false, "locked": { "lastModified": 1649424170, @@ -7891,7 +8561,7 @@ "nix_11": { "inputs": { "lowdown-src": "lowdown-src_11", - "nixpkgs": "nixpkgs_55", + "nixpkgs": "nixpkgs_51", "nixpkgs-regression": "nixpkgs-regression_11" }, "locked": { @@ -7909,6 +8579,27 @@ "type": "github" } }, + "nix_12": { + "inputs": { + "lowdown-src": "lowdown-src_12", + "nixpkgs": "nixpkgs_60", + "nixpkgs-regression": "nixpkgs-regression_12" + }, + "locked": { + "lastModified": 1643066034, + "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "owner": "NixOS", + "repo": "nix", + "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, "nix_2": { "inputs": { "lowdown-src": "lowdown-src_2", @@ -7954,7 +8645,7 @@ "nix_4": { "inputs": { "lowdown-src": "lowdown-src_4", - "nixpkgs": "nixpkgs_16", + "nixpkgs": "nixpkgs_18", "nixpkgs-regression": "nixpkgs-regression_4" }, "locked": { @@ -8157,6 +8848,22 @@ "type": "github" } }, + "nixpkgs-2003_13": { + "locked": { + "lastModified": 1620055814, + "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-20.03-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2003_2": { "locked": { "lastModified": 1620055814, @@ -8318,6 +9025,22 @@ } }, "nixpkgs-2105_11": { + "locked": { + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.05-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2105_12": { "locked": { "lastModified": 1642244250, "narHash": "sha256-vWpUEqQdVP4srj+/YLJRTN9vjpTs4je0cdWKXPbDItc=", @@ -8333,7 +9056,7 @@ "type": "github" } }, - "nixpkgs-2105_12": { + "nixpkgs-2105_13": { "locked": { "lastModified": 1645296114, "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", @@ -8511,11 +9234,11 @@ }, "nixpkgs-2111_11": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1652298859, + "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "051448e41537c3463ae776d46115d01afb6c498d", "type": "github" }, "original": { @@ -8543,11 +9266,11 @@ }, "nixpkgs-2111_13": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1653319070, + "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", "type": "github" }, "original": { @@ -8575,11 +9298,11 @@ }, "nixpkgs-2111_15": { "locked": { - "lastModified": 1654115789, - "narHash": "sha256-k9Qr8dLrmgEn+xIVbneJdQgCYG8FbbqOrTVaExUrLFI=", + "lastModified": 1652364845, + "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bce6d15455f8c15c9ef511368947e7ef789c5316", + "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", "type": "github" }, "original": { @@ -8607,11 +9330,11 @@ }, "nixpkgs-2111_17": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1654115789, + "narHash": "sha256-k9Qr8dLrmgEn+xIVbneJdQgCYG8FbbqOrTVaExUrLFI=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "bce6d15455f8c15c9ef511368947e7ef789c5316", "type": "github" }, "original": { @@ -8639,11 +9362,11 @@ }, "nixpkgs-2111_19": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1652364845, + "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", "type": "github" }, "original": { @@ -8703,11 +9426,11 @@ }, "nixpkgs-2111_22": { "locked": { - "lastModified": 1644510859, - "narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=", + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", "type": "github" }, "original": { @@ -8719,11 +9442,11 @@ }, "nixpkgs-2111_23": { "locked": { - "lastModified": 1656492155, - "narHash": "sha256-oKWpYhhgZ2Yt4BZHKSFwJSwOAoFawWxNiW0y7wpde+I=", + "lastModified": 1653319070, + "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7a5ca644cc5e96336e7717aca871f01320c2df09", + "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", "type": "github" }, "original": { @@ -8735,11 +9458,11 @@ }, "nixpkgs-2111_24": { "locked": { - "lastModified": 1648744337, - "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "lastModified": 1644510859, + "narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3", "type": "github" }, "original": { @@ -8749,13 +9472,13 @@ "type": "github" } }, - "nixpkgs-2111_3": { + "nixpkgs-2111_25": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1656492155, + "narHash": "sha256-oKWpYhhgZ2Yt4BZHKSFwJSwOAoFawWxNiW0y7wpde+I=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "7a5ca644cc5e96336e7717aca871f01320c2df09", "type": "github" }, "original": { @@ -8765,7 +9488,7 @@ "type": "github" } }, - "nixpkgs-2111_4": { + "nixpkgs-2111_26": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -8781,13 +9504,13 @@ "type": "github" } }, - "nixpkgs-2111_5": { + "nixpkgs-2111_3": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1652298859, + "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "051448e41537c3463ae776d46115d01afb6c498d", "type": "github" }, "original": { @@ -8797,7 +9520,7 @@ "type": "github" } }, - "nixpkgs-2111_6": { + "nixpkgs-2111_4": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -8813,13 +9536,13 @@ "type": "github" } }, - "nixpkgs-2111_7": { + "nixpkgs-2111_5": { "locked": { - "lastModified": 1655415671, - "narHash": "sha256-WD7HxxW1m8D/fkV1QlCYlZvnE5gQdg7ckq3myI4gPtE=", + "lastModified": 1653319070, + "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f96729212602f15a6a226d2f27f5de70492ad095", + "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", "type": "github" }, "original": { @@ -8829,7 +9552,39 @@ "type": "github" } }, - "nixpkgs-2111_8": { + "nixpkgs-2111_6": { + "locked": { + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_7": { + "locked": { + "lastModified": 1652364845, + "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_8": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -8847,11 +9602,11 @@ }, "nixpkgs-2111_9": { "locked": { - "lastModified": 1652298859, - "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "051448e41537c3463ae776d46115d01afb6c498d", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9117,6 +9872,38 @@ "type": "github" } }, + "nixpkgs-latest_24": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, + "nixpkgs-latest_25": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, "nixpkgs-latest_3": { "locked": { "lastModified": 1653918805, @@ -9274,6 +10061,21 @@ "type": "indirect" } }, + "nixpkgs-regression_12": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, "nixpkgs-regression_2": { "locked": { "lastModified": 1643052045, @@ -9427,6 +10229,22 @@ } }, "nixpkgs-unstable_11": { + "locked": { + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-unstable_12": { "locked": { "lastModified": 1644486793, "narHash": "sha256-EeijR4guVHgVv+JpOX3cQO+1XdrkJfGmiJ9XVsVU530=", @@ -9442,7 +10260,7 @@ "type": "github" } }, - "nixpkgs-unstable_12": { + "nixpkgs-unstable_13": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -9683,63 +10501,60 @@ }, "nixpkgs_16": { "locked": { - "lastModified": 1632864508, - "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", - "owner": "NixOS", + "lastModified": 1652885393, + "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", + "owner": "nixos", "repo": "nixpkgs", - "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", "type": "github" }, "original": { - "id": "nixpkgs", - "ref": "nixos-21.05-small", - "type": "indirect" + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_17": { "locked": { - "lastModified": 1647297614, - "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "lastModified": 1653117584, + "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, "nixpkgs_18": { - "flake": false, "locked": { - "lastModified": 1645493675, - "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", "type": "github" }, "original": { - "owner": "NixOS", - "ref": "nixpkgs-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" } }, "nixpkgs_19": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" @@ -9760,17 +10575,20 @@ } }, "nixpkgs_20": { + "flake": false, "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_21": { @@ -10244,17 +11062,17 @@ }, "nixpkgs_49": { "locked": { - "lastModified": 1650882267, - "narHash": "sha256-BFKiz8srATQIBuFEN2HgS2EHisK29EjZ/HV34wSr2lU=", + "lastModified": 1652885393, + "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", "owner": "nixos", "repo": "nixpkgs", - "rev": "2ea2f7b6d0cb7ce0712f2aa80303cda08deb0de2", + "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", "type": "github" }, "original": { "owner": "nixos", + "ref": "nixos-unstable", "repo": "nixpkgs", - "rev": "2ea2f7b6d0cb7ce0712f2aa80303cda08deb0de2", "type": "github" } }, @@ -10276,6 +11094,84 @@ } }, "nixpkgs_50": { + "locked": { + "lastModified": 1653117584, + "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_51": { + "locked": { + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" + } + }, + "nixpkgs_52": { + "locked": { + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_53": { + "flake": false, + "locked": { + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_54": { + "locked": { + "lastModified": 1650882267, + "narHash": "sha256-BFKiz8srATQIBuFEN2HgS2EHisK29EjZ/HV34wSr2lU=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2ea2f7b6d0cb7ce0712f2aa80303cda08deb0de2", + "type": "github" + }, + "original": { + "owner": "nixos", + "repo": "nixpkgs", + "rev": "2ea2f7b6d0cb7ce0712f2aa80303cda08deb0de2", + "type": "github" + } + }, + "nixpkgs_55": { "locked": { "lastModified": 1647350163, "narHash": "sha256-OcMI+PFEHTONthXuEQNddt16Ml7qGvanL3x8QOl2Aao=", @@ -10291,7 +11187,7 @@ "type": "github" } }, - "nixpkgs_51": { + "nixpkgs_56": { "locked": { "lastModified": 1649456639, "narHash": "sha256-rZCjaEAZgOtT9kYTBigksof64SqKAXOuoHhlzHvfl0E=", @@ -10307,7 +11203,7 @@ "type": "github" } }, - "nixpkgs_52": { + "nixpkgs_57": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10321,7 +11217,7 @@ "type": "indirect" } }, - "nixpkgs_53": { + "nixpkgs_58": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10337,7 +11233,7 @@ "type": "github" } }, - "nixpkgs_54": { + "nixpkgs_59": { "flake": false, "locked": { "lastModified": 1628785280, @@ -10354,7 +11250,23 @@ "type": "github" } }, - "nixpkgs_55": { + "nixpkgs_6": { + "locked": { + "lastModified": 1652885393, + "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", + "owner": "nixos", + "repo": "nixpkgs", + "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "type": "github" + }, + "original": { + "owner": "nixos", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_60": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -10369,7 +11281,7 @@ "type": "indirect" } }, - "nixpkgs_56": { + "nixpkgs_61": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10385,7 +11297,7 @@ "type": "github" } }, - "nixpkgs_57": { + "nixpkgs_62": { "flake": false, "locked": { "lastModified": 1645493675, @@ -10402,22 +11314,6 @@ "type": "github" } }, - "nixpkgs_6": { - "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_7": { "locked": { "lastModified": 1653117584, @@ -10531,6 +11427,23 @@ "type": "github" } }, + "old-ghc-nix_13": { + "flake": false, + "locked": { + "lastModified": 1631092763, + "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", + "owner": "angerman", + "repo": "old-ghc-nix", + "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", + "type": "github" + }, + "original": { + "owner": "angerman", + "ref": "master", + "repo": "old-ghc-nix", + "type": "github" + } + }, "old-ghc-nix_2": { "flake": false, "locked": { @@ -10685,6 +11598,23 @@ } }, "pandoc-link-context_10": { + "flake": false, + "locked": { + "lastModified": 1653170888, + "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", + "owner": "srid", + "repo": "pandoc-link-context", + "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "master", + "repo": "pandoc-link-context", + "type": "github" + } + }, + "pandoc-link-context_11": { "flake": false, "locked": { "lastModified": 1650932770, @@ -10839,9 +11769,9 @@ }, "pathtree": { "inputs": { - "flake-compat": "flake-compat_20", - "flake-utils": "flake-utils_31", - "nixpkgs": "nixpkgs_50" + "flake-compat": "flake-compat_22", + "flake-utils": "flake-utils_34", + "nixpkgs": "nixpkgs_55" }, "locked": { "lastModified": 1649011952, @@ -10897,39 +11827,73 @@ }, "plutarch-context-builder": { "inputs": { - "haskell-language-server": "haskell-language-server_12", + "haskell-language-server": "haskell-language-server_4", "haskell-nix": [ + "liqwid-plutarch-extra", "plutarch-context-builder", "plutarch", "haskell-nix" ], "nixpkgs": [ + "liqwid-plutarch-extra", "plutarch-context-builder", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_9", - "nixpkgs-latest": "nixpkgs-latest_9", - "plutarch": "plutarch_5" + "nixpkgs-2111": "nixpkgs-2111_3", + "nixpkgs-latest": "nixpkgs-latest_3", + "plutarch": "plutarch_2" }, "locked": { - "lastModified": 1658368717, - "narHash": "sha256-GAneUtaxaJSZLNkIGOTByx/Auuq1g3MhzBhTiqZ13+s=", + "lastModified": 1658268102, + "narHash": "sha256-RE8vhqLY9wXfJHt7933HSaezO3/eP/YmJVdqfbDbKN0=", + "owner": "liqwid-labs", + "repo": "plutarch-context-builder", + "rev": "1f2df0a09a3c60ee398c87723e9443d1c4c45102", + "type": "github" + }, + "original": { + "owner": "liqwid-labs", + "ref": "staging", + "repo": "plutarch-context-builder", + "type": "github" + } + }, + "plutarch-context-builder_2": { + "inputs": { + "haskell-language-server": "haskell-language-server_15", + "haskell-nix": [ + "plutarch-context-builder", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-context-builder", + "plutarch", + "nixpkgs" + ], + "nixpkgs-2111": "nixpkgs-2111_11", + "nixpkgs-latest": "nixpkgs-latest_11", + "plutarch": "plutarch_6" + }, + "locked": { + "lastModified": 1658175311, + "narHash": "sha256-Wa7OKZGXeVDaruY3NcZ00CfLT0dy3cHp8xsjsCLwhs8=", "owner": "Liqwid-Labs", "repo": "plutarch-context-builder", - "rev": "2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9", + "rev": "62ab154fdcd8dd07a741e7955e078813aff4ed6a", "type": "github" }, "original": { "owner": "Liqwid-Labs", - "ref": "staging", + "ref": "62ab154fdcd8dd07a741e7955e078813aff4ed6a", "repo": "plutarch-context-builder", "type": "github" } }, "plutarch-numeric": { "inputs": { - "haskell-language-server": "haskell-language-server_4", + "haskell-language-server": "haskell-language-server_7", "haskell-nix": [ "liqwid-plutarch-extra", "plutarch-numeric", @@ -10942,9 +11906,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_3", - "nixpkgs-latest": "nixpkgs-latest_3", - "plutarch": "plutarch_2" + "nixpkgs-2111": "nixpkgs-2111_5", + "nixpkgs-latest": "nixpkgs-latest_5", + "plutarch": "plutarch_3" }, "locked": { "lastModified": 1655733533, @@ -10962,7 +11926,7 @@ }, "plutarch-numeric_2": { "inputs": { - "haskell-language-server": "haskell-language-server_15", + "haskell-language-server": "haskell-language-server_18", "haskell-nix": [ "plutarch-numeric", "plutarch", @@ -10973,16 +11937,16 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_11", - "nixpkgs-latest": "nixpkgs-latest_11", - "plutarch": "plutarch_6" + "nixpkgs-2111": "nixpkgs-2111_13", + "nixpkgs-latest": "nixpkgs-latest_13", + "plutarch": "plutarch_7" }, "locked": { - "lastModified": 1655733533, - "narHash": "sha256-HRSJUEQYYwr0HvYn6GwLmyYY7TXwZcYPAW0U8t6nmok=", + "lastModified": 1656613288, + "narHash": "sha256-h2rM+Ng/wyWwqRY41NbxPHBJLIfcqsjeCItYK7iQvR8=", "owner": "Liqwid-Labs", "repo": "plutarch-numeric", - "rev": "ce2d39dc366d9453b0f5df328bbb78f11e3b2ed6", + "rev": "da44b2af83f28276cf7466586a8e66291f104663", "type": "github" }, "original": { @@ -10994,7 +11958,7 @@ }, "plutarch-numeric_3": { "inputs": { - "haskell-language-server": "haskell-language-server_30", + "haskell-language-server": "haskell-language-server_33", "haskell-nix": [ "plutarch-safe-money", "plutarch-numeric", @@ -11007,9 +11971,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_21", - "nixpkgs-latest": "nixpkgs-latest_21", - "plutarch": "plutarch_11" + "nixpkgs-2111": "nixpkgs-2111_23", + "nixpkgs-latest": "nixpkgs-latest_23", + "plutarch": "plutarch_12" }, "locked": { "lastModified": 1654950823, @@ -11028,7 +11992,7 @@ }, "plutarch-quickcheck": { "inputs": { - "haskell-language-server": "haskell-language-server_7", + "haskell-language-server": "haskell-language-server_10", "haskell-nix": [ "liqwid-plutarch-extra", "plutarch-quickcheck", @@ -11041,9 +12005,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_5", - "nixpkgs-latest": "nixpkgs-latest_5", - "plutarch": "plutarch_3" + "nixpkgs-2111": "nixpkgs-2111_7", + "nixpkgs-latest": "nixpkgs-latest_7", + "plutarch": "plutarch_4" }, "locked": { "lastModified": 1655113586, @@ -11062,7 +12026,7 @@ }, "plutarch-quickcheck_2": { "inputs": { - "haskell-language-server": "haskell-language-server_18", + "haskell-language-server": "haskell-language-server_21", "haskell-nix": [ "plutarch-quickcheck", "plutarch", @@ -11073,9 +12037,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_13", - "nixpkgs-latest": "nixpkgs-latest_13", - "plutarch": "plutarch_7" + "nixpkgs-2111": "nixpkgs-2111_15", + "nixpkgs-latest": "nixpkgs-latest_15", + "plutarch": "plutarch_8" }, "locked": { "lastModified": 1655307888, @@ -11094,7 +12058,7 @@ }, "plutarch-quickcheck_3": { "inputs": { - "haskell-language-server": "haskell-language-server_25", + "haskell-language-server": "haskell-language-server_28", "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -11109,9 +12073,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_17", - "nixpkgs-latest": "nixpkgs-latest_17", - "plutarch": "plutarch_9" + "nixpkgs-2111": "nixpkgs-2111_19", + "nixpkgs-latest": "nixpkgs-latest_19", + "plutarch": "plutarch_10" }, "locked": { "lastModified": 1655113586, @@ -11130,7 +12094,7 @@ }, "plutarch-safe-money": { "inputs": { - "haskell-language-server": "haskell-language-server_21", + "haskell-language-server": "haskell-language-server_24", "haskell-nix": [ "plutarch-safe-money", "plutarch", @@ -11142,9 +12106,9 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_19", - "nixpkgs-latest": "nixpkgs-latest_19", - "plutarch": "plutarch_10", + "nixpkgs-2111": "nixpkgs-2111_21", + "nixpkgs-latest": "nixpkgs-latest_21", + "plutarch": "plutarch_11", "plutarch-numeric": "plutarch-numeric_3" }, "locked": { @@ -11174,16 +12138,16 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_23", - "nixpkgs-latest": "nixpkgs-latest_22", - "plutarch": "plutarch_12" + "nixpkgs-2111": "nixpkgs-2111_25", + "nixpkgs-latest": "nixpkgs-latest_24", + "plutarch": "plutarch_13" }, "locked": { - "lastModified": 1656599673, - "narHash": "sha256-+ZLiFYiMR/Xk2caFzyzhTWk/bruoK1i39LOwGZEOUp4=", + "lastModified": 1657374093, + "narHash": "sha256-96K/mcNI8lNto+gLSOhnGADQYfWrp3+PrZYKoNzSS1A=", "owner": "Liqwid-Labs", "repo": "plutarch-script-export", - "rev": "f27ac2b706c4239779be35f2e3b4971b386f7418", + "rev": "85c3b8a2ef856e7c18d3227e33fc2dd7bebf3bc1", "type": "github" }, "original": { @@ -11200,13 +12164,15 @@ "cardano-prelude": "cardano-prelude_10", "emanote": "emanote_9", "flat": "flat_10", - "haskell-language-server": "haskell-language-server_28", + "haskell-language-server": "haskell-language-server_29", "haskell-nix": "haskell-nix_19", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_10", "hercules-ci-effects": "hercules-ci-effects_10", "iohk-nix": "iohk-nix_19", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11231,24 +12197,62 @@ "type": "github" } }, - "plutarch_11": { + "plutarch_11": { + "inputs": { + "cardano-base": "cardano-base_11", + "cardano-crypto": "cardano-crypto_11", + "cardano-prelude": "cardano-prelude_11", + "emanote": "emanote_10", + "flat": "flat_11", + "haskell-language-server": "haskell-language-server_31", + "haskell-nix": "haskell-nix_21", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_11", + "hercules-ci-effects": "hercules-ci-effects_11", + "iohk-nix": "iohk-nix_21", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-latest": "nixpkgs-latest_22", + "plutus": "plutus_11", + "protolude": "protolude_11", + "secp256k1-haskell": "secp256k1-haskell_11" + }, + "locked": { + "lastModified": 1654108284, + "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", + "owner": "Liqwid-Labs", + "repo": "plutarch", + "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "ref": "staging", + "repo": "plutarch", + "type": "github" + } + }, + "plutarch_12": { "inputs": { "Shrinker": "Shrinker", - "cardano-base": "cardano-base_11", - "cardano-crypto": "cardano-crypto_11", - "cardano-prelude": "cardano-prelude_11", + "cardano-base": "cardano-base_12", + "cardano-crypto": "cardano-crypto_12", + "cardano-prelude": "cardano-prelude_12", "cryptonite": "cryptonite", - "emanote": "emanote_10", - "flat": "flat_11", + "emanote": "emanote_11", + "flat": "flat_12", "foundation": "foundation", - "haskell-language-server": "haskell-language-server_31", - "haskell-nix": "haskell-nix_21", - "hercules-ci-effects": "hercules-ci-effects_11", + "haskell-language-server": "haskell-language-server_34", + "haskell-nix": "haskell-nix_23", + "hercules-ci-effects": "hercules-ci-effects_12", "hs-memory": "hs-memory", "hspec": "hspec", "hspec-golden": "hspec-golden", "hspec-hedgehog": "hspec-hedgehog", - "iohk-nix": "iohk-nix_21", + "iohk-nix": "iohk-nix_23", "nixpkgs": [ "plutarch-safe-money", "plutarch-numeric", @@ -11256,8 +12260,8 @@ "haskell-nix", "nixpkgs-unstable" ], - "plutus": "plutus_11", - "protolude": "protolude_11", + "plutus": "plutus_12", + "protolude": "protolude_12", "sized-functors": "sized-functors", "th-extras": "th-extras" }, @@ -11276,33 +12280,33 @@ "type": "github" } }, - "plutarch_12": { + "plutarch_13": { "inputs": { - "cardano-base": "cardano-base_12", - "cardano-crypto": "cardano-crypto_12", - "cardano-prelude": "cardano-prelude_12", + "cardano-base": "cardano-base_13", + "cardano-crypto": "cardano-crypto_13", + "cardano-prelude": "cardano-prelude_13", "emanote": [ "plutarch-script-export", "plutarch", "haskell-nix", "nixpkgs-unstable" ], - "flat": "flat_12", - "haskell-language-server": "haskell-language-server_33", - "haskell-nix": "haskell-nix_23", - "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_11", - "hercules-ci-effects": "hercules-ci-effects_12", - "iohk-nix": "iohk-nix_23", + "flat": "flat_13", + "haskell-language-server": "haskell-language-server_36", + "haskell-nix": "haskell-nix_25", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_12", + "hercules-ci-effects": "hercules-ci-effects_13", + "iohk-nix": "iohk-nix_25", "nixpkgs": [ "plutarch-script-export", "plutarch", "haskell-nix", "nixpkgs-unstable" ], - "nixpkgs-latest": "nixpkgs-latest_23", - "plutus": "plutus_12", - "protolude": "protolude_12", - "secp256k1-haskell": "secp256k1-haskell_11" + "nixpkgs-latest": "nixpkgs-latest_25", + "plutus": "plutus_13", + "protolude": "protolude_13", + "secp256k1-haskell": "secp256k1-haskell_12" }, "locked": { "lastModified": 1654108284, @@ -11333,7 +12337,7 @@ "iohk-nix": "iohk-nix_3", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11372,7 +12376,7 @@ "iohk-nix": "iohk-nix_5", "nixpkgs": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11402,18 +12406,16 @@ "cardano-base": "cardano-base_4", "cardano-crypto": "cardano-crypto_4", "cardano-prelude": "cardano-prelude_4", - "emanote": [ - "plutarch", - "haskell-nix", - "nixpkgs-unstable" - ], + "emanote": "emanote_4", "flat": "flat_4", - "haskell-language-server": "haskell-language-server_10", + "haskell-language-server": "haskell-language-server_11", "haskell-nix": "haskell-nix_7", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_4", "hercules-ci-effects": "hercules-ci-effects_4", "iohk-nix": "iohk-nix_7", "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11426,15 +12428,15 @@ "locked": { "lastModified": 1654108284, "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "liqwid-labs", + "owner": "Liqwid-Labs", "repo": "plutarch", "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" }, "original": { - "owner": "liqwid-labs", + "owner": "Liqwid-Labs", + "ref": "staging", "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" } }, @@ -11443,7 +12445,11 @@ "cardano-base": "cardano-base_5", "cardano-crypto": "cardano-crypto_5", "cardano-prelude": "cardano-prelude_5", - "emanote": "emanote_4", + "emanote": [ + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_5", "haskell-language-server": "haskell-language-server_13", "haskell-nix": "haskell-nix_9", @@ -11451,7 +12457,6 @@ "hercules-ci-effects": "hercules-ci-effects_5", "iohk-nix": "iohk-nix_9", "nixpkgs": [ - "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11464,15 +12469,15 @@ "locked": { "lastModified": 1654108284, "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", + "owner": "liqwid-labs", "repo": "plutarch", "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" }, "original": { - "owner": "Liqwid-Labs", - "ref": "staging", + "owner": "liqwid-labs", "repo": "plutarch", + "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", "type": "github" } }, @@ -11489,7 +12494,7 @@ "hercules-ci-effects": "hercules-ci-effects_6", "iohk-nix": "iohk-nix_11", "nixpkgs": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11527,7 +12532,7 @@ "hercules-ci-effects": "hercules-ci-effects_7", "iohk-nix": "iohk-nix_13", "nixpkgs": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11559,14 +12564,13 @@ "cardano-prelude": "cardano-prelude_8", "emanote": "emanote_7", "flat": "flat_8", - "haskell-language-server": "haskell-language-server_23", + "haskell-language-server": "haskell-language-server_22", "haskell-nix": "haskell-nix_15", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_8", "hercules-ci-effects": "hercules-ci-effects_8", "iohk-nix": "iohk-nix_15", "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11606,7 +12610,6 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -11662,7 +12665,7 @@ "cardano-repo-tool": "cardano-repo-tool_10", "gitignore-nix": "gitignore-nix_10", "hackage-nix": "hackage-nix_10", - "haskell-language-server": "haskell-language-server_29", + "haskell-language-server": "haskell-language-server_30", "haskell-nix": "haskell-nix_20", "iohk-nix": "iohk-nix_20", "nixpkgs": "nixpkgs_48", @@ -11691,22 +12694,20 @@ "haskell-language-server": "haskell-language-server_32", "haskell-nix": "haskell-nix_22", "iohk-nix": "iohk-nix_22", - "nixpkgs": "nixpkgs_54", + "nixpkgs": "nixpkgs_53", "pre-commit-hooks-nix": "pre-commit-hooks-nix_11", - "sphinxcontrib-haddock": "sphinxcontrib-haddock_11", - "stackage-nix": "stackage-nix" + "sphinxcontrib-haddock": "sphinxcontrib-haddock_11" }, "locked": { - "lastModified": 1645203653, - "narHash": "sha256-HAi60mSkyMXzu1Wg3h6KdYZg+ufNMvX6obfcLo0ArL0=", - "owner": "L-as", + "lastModified": 1653669501, + "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "owner": "input-output-hk", "repo": "plutus", - "rev": "5ec17953aae3ac9546f6d923201eb1dbb4e058bb", + "rev": "fed48a71550a12290efc84eefb74305d93cde69d", "type": "github" }, "original": { - "owner": "L-as", - "ref": "ghc9", + "owner": "input-output-hk", "repo": "plutus", "type": "github" } @@ -11716,12 +12717,40 @@ "cardano-repo-tool": "cardano-repo-tool_12", "gitignore-nix": "gitignore-nix_12", "hackage-nix": "hackage-nix_12", - "haskell-language-server": "haskell-language-server_34", + "haskell-language-server": "haskell-language-server_35", "haskell-nix": "haskell-nix_24", "iohk-nix": "iohk-nix_24", - "nixpkgs": "nixpkgs_57", + "nixpkgs": "nixpkgs_59", "pre-commit-hooks-nix": "pre-commit-hooks-nix_12", - "sphinxcontrib-haddock": "sphinxcontrib-haddock_12" + "sphinxcontrib-haddock": "sphinxcontrib-haddock_12", + "stackage-nix": "stackage-nix" + }, + "locked": { + "lastModified": 1645203653, + "narHash": "sha256-HAi60mSkyMXzu1Wg3h6KdYZg+ufNMvX6obfcLo0ArL0=", + "owner": "L-as", + "repo": "plutus", + "rev": "5ec17953aae3ac9546f6d923201eb1dbb4e058bb", + "type": "github" + }, + "original": { + "owner": "L-as", + "ref": "ghc9", + "repo": "plutus", + "type": "github" + } + }, + "plutus_13": { + "inputs": { + "cardano-repo-tool": "cardano-repo-tool_13", + "gitignore-nix": "gitignore-nix_13", + "hackage-nix": "hackage-nix_13", + "haskell-language-server": "haskell-language-server_37", + "haskell-nix": "haskell-nix_26", + "iohk-nix": "iohk-nix_26", + "nixpkgs": "nixpkgs_62", + "pre-commit-hooks-nix": "pre-commit-hooks-nix_13", + "sphinxcontrib-haddock": "sphinxcontrib-haddock_13" }, "locked": { "lastModified": 1653669501, @@ -11794,10 +12823,10 @@ "cardano-repo-tool": "cardano-repo-tool_4", "gitignore-nix": "gitignore-nix_4", "hackage-nix": "hackage-nix_4", - "haskell-language-server": "haskell-language-server_11", + "haskell-language-server": "haskell-language-server_12", "haskell-nix": "haskell-nix_8", "iohk-nix": "iohk-nix_8", - "nixpkgs": "nixpkgs_18", + "nixpkgs": "nixpkgs_20", "pre-commit-hooks-nix": "pre-commit-hooks-nix_4", "sphinxcontrib-haddock": "sphinxcontrib-haddock_4" }, @@ -11898,7 +12927,7 @@ "cardano-repo-tool": "cardano-repo-tool_8", "gitignore-nix": "gitignore-nix_8", "hackage-nix": "hackage-nix_8", - "haskell-language-server": "haskell-language-server_24", + "haskell-language-server": "haskell-language-server_23", "haskell-nix": "haskell-nix_16", "iohk-nix": "iohk-nix_16", "nixpkgs": "nixpkgs_38", @@ -12009,6 +13038,22 @@ "type": "github" } }, + "pre-commit-hooks-nix_13": { + "flake": false, + "locked": { + "lastModified": 1624971177, + "narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix_2": { "flake": false, "locked": { @@ -12170,6 +13215,22 @@ } }, "protolude_11": { + "flake": false, + "locked": { + "lastModified": 1647139352, + "narHash": "sha256-JyHAQfTTUswP8MeGEZibx/2/v01Q7cU5mNpnmDazh24=", + "owner": "protolude", + "repo": "protolude", + "rev": "3e249724fd0ead27370c8c297b1ecd38f92cbd5b", + "type": "github" + }, + "original": { + "owner": "protolude", + "repo": "protolude", + "type": "github" + } + }, + "protolude_12": { "flake": false, "locked": { "lastModified": 1637276813, @@ -12186,7 +13247,7 @@ "type": "github" } }, - "protolude_12": { + "protolude_13": { "flake": false, "locked": { "lastModified": 1647139352, @@ -12341,10 +13402,10 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_7", - "nixpkgs-latest": "nixpkgs-latest_7", - "plutarch": "plutarch_4", - "plutarch-context-builder": "plutarch-context-builder", + "nixpkgs-2111": "nixpkgs-2111_9", + "nixpkgs-latest": "nixpkgs-latest_9", + "plutarch": "plutarch_5", + "plutarch-context-builder": "plutarch-context-builder_2", "plutarch-numeric": "plutarch-numeric_2", "plutarch-quickcheck": "plutarch-quickcheck_2", "plutarch-safe-money": "plutarch-safe-money", @@ -12399,6 +13460,22 @@ "type": "github" } }, + "secp256k1-haskell_12": { + "flake": false, + "locked": { + "lastModified": 1650290419, + "narHash": "sha256-XrjiqCC7cNTFib78gdMPGNettAkwAxQlbC/n+/mRFt4=", + "owner": "haskoin", + "repo": "secp256k1-haskell", + "rev": "3df963ab6ae14ec122691a97af09a7331511a387", + "type": "github" + }, + "original": { + "owner": "haskoin", + "repo": "secp256k1-haskell", + "type": "github" + } + }, "secp256k1-haskell_2": { "flake": false, "locked": { @@ -12608,6 +13685,22 @@ "type": "github" } }, + "sphinxcontrib-haddock_13": { + "flake": false, + "locked": { + "lastModified": 1594136664, + "narHash": "sha256-O9YT3iCUBHP3CEF88VDLLCO2HSP3HqkNA2q2939RnVY=", + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "rev": "f3956b3256962b2d27d5a4e96edb7951acf5de34", + "type": "github" + }, + "original": { + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "type": "github" + } + }, "sphinxcontrib-haddock_2": { "flake": false, "locked": { @@ -12785,6 +13878,22 @@ } }, "stackage_11": { + "flake": false, + "locked": { + "lastModified": 1654046327, + "narHash": "sha256-IxX46Dh4OZpF3k7KPMa3tZSScYYGqFxXpCnMc0QRkuQ=", + "owner": "input-output-hk", + "repo": "stackage.nix", + "rev": "cc1d778723fcd431f9b2ed632a50c610c3e38b54", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "stackage.nix", + "type": "github" + } + }, + "stackage_12": { "flake": false, "locked": { "lastModified": 1644887829, @@ -12800,7 +13909,7 @@ "type": "github" } }, - "stackage_12": { + "stackage_13": { "flake": false, "locked": { "lastModified": 1654046327, @@ -12973,9 +14082,36 @@ }, "tailwind-haskell_10": { "inputs": { - "flake-compat": "flake-compat_21", - "flake-utils": "flake-utils_32", - "nixpkgs": "nixpkgs_51" + "ema": [ + "plutarch-safe-money", + "plutarch", + "emanote", + "ema" + ], + "flake-compat": "flake-compat_20", + "flake-utils": "flake-utils_30", + "nixpkgs": "nixpkgs_50" + }, + "locked": { + "lastModified": 1653230344, + "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", + "owner": "srid", + "repo": "tailwind-haskell", + "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", + "type": "github" + }, + "original": { + "owner": "srid", + "ref": "master", + "repo": "tailwind-haskell", + "type": "github" + } + }, + "tailwind-haskell_11": { + "inputs": { + "flake-compat": "flake-compat_23", + "flake-utils": "flake-utils_35", + "nixpkgs": "nixpkgs_56" }, "locked": { "lastModified": 1649519562, @@ -12996,7 +14132,7 @@ "inputs": { "ema": [ "liqwid-plutarch-extra", - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema" @@ -13024,7 +14160,7 @@ "inputs": { "ema": [ "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema" @@ -13051,14 +14187,15 @@ "tailwind-haskell_4": { "inputs": { "ema": [ - "plutarch-context-builder", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema" ], "flake-compat": "flake-compat_8", - "flake-utils": "flake-utils_12", - "nixpkgs": "nixpkgs_20" + "flake-utils": "flake-utils_11", + "nixpkgs": "nixpkgs_17" }, "locked": { "lastModified": 1653230344, @@ -13078,7 +14215,7 @@ "tailwind-haskell_5": { "inputs": { "ema": [ - "plutarch-numeric", + "plutarch-context-builder", "plutarch", "emanote", "ema" @@ -13105,7 +14242,7 @@ "tailwind-haskell_6": { "inputs": { "ema": [ - "plutarch-quickcheck", + "plutarch-numeric", "plutarch", "emanote", "ema" @@ -13132,8 +14269,7 @@ "tailwind-haskell_7": { "inputs": { "ema": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema" @@ -13162,7 +14298,6 @@ "ema": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "emanote", "ema" @@ -13190,6 +14325,8 @@ "inputs": { "ema": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "emanote", "ema" @@ -13232,9 +14369,9 @@ }, "unionmount": { "inputs": { - "flake-compat": "flake-compat_22", - "flake-utils": "flake-utils_33", - "nixpkgs": "nixpkgs_52" + "flake-compat": "flake-compat_24", + "flake-utils": "flake-utils_36", + "nixpkgs": "nixpkgs_57" }, "locked": { "lastModified": 1649012450, diff --git a/flake.nix b/flake.nix index 6d915d79..946bb746 100644 --- a/flake.nix +++ b/flake.nix @@ -17,7 +17,7 @@ "plutarch/haskell-nix/nixpkgs-unstable"; inputs.liqwid-plutarch-extra.url = - "github:Liqwid-Labs/liqwid-plutarch-extra?rev=a951b85d15e7cca1a03dd2a8e36b60fae561d74a"; + "github:Liqwid-Labs/liqwid-plutarch-extra?ref=seungheonoh/agoraUtils"; inputs.plutarch-numeric.url = "github:Liqwid-Labs/plutarch-numeric?ref=main"; inputs.plutarch-safe-money.url = @@ -29,8 +29,10 @@ # Testing inputs.plutarch-quickcheck.url = "github:liqwid-labs/plutarch-quickcheck?ref=staging"; + + # PCB Rev is locked until Agora test have explicit Minting CS. Check PCB PR #12 inputs.plutarch-context-builder.url = - "github:Liqwid-Labs/plutarch-context-builder?ref=staging"; + "github:Liqwid-Labs/plutarch-context-builder?ref=62ab154fdcd8dd07a741e7955e078813aff4ed6a"; outputs = inputs@{ self, nixpkgs, nixpkgs-latest, haskell-nix, plutarch, ... }: let From 309c8775ed47661d354c0927e1b01faa09232840 Mon Sep 17 00:00:00 2001 From: SeungheonOh Date: Wed, 27 Jul 2022 09:45:56 -0500 Subject: [PATCH 64/78] use utilities from LPE --- agora/Agora/Effect/GovernorMutation.hs | 19 +- agora/Agora/Effect/TreasuryWithdrawal.hs | 5 +- agora/Agora/Governor/Scripts.hs | 51 +- agora/Agora/Proposal.hs | 4 +- agora/Agora/Proposal/Scripts.hs | 5 +- agora/Agora/Stake/Scripts.hs | 5 +- bench.csv | 710 +++++++++++------------ flake.lock | 8 +- flake.nix | 2 +- 9 files changed, 405 insertions(+), 404 deletions(-) diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index aaa0a387..433b27c3 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -30,11 +30,6 @@ import Agora.Governor.Scripts ( governorSTAssetClassFromGovernor, ) import Agora.Plutarch.Orphans () -import Agora.Utils ( - isScriptAddress, - mustBePDJust, - mustBePJust, - ) import GHC.Generics qualified as GHC import Generics.SOP (Generic, I (I)) import Plutarch.Api.V1 ( @@ -42,13 +37,17 @@ import Plutarch.Api.V1 ( PValidator, PValue, ) -import Plutarch.Api.V1.ScriptContext (ptryFindDatum) +import Plutarch.Api.V1.ScriptContext (pisScriptAddress, ptryFindDatum) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pvalueOf) import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (PIsDataReprInstances), ) +import Plutarch.Extra.Maybe ( + passertPDJust, + passertPJust, + ) import Plutarch.Extra.TermCont (pguardC, pletFieldsC) import Plutarch.Lift (PConstantDecl, PLifted, PUnsafeLiftDecl) import PlutusLedgerApi.V1 (TxOutRef) @@ -167,7 +166,7 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) ( plam $ \inInfo count -> let address = pfield @"address" #$ pfield @"resolved" # inInfo in pif - (isScriptAddress # address) + (pisScriptAddress # address) (count + 1) count ) @@ -177,7 +176,7 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) -- Find the governor input by looking for GST. let inputWithGST = - mustBePJust # "Governor input not found" #$ pfind + passertPJust # "Governor input not found" #$ pfind # phoistAcyclic ( plam $ \inInfo -> let value = pfield @"value" #$ pfield @"resolved" # inInfo @@ -207,10 +206,10 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) gstValueOf # govOutput.value #== 1 let governorOutputDatumHash = - mustBePDJust # "Governor output doesn't have datum" # govOutput.datumHash + passertPDJust # "Governor output doesn't have datum" # govOutput.datumHash governorOutputDatum = pfromData @PGovernorDatum $ - mustBePJust # "Governor output datum not found" + passertPJust # "Governor output datum not found" #$ ptryFindDatum # governorOutputDatumHash # txInfoF.datums -- Ensure the output governor datum is what we want. diff --git a/agora/Agora/Effect/TreasuryWithdrawal.hs b/agora/Agora/Effect/TreasuryWithdrawal.hs index b170a4f1..3c185075 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 (isPubKey) import GHC.Generics qualified as GHC import Generics.SOP (Generic, I (I)) import Plutarch.Api.V1 ( @@ -27,7 +26,7 @@ import Plutarch.Api.V1 ( PValue, ptuple, ) -import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef) +import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisPubKey) import "plutarch" Plutarch.Api.V1.Value (pnormalize) import Plutarch.DataRepr ( DerivePConstantViaData (..), @@ -199,7 +198,7 @@ treasuryWithdrawalValidator currSymbol = makeEffect currSymbol $ ( \((pfield @"_0" #) . pfromData -> cred) -> cred #== pfield @"credential" # effInput.address #|| pelem # cred # datum.treasuries - #|| isPubKey # pfromData cred + #|| pisPubKey # pfromData cred ) # inputValues diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 13ae7e19..7bed9b5e 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -70,12 +70,7 @@ import Agora.Stake.Scripts ( stakeValidator, ) import Agora.Utils ( - findOutputsToAddress, - hasOnlyOneTokenOfCurrencySymbol, - mustBePDJust, - mustBePJust, mustFindDatum', - scriptHashFromAddress, validatorHashToAddress, validatorHashToTokenName, ) @@ -98,16 +93,26 @@ import Plutarch.Api.V1.AssetClass ( passetClass, passetClassValueOf, ) -import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, pisUTXOSpent, ptryFindDatum, pvalueSpent) -import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) -import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.IsData (pmatchEnumFromData) import Plutarch.Extra.List (pfirstJust) import Plutarch.Extra.Map ( plookup, plookup', ) -import Plutarch.Extra.Maybe (pisDJust) + +-------------------------------------------------------------------------------- + +import Plutarch.Api.V1.ScriptContext ( + pfindOutputsToAddress, + pfindTxInByTxOutRef, + pisUTXOSpent, + pscriptHashFromAddress, + ptryFindDatum, + pvalueSpent, + ) +import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (phasOnlyOneTokenOfCurrencySymbol, psymbolValueOf) +import Plutarch.Extra.Field (pletAllC) +import Plutarch.Extra.Maybe (passertPDJust, passertPJust, pisDJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import PlutusLedgerApi.V1 ( @@ -168,7 +173,7 @@ governorPolicy gov = govOutput <- pletC $ - mustBePJust + passertPJust # "Governor output not found" #$ pfind # plam @@ -282,7 +287,7 @@ governorValidator gov = ((pfield @"resolved" #) -> ownInput) <- pletC $ - mustBePJust # "Own input not found" + passertPJust # "Own input not found" #$ pfindTxInByTxOutRef # ownInputRef # txInfoF.inputs ownInputF <- pletFieldsC @'["address", "value"] ownInput let ownAddress = pfromData $ ownInputF.address @@ -295,7 +300,7 @@ governorValidator gov = pguardC "Own input should have exactly one state token" $ ownInputGSTAmount #== 1 - ownOutputs <- pletC $ findOutputsToAddress # txInfoF.outputs # ownAddress + ownOutputs <- pletC $ pfindOutputsToAddress # txInfoF.outputs # ownAddress pguardC "Exactly one utxo should be sent to the governor" $ plength # ownOutputs #== 1 @@ -306,11 +311,11 @@ governorValidator gov = -- Check that own output have datum of type 'GovernorDatum'. let outputGovernorStateDatumHash = - mustBePDJust # "Governor output doesn't have datum" # ownOutput.datumHash + passertPDJust # "Governor output doesn't have datum" # ownOutput.datumHash newGovernorDatum <- pletC $ pfromData $ - mustBePJust # "Ouput governor state datum not found" + passertPJust # "Ouput governor state datum not found" #$ ptryFindDatum # outputGovernorStateDatumHash # txInfoF.datums pguardC "New datum is valid" $ pisGovernorDatumValid # newGovernorDatum @@ -338,7 +343,7 @@ governorValidator gov = -- Check that exactly one proposal token is being minted. pguardC "Exactly one proposal token must be minted" $ - hasOnlyOneTokenOfCurrencySymbol # ppstSymbol # txInfoF.mint + phasOnlyOneTokenOfCurrencySymbol # ppstSymbol # txInfoF.mint -- Check that a stake is spent to create the propsal, -- and the value it contains meets the requirement. @@ -432,7 +437,7 @@ governorValidator gov = -- Check the output stake has been proposly updated. let stakeOutputDatumHash = - mustBePJust # "Output stake should be presented" + passertPJust # "Output stake should be presented" #$ pfirstJust # phoistAcyclic ( plam @@ -444,7 +449,7 @@ governorValidator gov = (psymbolValueOf # psstSymbol # txOutF.value #== 1) ( pcon $ PJust $ - mustBePDJust # "Output stake datum should be presented" + passertPDJust # "Output stake datum should be presented" # txOutF.datumHash ) (pcon PNothing) @@ -453,7 +458,7 @@ governorValidator gov = # pfromData txInfoF.outputs stakeOutputDatum = - mustBePJust @(PAsData PStakeDatum) # "Stake output datum presented" + passertPJust @(PAsData PStakeDatum) # "Stake output datum presented" #$ ptryFindDatum # stakeOutputDatumHash # txInfoF.datums stakeOutputLocks = @@ -489,7 +494,7 @@ governorValidator gov = pletFieldsC @'["datumHash"] $ pfield @"resolved" #$ pfromData - $ mustBePJust + $ passertPJust # "Proposal input not found" #$ pfind # plam @@ -555,14 +560,14 @@ governorValidator gov = output <- pletFieldsC @'["address", "datumHash"] $ output' let scriptHash = - mustBePJust # "GAT receiver is not a script" - #$ scriptHashFromAddress # output.address + passertPJust # "GAT receiver is not a script" + #$ pscriptHashFromAddress # output.address datumHash = - mustBePDJust # "Output to effect should have datum" + passertPDJust # "Output to effect should have datum" #$ output.datumHash expectedDatumHash = - mustBePJust # "Receiver is not in the effect list" + passertPJust # "Receiver is not in the effect list" #$ plookup # scriptHash # effects pure $ diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index cf7bddad..57ba411c 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -41,7 +41,6 @@ module Agora.Proposal ( import Agora.Proposal.Time (PProposalStartingTime, PProposalTimingConfig, ProposalStartingTime, ProposalTimingConfig) import Agora.SafeMoney (GTTag) -import Agora.Utils (withBuiltinPairAsData) import Data.Tagged (Tagged) import GHC.Generics qualified as GHC import Generics.SOP (Generic, I (I)) @@ -56,6 +55,7 @@ import Plutarch.Api.V1.AssocMap qualified as PAssocMap import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) import Plutarch.Extra.Comonad (pextract) import Plutarch.Extra.Field (pletAllC) +import Plutarch.Extra.Function (pbuiltinUncurry) import Plutarch.Extra.IsData ( DerivePConstantViaDataList (..), DerivePConstantViaEnum (..), @@ -836,7 +836,7 @@ pneutralOption = phoistAcyclic $ f = phoistAcyclic $ plam $ - withBuiltinPairAsData $ \rt el -> + pbuiltinUncurry $ \rt el -> pif (PAssocMap.pnull # el) (pcon $ PJust rt) diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index d79e508c..29cd9784 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -38,7 +38,6 @@ import Agora.Stake ( ) import Agora.Utils ( getMintingPolicySymbol, - mustBePJust, mustFindDatum', pltAsData, ) @@ -65,7 +64,7 @@ import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.IsData (pmatchEnum) import Plutarch.Extra.List (pisUniq', pmapMaybe, pmergeBy, pmsortBy) import Plutarch.Extra.Map (plookup, pupdate) -import Plutarch.Extra.Maybe (pfromDJust, pfromJust, pisJust) +import Plutarch.Extra.Maybe (passertPJust, pfromDJust, pfromJust, pisJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont ( pguardC, @@ -204,7 +203,7 @@ proposalValidator proposal = -- proposal inputs in one thansaction. ownOutput <- pletC $ - mustBePJust # "Own output should be present" #$ pfind + passertPJust # "Own output should be present" #$ pfind # plam ( \input -> unTermCont $ do inputF <- pletAllC input diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 26f8d908..ad57a96f 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -16,7 +16,6 @@ import Agora.Stake ( pstakeLocked, ) import Agora.Utils ( - mustBePJust, mustFindDatum', pdjust, pdnothing, @@ -44,7 +43,7 @@ import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, ptxSignedBy, pvalueSp import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pgeqByClass', pgeqBySymbol, psymbolValueOf) import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.List (pmapMaybe, pmsortBy) -import Plutarch.Extra.Maybe (pfromDJust) +import Plutarch.Extra.Maybe (passertPJust, pfromDJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.Internal (punsafeCoerce) @@ -126,7 +125,7 @@ stakePolicy gtClassRef = pguardC "A UTXO must exist with the correct output" $ unTermCont $ do let scriptOutputWithStakeST = - mustBePJust + passertPJust # "Output to script not found" #$ pfind # plam diff --git a/bench.csv b/bench.csv index 5c885db5..b5ca082a 100644 --- a/bench.csv +++ b/bench.csv @@ -12,567 +12,567 @@ Agora/Stake/validator/set delegate/remove existing delegate,110917776,287315,532 Agora/Stake/validator/set delegate/set delegate to something,110293742,288964,5328 Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/legal/governor,325452519,864627,8802 -Agora/Proposal/policy (proposal creation)/legal/stake,157193919,413288,5993 +Agora/Proposal/policy (proposal creation)/legal/stake,155649225,408558,5993 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,157193919,413288,5993 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,155649225,408558,5993 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1980 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,325452519,864627,8771 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2011 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2019 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,162627579,427938,6001 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,161082885,423208,6001 Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2031 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,163656411,431396,6023 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,162111717,426666,6023 Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,157193919,413288,5993 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,155649225,408558,5993 Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2007 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,157193919,413288,5989 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,155649225,408558,5989 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,157193919,413288,5993 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,155649225,408558,5993 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,157193919,413288,5993 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,155649225,408558,5993 Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,157193919,413288,5993 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,155649225,408558,5993 Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,236423139,660573,8414 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,126114994,329020,5801 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,124318976,323958,5801 Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,665645490,1853924,11068 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,542054602,1428352,8335 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,540258584,1423290,8335 Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1353965353,3721747,14387 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1157633197,3077923,11503 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,126114994,329020,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,126114994,329020,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,126114994,329020,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,126114994,329020,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,542054602,1428352,8335 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,542054602,1428352,8335 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,542054602,1428352,8335 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1157633197,3077923,11503 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1157633197,3077923,11503 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1157633197,3077923,11503 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1155837179,3072861,11503 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,124318976,323958,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,124318976,323958,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,124318976,323958,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,124318976,323958,5801 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,540258584,1423290,8335 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,540258584,1423290,8335 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,540258584,1423290,8335 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1155837179,3072861,11503 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1155837179,3072861,11503 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1155837179,3072861,11503 Agora/Proposal/validator/voting/legal/ordinary/proposal,254761960,715291,8396 -Agora/Proposal/validator/voting/legal/ordinary/stake,144522449,381434,5827 +Agora/Proposal/validator/voting/legal/ordinary/stake,142726431,376372,5827 Agora/Proposal/validator/voting/legal/delegate/proposal,254862648,715291,8459 -Agora/Proposal/validator/voting/legal/delegate/stake,147939356,388460,5921 +Agora/Proposal/validator/voting/legal/delegate/stake,146143338,383398,5921 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,249151017,693538,8909 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6137 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,134728077,350426,6137 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,293313747,804549,8918 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6144 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6144 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7296 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474044919,1182110,10118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7296 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,467588561,1169520,10118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,244096325,682817,8911 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6139 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6139 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279799305,767410,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6140 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6140 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280930283,769814,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6140 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6137 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6144 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7296 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6140 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,134728077,350426,6137 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6144 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7296 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,136524095,355488,6137 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6140 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6148 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6139 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6144 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7296 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474044919,1182110,10118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,134728077,350426,6137 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,135450613,352690,6140 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135450613,352690,6148 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,134728077,350426,6139 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6144 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7296 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,467588561,1169520,10118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474044919,1182110,10119 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,467588561,1169520,10119 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3660 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,316563738,866529,9359 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6585 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,177112055,455382,6585 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348898466,963341,10297 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7523 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,7523 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3886 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340814784,939138,9892 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7118 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340814784,939138,10064 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7290 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,190212214,480993,7290 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3653 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7296 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,190212214,480993,7296 Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3659 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294552365,811630,9498 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,6530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,134728077,350426,6530 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,342409981,932629,9507 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6537 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6537 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7690 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,493963090,1236555,10512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,487506732,1223965,10512 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289497673,800909,9500 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6532 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6532 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,325200653,885502,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6533 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6533 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,326331631,887906,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6533 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,6530 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6537 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6533 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,134728077,350426,6530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6537 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7690 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,136524095,355488,6530 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6533 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6545 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,136524095,355488,6532 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6537 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7690 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,493963090,1236555,10512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,134728077,350426,6530 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,135450613,352690,6533 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135450613,352690,6545 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,134728077,350426,6532 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6537 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,487506732,1223965,10512 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,493963090,1236555,10513 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,487506732,1223965,10513 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4054 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361965086,984621,9948 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,6978 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,177112055,455382,6978 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,394299814,1081433,10887 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7917 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,7917 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4280 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,386216132,1057230,10481 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7511 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7511 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,386216132,1057230,10654 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7684 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,190212214,480993,7684 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4047 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,190212214,480993,7690 Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4053 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430756409,1165906,11270 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,136524095,355488,7711 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,134728077,350426,7711 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,489698683,1316869,11279 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7718 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,7718 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8870 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,553717603,1399890,11692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,8870 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,547261245,1387300,11692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425701717,1155185,11272 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7713 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,7713 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,461404697,1239778,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7714 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,7714 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,462535675,1242182,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7714 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,136524095,355488,7711 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7718 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8870 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,7714 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,134728077,350426,7711 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,7718 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,8870 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,136524095,355488,7711 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7714 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7738 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,136524095,355488,7713 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7718 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8870 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,553717603,1399890,11692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,134728077,350426,7711 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,135450613,352690,7714 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135450613,352690,7738 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,134728077,350426,7713 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,7718 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190212214,480993,8870 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,547261245,1387300,11692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,553717603,1399890,11693 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,547261245,1387300,11693 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5234 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,498169130,1338897,11720 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8159 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,177112055,455382,8159 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,530503858,1435709,12658 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9097 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,9097 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5460 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,522420176,1411506,12253 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190212214,480993,8692 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,522420176,1411506,12425 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,8864 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,190212214,480993,8864 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5227 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,8870 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,190212214,480993,8870 Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5233 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,607775528,1728219,11679 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,8786 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,538035987,1412880,8786 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,315683095,866613,9275 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6380 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6380 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7532 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,481232867,1202798,10355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7532 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474776509,1190208,10355 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266465673,744881,9268 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6375 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6375 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,302168653,829474,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6376 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,303299631,831878,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,8786 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6380 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7532 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,538035987,1412880,8786 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6380 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7532 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,525717719,1376932,8786 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6384 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,8788 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6380 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7532 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,481232867,1202798,10355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,523921701,1371870,8786 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,135450613,352690,6376 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135450613,352690,6384 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,538035987,1412880,8788 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6380 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7532 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474776509,1190208,10355 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,481232867,1202798,10356 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474776509,1190208,10356 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3897 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338933086,928593,9715 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,6820 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,177112055,455382,6820 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,371267814,1025405,10654 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,7759 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,7759 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4123 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,363184132,1001202,10249 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7354 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7354 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,363184132,1001202,10421 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7526 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,190212214,480993,7526 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3890 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7532 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,190212214,480993,7532 Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3896 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,653176876,1846311,12270 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,9180 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,538035987,1412880,9180 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,364779329,994693,9865 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6773 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6773 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7926 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,501151038,1257243,10749 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7926 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,494694680,1244653,10749 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311867021,862973,9858 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6768 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6768 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,347570001,947566,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6769 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6769 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,348700979,949970,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6769 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,9180 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6773 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7926 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6769 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,538035987,1412880,9180 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6773 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7926 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,525717719,1376932,9180 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,6769 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,6781 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,9182 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6773 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7926 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,501151038,1257243,10749 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,523921701,1371870,9180 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,135450613,352690,6769 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135450613,352690,6781 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,538035987,1412880,9182 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6773 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7926 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,494694680,1244653,10749 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,501151038,1257243,10750 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,494694680,1244653,10750 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4291 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,384334434,1046685,10306 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7214 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,177112055,455382,7214 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,416669162,1143497,11245 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8153 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,8153 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4517 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,408585480,1119294,10839 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7747 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7747 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,408585480,1119294,11012 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,7920 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,190212214,480993,7920 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4284 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,7926 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,190212214,480993,7926 Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4290 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,789380920,2200587,14040 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,539832005,1417942,10360 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,538035987,1412880,10360 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,512068031,1378933,11636 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7954 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,7954 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9106 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,560905551,1420578,11929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,9106 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,554449193,1407988,11929 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,448071065,1217249,11629 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7949 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,7949 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,483774045,1301842,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7950 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,7950 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484905023,1304246,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7950 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,539832005,1417942,10360 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7954 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9106 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,7950 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,538035987,1412880,10360 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,7954 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,9106 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,525717719,1376932,10360 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,7950 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,7974 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,539832005,1417942,10362 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7954 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9106 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,560905551,1420578,11929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,523921701,1371870,10360 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,135450613,352690,7950 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135450613,352690,7974 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,538035987,1412880,10362 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,7954 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190212214,480993,9106 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,554449193,1407988,11929 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,560905551,1420578,11930 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,554449193,1407988,11930 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5471 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,520538478,1400961,12077 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8395 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,177112055,455382,8395 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552873206,1497773,13015 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9333 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,9333 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5697 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544789524,1473570,12610 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8928 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190212214,480993,8928 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544789524,1473570,12782 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9100 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,190212214,480993,9100 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5464 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9106 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,190212214,480993,9106 Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5470 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1143400598,3277042,15148 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12104 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1154355876,3064517,12104 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,343644780,944193,9727 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,6681 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6681 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,7833 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,490217802,1228658,10656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7833 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,483761444,1216068,10656 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294427358,822461,9720 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,6676 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6676 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,330130338,907054,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,6677 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6677 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,331261316,909458,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,6677 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12104 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,6681 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,7833 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6677 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1154355876,3064517,12104 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6681 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7833 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12104 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,137246631,357752,6677 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,137246631,357752,6685 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12106 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,6681 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,193552926,490785,7833 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,490217802,1228658,10656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1168470162,3105527,12104 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,135450613,352690,6677 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135450613,352690,6685 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1154355876,3064517,12106 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6681 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7833 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,483761444,1216068,10656 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,490217802,1228658,10657 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,483761444,1216068,10657 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4198 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366894771,1006173,10168 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,180452767,465174,7122 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,177112055,455382,7122 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,399229499,1102985,11106 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8060 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,8060 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4424 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,391145817,1078782,10701 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,193552926,490785,7655 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7655 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,391145817,1078782,10873 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,193552926,490785,7827 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,190212214,480993,7827 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4191 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,193552926,490785,7833 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,190212214,480993,7833 Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4197 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1188801946,3395134,15738 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,12498 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1154355876,3064517,12498 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,392741014,1072273,10316 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,7074 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,7074 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,8227 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,510135973,1283103,11050 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,8227 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,503679615,1270513,11050 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339828706,940553,10309 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,7069 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,7069 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,375531686,1025146,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,7070 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,7070 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,376662664,1027550,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,7070 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,12498 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,7074 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,8227 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,7070 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1154355876,3064517,12498 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,7074 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,8227 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1170266180,3110589,12498 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,137246631,357752,7070 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,137246631,357752,7082 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,12500 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,7074 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,193552926,490785,8227 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,510135973,1283103,11050 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1168470162,3105527,12498 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,135450613,352690,7070 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135450613,352690,7082 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1154355876,3064517,12500 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,7074 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190212214,480993,8227 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,503679615,1270513,11050 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,510135973,1283103,11051 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,503679615,1270513,11051 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4592 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,412296119,1124265,10757 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,180452767,465174,7515 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,177112055,455382,7515 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444630847,1221077,11696 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,8454 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,8454 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4818 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436547165,1196874,11290 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,193552926,490785,8048 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190212214,480993,8048 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436547165,1196874,11463 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,193552926,490785,8221 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,190212214,480993,8221 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4585 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,193552926,490785,8227 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,190212214,480993,8227 Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4591 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1325005990,3749410,17509 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1156151894,3069579,13678 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1154355876,3064517,13678 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,540029716,1456513,12088 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,137246631,357752,8255 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,8255 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,193552926,490785,9408 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,569890486,1446438,12231 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,9408 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,563434128,1433848,12231 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5772 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,476032750,1294829,12081 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,137246631,357752,8250 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,8250 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,511735730,1379422,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,137246631,357752,8251 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,8251 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512866708,1381826,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,137246631,357752,8251 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1156151894,3069579,13678 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,137246631,357752,8255 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,193552926,490785,9408 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,8251 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1154355876,3064517,13678 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,8255 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,9408 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1170266180,3110589,13678 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,137246631,357752,8251 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,137246631,357752,8275 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1156151894,3069579,13680 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,137246631,357752,8255 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,193552926,490785,9408 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,569890486,1446438,12231 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1168470162,3105527,13678 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,135450613,352690,8251 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135450613,352690,8275 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1154355876,3064517,13680 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,8255 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190212214,480993,9408 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,563434128,1433848,12231 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,569890486,1446438,12232 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,563434128,1433848,12232 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5773 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,548500163,1478541,12529 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,180452767,465174,8696 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,177112055,455382,8696 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580834891,1575353,13467 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,197101035,498012,9634 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,9634 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5998 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,572751209,1551150,13062 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,193552926,490785,9229 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190212214,480993,9229 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,572751209,1551150,13235 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,193552926,490785,9402 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,190212214,480993,9402 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5765 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,193552926,490785,9408 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,190212214,480993,9408 Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5772 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,133453490,349585,5807 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,131657472,344523,5807 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,237178475,667478,8377 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,136684736,358639,5823 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,134888718,353577,5823 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250650682,707420,8388 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,133453490,349585,5805 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,131657472,344523,5805 Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204970610,587333,8374 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,133453490,349585,5821 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,131657472,344523,5821 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,213404867,612237,8386 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,133453490,349585,5811 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,131657472,344523,5811 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,133453490,349585,5811 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,131657472,344523,5811 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,136684736,358639,5827 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,134888718,353577,5827 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,220290545,632551,8392 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,300244838,760861,7900 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,282446716,721159,7900 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379819723,1080142,10446 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,316401068,806131,7976 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,298602946,766429,7976 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,445348258,1271396,10497 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,300244838,760861,7889 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,282446716,721159,7889 Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,313051422,905189,10438 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,300244838,760861,7970 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,282446716,721159,7970 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,351440403,1016941,10491 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,300244838,760861,7920 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,282446716,721159,7920 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,300244838,760861,7920 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,282446716,721159,7920 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,316401068,806131,7996 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,298602946,766429,7996 Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,384580793,1112911,10517 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,508734023,1274956,10515 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,470933271,1191954,10515 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,558121283,1595972,13031 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,541046483,1365496,10666 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,503245731,1282494,10666 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688720228,1976366,13132 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,508734023,1274956,10495 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,470933271,1191954,10495 Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,448152437,1302509,13019 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,508734023,1274956,10655 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,470933271,1191954,10655 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523984823,1522821,13121 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,508734023,1274956,10555 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,470933271,1191954,10555 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,508734023,1274956,10555 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,470933271,1191954,10555 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,541046483,1365496,10706 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,503245731,1282494,10706 Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589943603,1713361,13172 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1843064807,4565164,27345 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1677247223,4205042,27345 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1699251267,4897284,29650 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1978777139,4945432,28032 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1812959555,4585310,28032 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2246300836,6488174,30108 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1843064807,4565164,27260 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1677247223,4205042,27260 Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312798933,3845357,29605 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1843064807,4565164,27971 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1677247223,4205042,27971 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1628269111,4760453,30047 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1843064807,4565164,27513 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1677247223,4205042,27513 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1843064807,4565164,27513 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1677247223,4205042,27513 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1978777139,4945432,28201 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1812959555,4585310,28201 Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1904265587,5556241,30277 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",133453490,349585,5807 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",133453490,349585,5807 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",133453490,349585,5807 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",129082904,337735,5809 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",129082904,337735,5809 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",129082904,337735,5809 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",136684736,358639,5823 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",136684736,358639,5823 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",136684736,358639,5823 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",125851658,328681,5789 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",125851658,328681,5789 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,125851658,328681,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,133453490,349585,5805 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,133453490,349585,5805 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,133453490,349585,5805 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,133453490,349585,5803 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",300244838,760861,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",300244838,760861,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",300244838,760861,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",293595572,743419,7906 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",293595572,743419,7906 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",293595572,743419,7906 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",316401068,806131,7976 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",316401068,806131,7976 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",316401068,806131,7976 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",277439342,698149,7817 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",277439342,698149,7817 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,277439342,698149,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,300244838,760861,7889 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,300244838,760861,7889 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,300244838,760861,7889 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,300244838,760861,7879 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",508734023,1274956,10515 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",508734023,1274956,10515 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",508734023,1274956,10515 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",499236407,1250524,10526 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",499236407,1250524,10526 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",499236407,1250524,10526 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",541046483,1365496,10666 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",541046483,1365496,10666 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",541046483,1365496,10666 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",466923947,1159984,10352 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",466923947,1159984,10352 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,466923947,1159984,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,508734023,1274956,10495 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,508734023,1274956,10495 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,508734023,1274956,10495 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,508734023,1274956,10474 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1843064807,4565164,27345 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1843064807,4565164,27345 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1843064807,4565164,27345 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1815337751,4495996,27406 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1815337751,4495996,27406 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1815337751,4495996,27406 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1978777139,4945432,28032 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1978777139,4945432,28032 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1978777139,4945432,28032 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1679625419,4115728,26632 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1679625419,4115728,26632 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1679625419,4115728,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1843064807,4565164,27260 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1843064807,4565164,27260 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1843064807,4565164,27260 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1843064807,4565164,27176 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",131657472,344523,5807 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",131657472,344523,5807 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",131657472,344523,5807 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",127286886,332673,5809 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",127286886,332673,5809 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",127286886,332673,5809 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",134888718,353577,5823 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",134888718,353577,5823 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",134888718,353577,5823 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",124055640,323619,5789 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",124055640,323619,5789 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,124055640,323619,5789 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,131657472,344523,5805 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,131657472,344523,5805 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,131657472,344523,5805 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,131657472,344523,5803 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",282446716,721159,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",282446716,721159,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",282446716,721159,7900 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",275797450,703717,7906 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",275797450,703717,7906 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",275797450,703717,7906 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",298602946,766429,7976 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",298602946,766429,7976 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",298602946,766429,7976 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",259641220,658447,7817 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",259641220,658447,7817 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,259641220,658447,7817 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,282446716,721159,7889 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,282446716,721159,7889 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,282446716,721159,7889 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,282446716,721159,7879 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",470933271,1191954,10515 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",470933271,1191954,10515 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",470933271,1191954,10515 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",461435655,1167522,10526 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",461435655,1167522,10526 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",461435655,1167522,10526 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",503245731,1282494,10666 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",503245731,1282494,10666 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",503245731,1282494,10666 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",429123195,1076982,10352 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",429123195,1076982,10352 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,429123195,1076982,10352 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,470933271,1191954,10495 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,470933271,1191954,10495 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,470933271,1191954,10495 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,470933271,1191954,10474 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1677247223,4205042,27345 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1677247223,4205042,27345 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1677247223,4205042,27345 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1649520167,4135874,27406 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1649520167,4135874,27406 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1649520167,4135874,27406 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1812959555,4585310,28032 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1812959555,4585310,28032 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1812959555,4585310,28032 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1513807835,3755606,26632 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1513807835,3755606,26632 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1513807835,3755606,26632 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1677247223,4205042,27260 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1677247223,4205042,27260 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1677247223,4205042,27260 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1677247223,4205042,27176 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 diff --git a/flake.lock b/flake.lock index 9e4d7574..a1097a66 100644 --- a/flake.lock +++ b/flake.lock @@ -11877,16 +11877,16 @@ "plutarch": "plutarch_6" }, "locked": { - "lastModified": 1658175311, - "narHash": "sha256-Wa7OKZGXeVDaruY3NcZ00CfLT0dy3cHp8xsjsCLwhs8=", + "lastModified": 1658368717, + "narHash": "sha256-GAneUtaxaJSZLNkIGOTByx/Auuq1g3MhzBhTiqZ13+s=", "owner": "Liqwid-Labs", "repo": "plutarch-context-builder", - "rev": "62ab154fdcd8dd07a741e7955e078813aff4ed6a", + "rev": "2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9", "type": "github" }, "original": { "owner": "Liqwid-Labs", - "ref": "62ab154fdcd8dd07a741e7955e078813aff4ed6a", + "ref": "2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9", "repo": "plutarch-context-builder", "type": "github" } diff --git a/flake.nix b/flake.nix index 946bb746..a62928bd 100644 --- a/flake.nix +++ b/flake.nix @@ -32,7 +32,7 @@ # PCB Rev is locked until Agora test have explicit Minting CS. Check PCB PR #12 inputs.plutarch-context-builder.url = - "github:Liqwid-Labs/plutarch-context-builder?ref=62ab154fdcd8dd07a741e7955e078813aff4ed6a"; + "github:Liqwid-Labs/plutarch-context-builder?ref=2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9"; outputs = inputs@{ self, nixpkgs, nixpkgs-latest, haskell-nix, plutarch, ... }: let From b21135af9e9894714aba22582f06a2611597209b Mon Sep 17 00:00:00 2001 From: SeungheonOh Date: Wed, 3 Aug 2022 23:39:27 +0800 Subject: [PATCH 65/78] update CHANGELOG --- CHANGELOG.md | 17 +++++++++++++++++ 1 file changed, 17 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 1f738654..c903dc6a 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -39,6 +39,23 @@ This format is based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0). - `PProposalRedeemer` - `PTreasuryRedeemer` - `PGovernorDatum` + +### Removed + +- Side-stream utilies into `liqwid-Labs/liqwid-plutarch-extra` + - `Agora.MultiSig`--entire module. + - `scriptHashFromAddress` to `Plutarch.Api.V1.ScriptContext`. + - `findOutputsToAddress` to `Plutarch.Api.V1.ScriptContext`. + - `findTxOutDatum` to `Plutarch.Api.V1.ScriptContext`. + - `hasOnlyOneTokenOfCurrencySymbol` to `Plutarch.Api.V1.Value`. + - `mustBePJust` to `Plutarch.Extra.Maybe`. + - `mustBePDJust` to `Plutarch.Extra.Maybe`. + - `isScriptAddress` to `Plutarch.Api.V1.ScriptContext`. + - `isPubKey` to `Plutarch.Api.V1.ScriptContext`. + - `pisUniqBy'` to `Plutarch.Extra.List`. + - `pisUniq'` to `Plutarch.Extra.List`. + - `pon` to `Plutarch.Extra.Function`. + - `pbuiltinUncurry` to `Plutarch.Extra.Function`. ## 0.1.0 -- 2022-06-22 From 8f3423c4512acfbf6eff886d295dd378674e41ff Mon Sep 17 00:00:00 2001 From: Peter Dragos Date: Sat, 6 Aug 2022 12:35:16 -0400 Subject: [PATCH 66/78] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index afcaff5c..6a24af8d 100644 --- a/README.md +++ b/README.md @@ -12,7 +12,7 @@ Goals: Non-goals: - Agora is not a DAO. It doesn't have tokenomics or even a token. It is simply a library for governance. -- Agora doesn't aim to provide any primitive tools for Plutus that are not governance-specific. For this, see [plutus-extra](https://github.com/Liqwid-Labs/plutus-extra/). +- Agora doesn't aim to provide any primitive tools for Plutus that are not governance-specific. For this, see [liqwid-plutarch-extra](https://github.com/Liqwid-Labs/liqwid-plutarch-extra/). ## Project setup From 968409cf34ec06ac9a3574597513e48a7d7568af Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 5 Aug 2022 17:51:58 +0800 Subject: [PATCH 67/78] pipe benchmark result to `diff` directly --- Makefile | 12 +++--------- agora-bench/Main.hs | 18 +++++++++++++----- agora-bench/Options.hs | 19 ++++++++++--------- 3 files changed, 26 insertions(+), 23 deletions(-) diff --git a/Makefile b/Makefile index e04e1959..ab8c2924 100644 --- a/Makefile +++ b/Makefile @@ -57,18 +57,12 @@ PS_BRIDGE_OUTPUT_DIR := agora-purescript-bridge/ ps_bridge: cabal run exe:agora-purescript-bridge -- -o $(PS_BRIDGE_OUTPUT_DIR) +BENCH_OUTPUT = "bench.csv" bench: - cabal run agora-bench + cabal run agora-bench -- -o $(BENCH_OUTPUT) -BENCH_TMPDIR := $(shell mktemp -d) -BENCH_TMPFILE := $(BENCH_TMPDIR)/bench.csv bench_check: - (cabal run agora-bench -- -o "$(BENCH_TMPFILE)" \ - || $(bench) -o "$(BENCH_TMPFILE)") >> /dev/null - diff bench.csv $(BENCH_TMPFILE) \ - || (echo "bench.csv is outdated"; exit 1) - # TODO: do the clean-up even if `diff` fails. - rm -rf $(BENCH_TMPDIR) + cabal -v0 new-run agora-bench | diff bench.csv - scripts: cabal run agora-scripts -- -c diff --git a/agora-bench/Main.hs b/agora-bench/Main.hs index 50e49115..9f665bea 100644 --- a/agora-bench/Main.hs +++ b/agora-bench/Main.hs @@ -3,10 +3,10 @@ module Main (main) where import Bench (specificationTreeToBenchmarks) import Data.Csv (EncodeOptions (encUseCrLf), defaultEncodeOptions, encodeDefaultOrderedByNameWith) import Data.Text.Lazy.Encoding (decodeUtf8) -import Data.Text.Lazy.IO as I (writeFile) +import Data.Text.Lazy.IO as I (putStr, writeFile) import Options (Options (..), parseOptions) import Prettyprinter (defaultLayoutOptions, layoutPretty, pretty) -import Prettyprinter.Render.String (renderString) +import Prettyprinter.Render.Text (renderLazy) import Spec.AuthorityToken qualified as AuthorityToken import Spec.Effect.GovernorMutation qualified as GovernorMutation import Spec.Effect.TreasuryWithdrawal qualified as TreasuryWithdrawal @@ -14,6 +14,7 @@ import Spec.Governor qualified as Governor import Spec.Proposal qualified as Proposal import Spec.Stake qualified as Stake import Spec.Treasury qualified as Treasury +import System.IO (hIsTerminalDevice, stdout) import Test.Specification (group) import Prelude @@ -22,11 +23,14 @@ import Prelude main :: IO () main = do options <- parseOptions + isTTY <- hIsTerminalDevice stdout - I.writeFile options.output $ - (decodeUtf8 . encodeDefaultOrderedByNameWith encodeOptions) res + mapM_ (`I.writeFile` csv) options.output - mapM_ (putStrLn . renderString . layoutPretty defaultLayoutOptions . pretty) res + I.putStr $ + if isTTY + then prettified + else csv where encodeOptions = defaultEncodeOptions @@ -49,3 +53,7 @@ main = do , group "AuthorityToken" AuthorityToken.specs , group "Governor" Governor.specs ] + + csv = decodeUtf8 $ encodeDefaultOrderedByNameWith encodeOptions res + + prettified = renderLazy $ layoutPretty defaultLayoutOptions $ pretty res diff --git a/agora-bench/Options.hs b/agora-bench/Options.hs index d0329999..ce0f593e 100644 --- a/agora-bench/Options.hs +++ b/agora-bench/Options.hs @@ -1,21 +1,22 @@ module Options (Options (..), parseOptions) where +import Control.Applicative (optional) import Options.Applicative ((<**>)) import Options.Applicative qualified as Opt newtype Options = Options - { output :: FilePath + { output :: Maybe FilePath } -outputOpt :: Opt.Parser FilePath +outputOpt :: Opt.Parser (Maybe FilePath) outputOpt = - Opt.strOption - ( Opt.long "output-path" - <> Opt.short 'o' - <> Opt.metavar "OUTPUT_PATH" - <> Opt.value "./bench.csv" - <> Opt.help "The path of the bench report file." - ) + optional $ + Opt.strOption + ( Opt.long "output-path" + <> Opt.short 'o' + <> Opt.metavar "OUTPUT_PATH" + <> Opt.help "The path of the bench report file." + ) benchOpt :: Opt.Parser Options benchOpt = Options <$> outputOpt From ed98172d040e31508baf8ef9be1797c91c85e782 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Sat, 30 Jul 2022 18:04:35 +0800 Subject: [PATCH 68/78] use `liqwid-nix`; enable checks for CI add extra command line tool `hasktags` --- flake.lock | 6581 +++++++++++++++++++++++++--------------------------- flake.nix | 348 +-- 2 files changed, 3211 insertions(+), 3718 deletions(-) diff --git a/flake.lock b/flake.lock index a1097a66..0537e793 100644 --- a/flake.lock +++ b/flake.lock @@ -80,6 +80,38 @@ "type": "github" } }, + "HTTP_14": { + "flake": false, + "locked": { + "lastModified": 1451647621, + "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", + "owner": "phadej", + "repo": "HTTP", + "rev": "9bc0996d412fef1787449d841277ef663ad9a915", + "type": "github" + }, + "original": { + "owner": "phadej", + "repo": "HTTP", + "type": "github" + } + }, + "HTTP_15": { + "flake": false, + "locked": { + "lastModified": 1451647621, + "narHash": "sha256-oHIyw3x0iKBexEo49YeUDV1k74ZtyYKGR2gNJXXRxts=", + "owner": "phadej", + "repo": "HTTP", + "rev": "9bc0996d412fef1787449d841277ef663ad9a915", + "type": "github" + }, + "original": { + "owner": "phadej", + "repo": "HTTP", + "type": "github" + } + }, "HTTP_2": { "flake": false, "locked": { @@ -208,23 +240,24 @@ "type": "github" } }, - "Shrinker": { + "cabal-32": { "flake": false, "locked": { - "lastModified": 1642430208, - "narHash": "sha256-tfWyB7zCLzncwRpyl7eUOzuOBbg9KLu6sxSxRaFlOug=", - "owner": "Plutonomicon", - "repo": "Shrinker", - "rev": "0e60707996b876c7bd23a348f54545217ce2e556", + "lastModified": 1603716527, + "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", + "owner": "haskell", + "repo": "cabal", + "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", "type": "github" }, "original": { - "owner": "Plutonomicon", - "repo": "Shrinker", + "owner": "haskell", + "ref": "3.2", + "repo": "cabal", "type": "github" } }, - "cabal-32": { + "cabal-32_10": { "flake": false, "locked": { "lastModified": 1603716527, @@ -241,7 +274,7 @@ "type": "github" } }, - "cabal-32_10": { + "cabal-32_11": { "flake": false, "locked": { "lastModified": 1603716527, @@ -258,7 +291,7 @@ "type": "github" } }, - "cabal-32_11": { + "cabal-32_12": { "flake": false, "locked": { "lastModified": 1603716527, @@ -275,7 +308,7 @@ "type": "github" } }, - "cabal-32_12": { + "cabal-32_13": { "flake": false, "locked": { "lastModified": 1603716527, @@ -292,7 +325,24 @@ "type": "github" } }, - "cabal-32_13": { + "cabal-32_14": { + "flake": false, + "locked": { + "lastModified": 1603716527, + "narHash": "sha256-X0TFfdD4KZpwl0Zr6x+PLxUt/VyKQfX7ylXHdmZIL+w=", + "owner": "haskell", + "repo": "cabal", + "rev": "48bf10787e27364730dd37a42b603cee8d6af7ee", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.2", + "repo": "cabal", + "type": "github" + } + }, + "cabal-32_15": { "flake": false, "locked": { "lastModified": 1603716527, @@ -530,6 +580,40 @@ "type": "github" } }, + "cabal-34_14": { + "flake": false, + "locked": { + "lastModified": 1640353650, + "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=", + "owner": "haskell", + "repo": "cabal", + "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.4", + "repo": "cabal", + "type": "github" + } + }, + "cabal-34_15": { + "flake": false, + "locked": { + "lastModified": 1640353650, + "narHash": "sha256-N1t6M3/wqj90AEdRkeC8i923gQYUpzSr8b40qVOZ1Rk=", + "owner": "haskell", + "repo": "cabal", + "rev": "942639c18c0cd8ec53e0a6f8d120091af35312cd", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.4", + "repo": "cabal", + "type": "github" + } + }, "cabal-34_2": { "flake": false, "locked": { @@ -751,6 +835,40 @@ "type": "github" } }, + "cabal-36_14": { + "flake": false, + "locked": { + "lastModified": 1641652457, + "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=", + "owner": "haskell", + "repo": "cabal", + "rev": "f27667f8ec360c475027dcaee0138c937477b070", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.6", + "repo": "cabal", + "type": "github" + } + }, + "cabal-36_15": { + "flake": false, + "locked": { + "lastModified": 1641652457, + "narHash": "sha256-BlFPKP4C4HRUJeAbdembX1Rms1LD380q9s0qVDeoAak=", + "owner": "haskell", + "repo": "cabal", + "rev": "f27667f8ec360c475027dcaee0138c937477b070", + "type": "github" + }, + "original": { + "owner": "haskell", + "ref": "3.6", + "repo": "cabal", + "type": "github" + } + }, "cabal-36_2": { "flake": false, "locked": { @@ -938,11 +1056,11 @@ "cardano-base_12": { "flake": false, "locked": { - "lastModified": 1638456794, - "narHash": "sha256-0KAO6dWqupJzRyjWjAFLZrt0hA6pozeKsDv1Fnysib8=", + "lastModified": 1652788515, + "narHash": "sha256-l0KgomRi6YhEoOlFnBYEXhnZO2+PW68rhfUrbMXjhCQ=", "owner": "input-output-hk", "repo": "cardano-base", - "rev": "4fae3f0149fd8925be94707d3ae0e36c0d67bd58", + "rev": "631cb6cf1fa01ab346233b610a38b3b4cba6e6ab", "type": "github" }, "original": { @@ -967,6 +1085,38 @@ "type": "github" } }, + "cardano-base_14": { + "flake": false, + "locked": { + "lastModified": 1652788515, + "narHash": "sha256-l0KgomRi6YhEoOlFnBYEXhnZO2+PW68rhfUrbMXjhCQ=", + "owner": "input-output-hk", + "repo": "cardano-base", + "rev": "631cb6cf1fa01ab346233b610a38b3b4cba6e6ab", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-base", + "type": "github" + } + }, + "cardano-base_15": { + "flake": false, + "locked": { + "lastModified": 1652788515, + "narHash": "sha256-l0KgomRi6YhEoOlFnBYEXhnZO2+PW68rhfUrbMXjhCQ=", + "owner": "input-output-hk", + "repo": "cardano-base", + "rev": "631cb6cf1fa01ab346233b610a38b3b4cba6e6ab", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-base", + "type": "github" + } + }, "cardano-base_2": { "flake": false, "locked": { @@ -1180,6 +1330,40 @@ "type": "github" } }, + "cardano-crypto_14": { + "flake": false, + "locked": { + "lastModified": 1621376239, + "narHash": "sha256-oxIOVlgm07FAEmgGRF1C2me9TXqVxQulEOcJ22zpTRs=", + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + } + }, + "cardano-crypto_15": { + "flake": false, + "locked": { + "lastModified": 1621376239, + "narHash": "sha256-oxIOVlgm07FAEmgGRF1C2me9TXqVxQulEOcJ22zpTRs=", + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "cardano-crypto", + "rev": "07397f0e50da97eaa0575d93bee7ac4b2b2576ec", + "type": "github" + } + }, "cardano-crypto_2": { "flake": false, "locked": { @@ -1370,17 +1554,17 @@ "cardano-prelude_12": { "flake": false, "locked": { - "lastModified": 1641566029, - "narHash": "sha256-CylaHhO4zbZ1dEAv8yWp1swP1xys/s2Sbxg3a2pdnCI=", - "owner": "locallycompact", + "lastModified": 1653997332, + "narHash": "sha256-E+YSfUsvxdoOr7n7fz4xd7zb4z8XBRGNYOKipc2A1pw=", + "owner": "mlabs-haskell", "repo": "cardano-prelude", - "rev": "93f95047bb36a055bdd56fb0cafd887c072cdce2", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", "type": "github" }, "original": { - "owner": "locallycompact", + "owner": "mlabs-haskell", "repo": "cardano-prelude", - "rev": "93f95047bb36a055bdd56fb0cafd887c072cdce2", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", "type": "github" } }, @@ -1401,6 +1585,40 @@ "type": "github" } }, + "cardano-prelude_14": { + "flake": false, + "locked": { + "lastModified": 1653997332, + "narHash": "sha256-E+YSfUsvxdoOr7n7fz4xd7zb4z8XBRGNYOKipc2A1pw=", + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + } + }, + "cardano-prelude_15": { + "flake": false, + "locked": { + "lastModified": 1653997332, + "narHash": "sha256-E+YSfUsvxdoOr7n7fz4xd7zb4z8XBRGNYOKipc2A1pw=", + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + }, + "original": { + "owner": "mlabs-haskell", + "repo": "cardano-prelude", + "rev": "713c7ae79a4d538fcd653c976a652913df1567b9", + "type": "github" + } + }, "cardano-prelude_2": { "flake": false, "locked": { @@ -1617,7 +1835,7 @@ "type": "github" } }, - "cardano-repo-tool_2": { + "cardano-repo-tool_14": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1633,7 +1851,7 @@ "type": "github" } }, - "cardano-repo-tool_3": { + "cardano-repo-tool_15": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1649,7 +1867,7 @@ "type": "github" } }, - "cardano-repo-tool_4": { + "cardano-repo-tool_2": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1665,7 +1883,7 @@ "type": "github" } }, - "cardano-repo-tool_5": { + "cardano-repo-tool_3": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1681,7 +1899,7 @@ "type": "github" } }, - "cardano-repo-tool_6": { + "cardano-repo-tool_4": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1697,7 +1915,7 @@ "type": "github" } }, - "cardano-repo-tool_7": { + "cardano-repo-tool_5": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1713,7 +1931,7 @@ "type": "github" } }, - "cardano-repo-tool_8": { + "cardano-repo-tool_6": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1729,7 +1947,7 @@ "type": "github" } }, - "cardano-repo-tool_9": { + "cardano-repo-tool_7": { "flake": false, "locked": { "lastModified": 1624584417, @@ -1745,71 +1963,39 @@ "type": "github" } }, - "cardano-shell": { + "cardano-repo-tool_8": { "flake": false, "locked": { - "lastModified": 1608537748, - "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "lastModified": 1624584417, + "narHash": "sha256-YSepT97PagR/1jTYV/Yer8a2GjFe9+tTwaTCHxuK50M=", "owner": "input-output-hk", - "repo": "cardano-shell", - "rev": "9392c75087cb9a3d453998f4230930dea3a95725", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "cardano-shell", - "type": "github" - } - }, - "cardano-shell_10": { - "flake": false, - "locked": { - "lastModified": 1608537748, - "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", - "owner": "input-output-hk", - "repo": "cardano-shell", - "rev": "9392c75087cb9a3d453998f4230930dea3a95725", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "cardano-shell", - "type": "github" - } - }, - "cardano-shell_11": { - "flake": false, - "locked": { - "lastModified": 1608537748, - "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", - "owner": "input-output-hk", - "repo": "cardano-shell", - "rev": "9392c75087cb9a3d453998f4230930dea3a95725", + "repo": "cardano-repo-tool", + "rev": "30e826ed8f00e3e154453b122a6f3d779b2f73ec", "type": "github" }, "original": { "owner": "input-output-hk", - "repo": "cardano-shell", + "repo": "cardano-repo-tool", "type": "github" } }, - "cardano-shell_12": { + "cardano-repo-tool_9": { "flake": false, "locked": { - "lastModified": 1608537748, - "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "lastModified": 1624584417, + "narHash": "sha256-YSepT97PagR/1jTYV/Yer8a2GjFe9+tTwaTCHxuK50M=", "owner": "input-output-hk", - "repo": "cardano-shell", - "rev": "9392c75087cb9a3d453998f4230930dea3a95725", + "repo": "cardano-repo-tool", + "rev": "30e826ed8f00e3e154453b122a6f3d779b2f73ec", "type": "github" }, "original": { "owner": "input-output-hk", - "repo": "cardano-shell", + "repo": "cardano-repo-tool", "type": "github" } }, - "cardano-shell_13": { + "cardano-shell": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1825,7 +2011,7 @@ "type": "github" } }, - "cardano-shell_2": { + "cardano-shell_10": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1841,7 +2027,7 @@ "type": "github" } }, - "cardano-shell_3": { + "cardano-shell_11": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1857,7 +2043,7 @@ "type": "github" } }, - "cardano-shell_4": { + "cardano-shell_12": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1873,7 +2059,7 @@ "type": "github" } }, - "cardano-shell_5": { + "cardano-shell_13": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1889,7 +2075,7 @@ "type": "github" } }, - "cardano-shell_6": { + "cardano-shell_14": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1905,7 +2091,7 @@ "type": "github" } }, - "cardano-shell_7": { + "cardano-shell_15": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1921,7 +2107,7 @@ "type": "github" } }, - "cardano-shell_8": { + "cardano-shell_2": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1937,7 +2123,7 @@ "type": "github" } }, - "cardano-shell_9": { + "cardano-shell_3": { "flake": false, "locked": { "lastModified": 1608537748, @@ -1948,1528 +2134,123 @@ "type": "github" }, "original": { - "owner": "input-output-hk", - "repo": "cardano-shell", - "type": "github" - } - }, - "cryptonite": { - "flake": false, - "locked": { - "lastModified": 1639749289, - "narHash": "sha256-/KS2S0f9r4c/q+IUGwkFOY9jbZkyK3dl0xMpDbULeqc=", - "owner": "haskell-crypto", - "repo": "cryptonite", - "rev": "cec291d988f0f17828384f3358214ab9bf724a13", - "type": "github" - }, - "original": { - "owner": "haskell-crypto", - "repo": "cryptonite", - "rev": "cec291d988f0f17828384f3358214ab9bf724a13", - "type": "github" - } - }, - "ema": { - "inputs": { - "flake-compat": "flake-compat", - "flake-utils": "flake-utils", - "nixpkgs": "nixpkgs" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_10": { - "inputs": { - "flake-compat": "flake-compat_19", - "flake-utils": "flake-utils_29", - "nixpkgs": "nixpkgs_49" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_11": { - "inputs": { - "flake-compat": "flake-compat_21", - "flake-utils": "flake-utils_32", - "lint-utils": "lint-utils", - "nixpkgs": "nixpkgs_54" - }, - "locked": { - "lastModified": 1650932571, - "narHash": "sha256-rdpfJ+10a1uBPtHMNoAcpDE183RzpILRpsMgxj/YJek=", - "owner": "srid", - "repo": "ema", - "rev": "05c8a2127391ee4b593fa6541bc9078eb44ad10f", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_2": { - "inputs": { - "flake-compat": "flake-compat_3", - "flake-utils": "flake-utils_4", - "nixpkgs": "nixpkgs_6" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_3": { - "inputs": { - "flake-compat": "flake-compat_5", - "flake-utils": "flake-utils_7", - "nixpkgs": "nixpkgs_11" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_4": { - "inputs": { - "flake-compat": "flake-compat_7", - "flake-utils": "flake-utils_10", - "nixpkgs": "nixpkgs_16" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_5": { - "inputs": { - "flake-compat": "flake-compat_9", - "flake-utils": "flake-utils_14", - "nixpkgs": "nixpkgs_24" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_6": { - "inputs": { - "flake-compat": "flake-compat_11", - "flake-utils": "flake-utils_17", - "nixpkgs": "nixpkgs_29" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_7": { - "inputs": { - "flake-compat": "flake-compat_13", - "flake-utils": "flake-utils_20", - "nixpkgs": "nixpkgs_34" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_8": { - "inputs": { - "flake-compat": "flake-compat_15", - "flake-utils": "flake-utils_23", - "nixpkgs": "nixpkgs_39" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "ema_9": { - "inputs": { - "flake-compat": "flake-compat_17", - "flake-utils": "flake-utils_26", - "nixpkgs": "nixpkgs_44" - }, - "locked": { - "lastModified": 1653742730, - "narHash": "sha256-NyhjoMbm3h1aTskIU6jowNClSgA92bUcGcVNPfWNWgE=", - "owner": "srid", - "repo": "ema", - "rev": "50d9499db16b4e334776d8e8cffcd144c67f9fc4", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "multisite", - "repo": "ema", - "type": "github" - } - }, - "emanote": { - "inputs": { - "ema": "ema", - "flake-compat": [ - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist", - "ixset-typed": "ixset-typed", - "nixpkgs": [ - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context", - "tailwind-haskell": "tailwind-haskell" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_10": { - "inputs": { - "ema": "ema_10", - "flake-compat": [ - "plutarch-safe-money", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-safe-money", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_10", - "ixset-typed": "ixset-typed_10", - "nixpkgs": [ - "plutarch-safe-money", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_10", - "tailwind-haskell": "tailwind-haskell_10" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_11": { - "inputs": { - "ema": "ema_11", - "flake-compat": [ - "plutarch-safe-money", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-safe-money", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_11", - "ixset-typed": "ixset-typed_11", - "nixpkgs": [ - "plutarch-safe-money", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_11", - "pathtree": "pathtree", - "tailwind-haskell": "tailwind-haskell_11", - "unionmount": "unionmount" - }, - "locked": { - "lastModified": 1651699367, - "narHash": "sha256-f+whlGwxzv5Lcem+rxBgIgnkU+KcckogtWbRwZ6nM4I=", - "owner": "srid", - "repo": "emanote", - "rev": "2b6558fde2999ec22f645cb95322995b780f09f1", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_2": { - "inputs": { - "ema": "ema_2", - "flake-compat": [ - "liqwid-plutarch-extra", - "plutarch-context-builder", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "liqwid-plutarch-extra", - "plutarch-context-builder", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_2", - "ixset-typed": "ixset-typed_2", - "nixpkgs": [ - "liqwid-plutarch-extra", - "plutarch-context-builder", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_2", - "tailwind-haskell": "tailwind-haskell_2" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_3": { - "inputs": { - "ema": "ema_3", - "flake-compat": [ - "liqwid-plutarch-extra", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "liqwid-plutarch-extra", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_3", - "ixset-typed": "ixset-typed_3", - "nixpkgs": [ - "liqwid-plutarch-extra", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_3", - "tailwind-haskell": "tailwind-haskell_3" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_4": { - "inputs": { - "ema": "ema_4", - "flake-compat": [ - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_4", - "ixset-typed": "ixset-typed_4", - "nixpkgs": [ - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_4", - "tailwind-haskell": "tailwind-haskell_4" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_5": { - "inputs": { - "ema": "ema_5", - "flake-compat": [ - "plutarch-context-builder", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-context-builder", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_5", - "ixset-typed": "ixset-typed_5", - "nixpkgs": [ - "plutarch-context-builder", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_5", - "tailwind-haskell": "tailwind-haskell_5" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_6": { - "inputs": { - "ema": "ema_6", - "flake-compat": [ - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_6", - "ixset-typed": "ixset-typed_6", - "nixpkgs": [ - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_6", - "tailwind-haskell": "tailwind-haskell_6" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_7": { - "inputs": { - "ema": "ema_7", - "flake-compat": [ - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_7", - "ixset-typed": "ixset-typed_7", - "nixpkgs": [ - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_7", - "tailwind-haskell": "tailwind-haskell_7" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_8": { - "inputs": { - "ema": "ema_8", - "flake-compat": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_8", - "ixset-typed": "ixset-typed_8", - "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_8", - "tailwind-haskell": "tailwind-haskell_8" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "emanote_9": { - "inputs": { - "ema": "ema_9", - "flake-compat": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "flake-compat" - ], - "flake-utils": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "flake-utils" - ], - "heist": "heist_9", - "ixset-typed": "ixset-typed_9", - "nixpkgs": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ], - "pandoc-link-context": "pandoc-link-context_9", - "tailwind-haskell": "tailwind-haskell_9" - }, - "locked": { - "lastModified": 1653742875, - "narHash": "sha256-2IFMkA6/T0nCQHQcC8UhYWh8q8FQyGDBKfcDIhBJ3JM=", - "owner": "srid", - "repo": "emanote", - "rev": "ab5155ef400ce83a744362a4b953315d7ee6a8c3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "emanote", - "type": "github" - } - }, - "flake-compat": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_10": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_11": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_12": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_13": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_14": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_15": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_16": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_17": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_18": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_19": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_2": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_20": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_21": { - "flake": false, - "locked": { - "lastModified": 1648199409, - "narHash": "sha256-JwPKdC2PoVBkG6E+eWw3j6BMR6sL3COpYWfif7RVb8Y=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "64a525ee38886ab9028e6f61790de0832aa3ef03", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_22": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_23": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_24": { - "flake": false, - "locked": { - "lastModified": 1627913399, - "narHash": "sha256-hY8g6H2KFL8ownSiFeMOjwPC8P0ueXpCVEbxgda3pko=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "12c64ca55c1014cdc1b16ed5a804aa8576601ff2", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_3": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_4": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_5": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_6": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_7": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_8": { - "flake": false, - "locked": { - "lastModified": 1641205782, - "narHash": "sha256-4jY7RCWUoZ9cKD8co0/4tFARpWB+57+r1bLLvXNJliY=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b7547d3eed6f32d06102ead8991ec52ab0a4f1a7", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-compat_9": { - "flake": false, - "locked": { - "lastModified": 1650374568, - "narHash": "sha256-Z+s0J8/r907g149rllvwhb4pKi8Wam5ij0st8PwAh+E=", - "owner": "edolstra", - "repo": "flake-compat", - "rev": "b4a34015c698c7793d592d66adbab377907a2be8", - "type": "github" - }, - "original": { - "owner": "edolstra", - "repo": "flake-compat", - "type": "github" - } - }, - "flake-utils": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_10": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_11": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_12": { - "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_13": { - "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_14": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_15": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_16": { - "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_17": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_18": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_19": { - "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_2": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_20": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_21": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_22": { - "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", - "type": "github" - }, - "original": { - "owner": "numtide", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_23": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", - "type": "github" - } - }, - "flake-utils_24": { - "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", - "type": "github" - }, - "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_25": { + "cardano-shell_4": { + "flake": false, "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_26": { + "cardano-shell_5": { + "flake": false, "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", "type": "github" }, "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_27": { + "cardano-shell_6": { + "flake": false, "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", "type": "github" }, "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_28": { + "cardano-shell_7": { + "flake": false, "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_29": { + "cardano-shell_8": { + "flake": false, "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", "type": "github" }, "original": { - "owner": "numtide", - "ref": "v1.0.0", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_3": { + "cardano-shell_9": { + "flake": false, "locked": { - "lastModified": 1644229661, - "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", - "owner": "numtide", - "repo": "flake-utils", - "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", + "lastModified": 1608537748, + "narHash": "sha256-PulY1GfiMgKVnBci3ex4ptk2UNYMXqGjJOxcPy2KYT4=", + "owner": "input-output-hk", + "repo": "cardano-shell", + "rev": "9392c75087cb9a3d453998f4230930dea3a95725", "type": "github" }, "original": { - "owner": "numtide", - "repo": "flake-utils", + "owner": "input-output-hk", + "repo": "cardano-shell", "type": "github" } }, - "flake-utils_30": { + "flake-utils": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } }, - "flake-utils_31": { + "flake-utils_10": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3484,13 +2265,13 @@ "type": "github" } }, - "flake-utils_32": { + "flake-utils_11": { "locked": { - "lastModified": 1648297722, - "narHash": "sha256-W+qlPsiZd8F3XkzXOzAoR+mpFqzm3ekQkJNa+PIh1BQ=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "0f8662f1319ad6abf89b3380dd2722369fc51ade", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -3499,7 +2280,7 @@ "type": "github" } }, - "flake-utils_33": { + "flake-utils_12": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3514,13 +2295,13 @@ "type": "github" } }, - "flake-utils_34": { + "flake-utils_13": { "locked": { - "lastModified": 1642700792, - "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -3529,13 +2310,13 @@ "type": "github" } }, - "flake-utils_35": { + "flake-utils_14": { "locked": { - "lastModified": 1642700792, - "narHash": "sha256-XqHrk7hFb+zBvRg6Ghl+AZDq03ov6OshJLiSWOoX5es=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "846b2ae0fc4cc943637d3d1def4454213e203cba", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -3544,13 +2325,13 @@ "type": "github" } }, - "flake-utils_36": { + "flake-utils_15": { "locked": { - "lastModified": 1631561581, - "narHash": "sha256-3VQMV5zvxaVLvqqUrNz3iJelLw30mIVSfZmAaauM3dA=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "7e5bf3925f6fbdfaf50a2a7ca0be2879c4261d19", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { @@ -3559,7 +2340,7 @@ "type": "github" } }, - "flake-utils_37": { + "flake-utils_2": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3574,7 +2355,7 @@ "type": "github" } }, - "flake-utils_38": { + "flake-utils_3": { "locked": { "lastModified": 1644229661, "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", @@ -3591,32 +2372,30 @@ }, "flake-utils_4": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } }, "flake-utils_5": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -3638,32 +2417,30 @@ }, "flake-utils_7": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } }, "flake-utils_8": { "locked": { - "lastModified": 1652776076, - "narHash": "sha256-gzTw/v1vj4dOVbpBSJX4J0DwUR6LIyXo7/SuuTJp1kM=", + "lastModified": 1644229661, + "narHash": "sha256-1YdnJAsNy69bpcjuoKdOYQX0YxZBiCYZo4Twxerqv7k=", "owner": "numtide", "repo": "flake-utils", - "rev": "04c1b180862888302ddfb2e3ad9eaa63afc60cf8", + "rev": "3cecb5b042f7f209c56ffd8371b2711a290ec797", "type": "github" }, "original": { "owner": "numtide", - "ref": "v1.0.0", "repo": "flake-utils", "type": "github" } @@ -3734,17 +2511,16 @@ "flat_12": { "flake": false, "locked": { - "lastModified": 1641898475, - "narHash": "sha256-D7jJ4t0T1ZvXbO61r3HQj77hZ5hWF/P1L8X9+MnfD6c=", + "lastModified": 1651403785, + "narHash": "sha256-g+jGep1IXdw4q01W67J6f6OODY91QzIlW1+Eu8pR+u0=", "owner": "Quid2", "repo": "flat", - "rev": "41a040c413351e021982bb78bd00f750628f8060", + "rev": "559617e058098b776b431e2a67346ad3adea2440", "type": "github" }, "original": { "owner": "Quid2", "repo": "flat", - "rev": "41a040c413351e021982bb78bd00f750628f8060", "type": "github" } }, @@ -3764,6 +2540,38 @@ "type": "github" } }, + "flat_14": { + "flake": false, + "locked": { + "lastModified": 1651403785, + "narHash": "sha256-g+jGep1IXdw4q01W67J6f6OODY91QzIlW1+Eu8pR+u0=", + "owner": "Quid2", + "repo": "flat", + "rev": "559617e058098b776b431e2a67346ad3adea2440", + "type": "github" + }, + "original": { + "owner": "Quid2", + "repo": "flat", + "type": "github" + } + }, + "flat_15": { + "flake": false, + "locked": { + "lastModified": 1651403785, + "narHash": "sha256-g+jGep1IXdw4q01W67J6f6OODY91QzIlW1+Eu8pR+u0=", + "owner": "Quid2", + "repo": "flat", + "rev": "559617e058098b776b431e2a67346ad3adea2440", + "type": "github" + }, + "original": { + "owner": "Quid2", + "repo": "flat", + "type": "github" + } + }, "flat_2": { "flake": false, "locked": { @@ -3892,24 +2700,24 @@ "type": "github" } }, - "foundation": { + "ghc-8.6.5-iohk": { "flake": false, "locked": { - "lastModified": 1635711016, - "narHash": "sha256-5TRuljpwt50DLjyFjiFj6quFncu8RT0d8/0jlzsenuc=", - "owner": "haskell-foundation", - "repo": "foundation", - "rev": "0bb195e1fea06d144dafc5af9a0ff79af0a5f4a0", + "lastModified": 1600920045, + "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=", + "owner": "input-output-hk", + "repo": "ghc", + "rev": "95713a6ecce4551240da7c96b6176f980af75cae", "type": "github" }, "original": { - "owner": "haskell-foundation", - "repo": "foundation", - "rev": "0bb195e1fea06d144dafc5af9a0ff79af0a5f4a0", + "owner": "input-output-hk", + "ref": "release/8.6.5-iohk", + "repo": "ghc", "type": "github" } }, - "ghc-8.6.5-iohk": { + "ghc-8.6.5-iohk_10": { "flake": false, "locked": { "lastModified": 1600920045, @@ -3926,7 +2734,7 @@ "type": "github" } }, - "ghc-8.6.5-iohk_10": { + "ghc-8.6.5-iohk_11": { "flake": false, "locked": { "lastModified": 1600920045, @@ -3943,7 +2751,7 @@ "type": "github" } }, - "ghc-8.6.5-iohk_11": { + "ghc-8.6.5-iohk_12": { "flake": false, "locked": { "lastModified": 1600920045, @@ -3960,7 +2768,7 @@ "type": "github" } }, - "ghc-8.6.5-iohk_12": { + "ghc-8.6.5-iohk_13": { "flake": false, "locked": { "lastModified": 1600920045, @@ -3977,7 +2785,24 @@ "type": "github" } }, - "ghc-8.6.5-iohk_13": { + "ghc-8.6.5-iohk_14": { + "flake": false, + "locked": { + "lastModified": 1600920045, + "narHash": "sha256-DO6kxJz248djebZLpSzTGD6s8WRpNI9BTwUeOf5RwY8=", + "owner": "input-output-hk", + "repo": "ghc", + "rev": "95713a6ecce4551240da7c96b6176f980af75cae", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "ref": "release/8.6.5-iohk", + "repo": "ghc", + "type": "github" + } + }, + "ghc-8.6.5-iohk_15": { "flake": false, "locked": { "lastModified": 1600920045, @@ -4210,6 +3035,38 @@ "type": "github" } }, + "gitignore-nix_14": { + "flake": false, + "locked": { + "lastModified": 1611672876, + "narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "211907489e9f198594c0eb0ca9256a1949c9d412", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, + "gitignore-nix_15": { + "flake": false, + "locked": { + "lastModified": 1611672876, + "narHash": "sha256-qHu3uZ/o9jBHiA3MEKHJ06k7w4heOhA+4HCSIvflRxo=", + "owner": "hercules-ci", + "repo": "gitignore.nix", + "rev": "211907489e9f198594c0eb0ca9256a1949c9d412", + "type": "github" + }, + "original": { + "owner": "hercules-ci", + "repo": "gitignore.nix", + "type": "github" + } + }, "gitignore-nix_2": { "flake": false, "locked": { @@ -4402,14 +3259,46 @@ "type": "github" } }, - "hackage-nix_12": { + "hackage-nix_12": { + "flake": false, + "locked": { + "lastModified": 1651108473, + "narHash": "sha256-zHGCnBdwKvrcYanjf3GARTWF8V2pyJl1QNONUNZSoc0=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "dbab3b292c3400d028a2257e3acd2ac0249da774", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage-nix_13": { + "flake": false, + "locked": { + "lastModified": 1651108473, + "narHash": "sha256-zHGCnBdwKvrcYanjf3GARTWF8V2pyJl1QNONUNZSoc0=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "dbab3b292c3400d028a2257e3acd2ac0249da774", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage-nix_14": { "flake": false, "locked": { - "lastModified": 1644369434, - "narHash": "sha256-WqU6f1OhSM0UHXFW8Mhhvhz0tcij+NQVtmb6sW4RiFw=", + "lastModified": 1651108473, + "narHash": "sha256-zHGCnBdwKvrcYanjf3GARTWF8V2pyJl1QNONUNZSoc0=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "644a0d702abf84cdec62f4e620ff1034000e6146", + "rev": "dbab3b292c3400d028a2257e3acd2ac0249da774", "type": "github" }, "original": { @@ -4418,7 +3307,7 @@ "type": "github" } }, - "hackage-nix_13": { + "hackage-nix_15": { "flake": false, "locked": { "lastModified": 1651108473, @@ -4597,11 +3486,11 @@ "hackage_12": { "flake": false, "locked": { - "lastModified": 1644887696, - "narHash": "sha256-o4gltv4npUl7+1gEQIcrRqZniwqC9kK8QsPaftlrawc=", + "lastModified": 1654046237, + "narHash": "sha256-FpM9zE+Q+WrvCiaZBCg5U1g0bYpiZOCxY8V3R5ydBu8=", "owner": "input-output-hk", "repo": "hackage.nix", - "rev": "6ff64aa49b88e75dd6e0bbd2823c2a92c9174fa5", + "rev": "eeae1790b9c6a880d96e4a7214fdf0a73bdd6fc0", "type": "github" }, "original": { @@ -4626,6 +3515,38 @@ "type": "github" } }, + "hackage_14": { + "flake": false, + "locked": { + "lastModified": 1654046237, + "narHash": "sha256-FpM9zE+Q+WrvCiaZBCg5U1g0bYpiZOCxY8V3R5ydBu8=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "eeae1790b9c6a880d96e4a7214fdf0a73bdd6fc0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, + "hackage_15": { + "flake": false, + "locked": { + "lastModified": 1654046237, + "narHash": "sha256-FpM9zE+Q+WrvCiaZBCg5U1g0bYpiZOCxY8V3R5ydBu8=", + "owner": "input-output-hk", + "repo": "hackage.nix", + "rev": "eeae1790b9c6a880d96e4a7214fdf0a73bdd6fc0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "hackage.nix", + "type": "github" + } + }, "hackage_2": { "flake": false, "locked": { @@ -4757,11 +3678,11 @@ "haskell-language-server": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -4773,15 +3694,16 @@ "haskell-language-server_10": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } @@ -4853,22 +3775,6 @@ } }, "haskell-language-server_15": { - "flake": false, - "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", - "type": "github" - }, - "original": { - "owner": "haskell", - "repo": "haskell-language-server", - "type": "github" - } - }, - "haskell-language-server_16": { "flake": false, "locked": { "lastModified": 1653778781, @@ -4884,7 +3790,7 @@ "type": "github" } }, - "haskell-language-server_17": { + "haskell-language-server_16": { "flake": false, "locked": { "lastModified": 1650980856, @@ -4901,14 +3807,14 @@ "type": "github" } }, - "haskell-language-server_18": { + "haskell-language-server_17": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -4917,23 +3823,24 @@ "type": "github" } }, - "haskell-language-server_19": { + "haskell-language-server_18": { "flake": false, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, - "haskell-language-server_2": { + "haskell-language-server_19": { "flake": false, "locked": { "lastModified": 1653778781, @@ -4949,7 +3856,7 @@ "type": "github" } }, - "haskell-language-server_20": { + "haskell-language-server_2": { "flake": false, "locked": { "lastModified": 1650980856, @@ -4966,23 +3873,24 @@ "type": "github" } }, - "haskell-language-server_21": { + "haskell-language-server_20": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, - "haskell-language-server_22": { + "haskell-language-server_21": { "flake": false, "locked": { "lastModified": 1653778781, @@ -4998,7 +3906,7 @@ "type": "github" } }, - "haskell-language-server_23": { + "haskell-language-server_22": { "flake": false, "locked": { "lastModified": 1650980856, @@ -5015,14 +3923,14 @@ "type": "github" } }, - "haskell-language-server_24": { + "haskell-language-server_23": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -5031,23 +3939,24 @@ "type": "github" } }, - "haskell-language-server_25": { + "haskell-language-server_24": { "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, - "haskell-language-server_26": { + "haskell-language-server_25": { "flake": false, "locked": { "lastModified": 1653778781, @@ -5063,7 +3972,7 @@ "type": "github" } }, - "haskell-language-server_27": { + "haskell-language-server_26": { "flake": false, "locked": { "lastModified": 1650980856, @@ -5080,23 +3989,7 @@ "type": "github" } }, - "haskell-language-server_28": { - "flake": false, - "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", - "type": "github" - }, - "original": { - "owner": "haskell", - "repo": "haskell-language-server", - "type": "github" - } - }, - "haskell-language-server_29": { + "haskell-language-server_27": { "flake": false, "locked": { "lastModified": 1653778781, @@ -5112,7 +4005,7 @@ "type": "github" } }, - "haskell-language-server_3": { + "haskell-language-server_28": { "flake": false, "locked": { "lastModified": 1650980856, @@ -5129,24 +4022,23 @@ "type": "github" } }, - "haskell-language-server_30": { + "haskell-language-server_29": { "flake": false, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, - "haskell-language-server_31": { + "haskell-language-server_3": { "flake": false, "locked": { "lastModified": 1653778781, @@ -5162,7 +4054,7 @@ "type": "github" } }, - "haskell-language-server_32": { + "haskell-language-server_30": { "flake": false, "locked": { "lastModified": 1650980856, @@ -5179,30 +4071,31 @@ "type": "github" } }, - "haskell-language-server_33": { + "haskell-language-server_4": { "flake": false, "locked": { - "lastModified": 1655140576, - "narHash": "sha256-mHJuIk1ElmgPxvEUO2Y3E6T674F2tO5SS/uixf4R2fM=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "8a5840a020048c74285f9997b9b02b9b04c658c6", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, - "haskell-language-server_34": { + "haskell-language-server_5": { "flake": false, "locked": { - "lastModified": 1645014262, - "narHash": "sha256-f49So1teiroV+S7sbGTK4AhzUOXpoiQ26/fTjdIKkqc=", + "lastModified": 1653778781, + "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "96ea854debd92f9a54e2270b9b9a080c0ce6f3d1", + "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", "type": "github" }, "original": { @@ -5211,24 +4104,24 @@ "type": "github" } }, - "haskell-language-server_35": { + "haskell-language-server_6": { "flake": false, "locked": { - "lastModified": 1643835246, - "narHash": "sha256-5LQHcQmi3mUGRgJu+X/m3jeM3kdkYjLD+KwgnxBlbeU=", + "lastModified": 1650980856, + "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", "owner": "haskell", "repo": "haskell-language-server", - "rev": "024ddc8b3904f8b8e8fe67ba6b9ebd8a4bd7ce76", + "rev": "b5a37f7fc360596899cb2945f363030f44156415", "type": "github" }, "original": { "owner": "haskell", - "ref": "1.6.1.1", + "ref": "1.7.0.0", "repo": "haskell-language-server", "type": "github" } }, - "haskell-language-server_36": { + "haskell-language-server_7": { "flake": false, "locked": { "lastModified": 1653778781, @@ -5244,7 +4137,7 @@ "type": "github" } }, - "haskell-language-server_37": { + "haskell-language-server_8": { "flake": false, "locked": { "lastModified": 1650980856, @@ -5261,23 +4154,7 @@ "type": "github" } }, - "haskell-language-server_4": { - "flake": false, - "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", - "type": "github" - }, - "original": { - "owner": "haskell", - "repo": "haskell-language-server", - "type": "github" - } - }, - "haskell-language-server_5": { + "haskell-language-server_9": { "flake": false, "locked": { "lastModified": 1653778781, @@ -5293,198 +4170,229 @@ "type": "github" } }, - "haskell-language-server_6": { - "flake": false, - "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", - "type": "github" + "haskell-nix": { + "inputs": { + "HTTP": "HTTP", + "cabal-32": "cabal-32", + "cabal-34": "cabal-34", + "cabal-36": "cabal-36", + "cardano-shell": "cardano-shell", + "flake-utils": "flake-utils", + "ghc-8.6.5-iohk": "ghc-8.6.5-iohk", + "hackage": "hackage", + "hpc-coveralls": "hpc-coveralls", + "hydra": "hydra", + "nix-tools": "nix-tools", + "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-2003": "nixpkgs-2003", + "nixpkgs-2105": "nixpkgs-2105", + "nixpkgs-2111": "nixpkgs-2111_2", + "nixpkgs-unstable": "nixpkgs-unstable", + "old-ghc-nix": "old-ghc-nix", + "stackage": "stackage" }, - "original": { - "owner": "haskell", - "ref": "1.7.0.0", - "repo": "haskell-language-server", - "type": "github" - } - }, - "haskell-language-server_7": { - "flake": false, "locked": { - "lastModified": 1654120290, - "narHash": "sha256-6NuFBnEzJPvWfvbYxXk/WCQDjsEbjCQ1nAelhBDi4yQ=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "140f9040ae88352ca1140a750e7c26485fdfbe17", + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", "type": "github" }, "original": { - "owner": "haskell", - "repo": "haskell-language-server", + "owner": "input-output-hk", + "repo": "haskell.nix", "type": "github" } }, - "haskell-language-server_8": { - "flake": false, + "haskell-nix-extra-hackage": { + "inputs": { + "haskell-nix": [ + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1653778781, - "narHash": "sha256-oEVBaYRLjD4gC3vQuT0DCgmCSIeWSwGPVXXSKJDFUK0=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "8c47d6ce2a8409a285a3f4c3f0e10c25fb4dd848", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { - "owner": "haskell", - "repo": "haskell-language-server", + "owner": "mlabs-haskell", + "ref": "separate-hackages", + "repo": "haskell-nix-extra-hackage", "type": "github" } }, - "haskell-language-server_9": { - "flake": false, + "haskell-nix-extra-hackage_10": { + "inputs": { + "haskell-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix" + ], + "nixpkgs": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1650980856, - "narHash": "sha256-uiwsfh/K3IABZDYj7JUZNIAPRVqH6g/r8X6QKg8DrZE=", - "owner": "haskell", - "repo": "haskell-language-server", - "rev": "b5a37f7fc360596899cb2945f363030f44156415", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { - "owner": "haskell", - "ref": "1.7.0.0", - "repo": "haskell-language-server", + "owner": "mlabs-haskell", + "ref": "separate-hackages", + "repo": "haskell-nix-extra-hackage", "type": "github" } }, - "haskell-nix": { + "haskell-nix-extra-hackage_11": { "inputs": { - "HTTP": "HTTP", - "cabal-32": "cabal-32", - "cabal-34": "cabal-34", - "cabal-36": "cabal-36", - "cardano-shell": "cardano-shell", - "flake-utils": "flake-utils_3", - "ghc-8.6.5-iohk": "ghc-8.6.5-iohk", - "hackage": "hackage", - "hpc-coveralls": "hpc-coveralls", - "hydra": "hydra", - "nix-tools": "nix-tools", - "nixpkgs": [ + "haskell-nix": [ + "plutarch-safe-money", "liqwid-plutarch-extra", + "plutarch-numeric", "plutarch", - "haskell-nix", - "nixpkgs-unstable" + "haskell-nix" ], - "nixpkgs-2003": "nixpkgs-2003", - "nixpkgs-2105": "nixpkgs-2105", - "nixpkgs-2111": "nixpkgs-2111_2", - "nixpkgs-unstable": "nixpkgs-unstable", - "old-ghc-nix": "old-ghc-nix", - "stackage": "stackage" + "nixpkgs": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "nixpkgs" + ] }, "locked": { - "lastModified": 1654068838, - "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", - "owner": "input-output-hk", - "repo": "haskell.nix", - "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", + "owner": "mlabs-haskell", + "repo": "haskell-nix-extra-hackage", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { - "owner": "input-output-hk", - "repo": "haskell.nix", + "owner": "mlabs-haskell", + "ref": "separate-hackages", + "repo": "haskell-nix-extra-hackage", "type": "github" } }, - "haskell-nix-extra-hackage": { + "haskell-nix-extra-hackage_12": { "inputs": { "haskell-nix": [ + "plutarch-safe-money", "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ + "plutarch-safe-money", "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "nixpkgs" ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } }, - "haskell-nix-extra-hackage_10": { + "haskell-nix-extra-hackage_13": { "inputs": { "haskell-nix": [ "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "haskell-nix" ], "nixpkgs": [ "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch-quickcheck", "plutarch", "nixpkgs" ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } }, - "haskell-nix-extra-hackage_11": { + "haskell-nix-extra-hackage_14": { "inputs": { "haskell-nix": [ "plutarch-safe-money", + "plutarch-numeric", "plutarch", "haskell-nix" ], "nixpkgs": [ "plutarch-safe-money", + "plutarch-numeric", "plutarch", "nixpkgs" ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } }, - "haskell-nix-extra-hackage_12": { + "haskell-nix-extra-hackage_15": { "inputs": { "haskell-nix": [ "plutarch-script-export", @@ -5498,15 +4406,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5527,15 +4436,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5556,15 +4466,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5585,15 +4496,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5610,15 +4522,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5637,15 +4550,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5664,15 +4578,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5691,15 +4606,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5720,15 +4636,16 @@ ] }, "locked": { - "lastModified": 1653405678, - "narHash": "sha256-fPpPxuCZDF5b/iQgmUg2jspPObsK0mpcchUti/LR8D0=", + "lastModified": 1655143375, + "narHash": "sha256-yU+HPLwGPf5IeLj9IBQ1zrPBTYEwvYbuMnADs4T8RLQ=", "owner": "mlabs-haskell", "repo": "haskell-nix-extra-hackage", - "rev": "cf4613eb0d883a8c12c86d7cdbdaaf15fdc70128", + "rev": "03ee7afdc1ad982e059e3941db80f7a5b30a2757", "type": "github" }, "original": { "owner": "mlabs-haskell", + "ref": "separate-hackages", "repo": "haskell-nix-extra-hackage", "type": "github" } @@ -5756,7 +4673,7 @@ "cabal-34": "cabal-34_6", "cabal-36": "cabal-36_6", "cardano-shell": "cardano-shell_6", - "flake-utils": "flake-utils_16", + "flake-utils": "flake-utils_6", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_6", "hackage": "hackage_6", "hpc-coveralls": "hpc-coveralls_6", @@ -5812,7 +4729,7 @@ "cabal-34": "cabal-34_7", "cabal-36": "cabal-36_7", "cardano-shell": "cardano-shell_7", - "flake-utils": "flake-utils_19", + "flake-utils": "flake-utils_7", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_7", "hackage": "hackage_7", "hpc-coveralls": "hpc-coveralls_7", @@ -5868,7 +4785,7 @@ "cabal-34": "cabal-34_8", "cabal-36": "cabal-36_8", "cardano-shell": "cardano-shell_8", - "flake-utils": "flake-utils_22", + "flake-utils": "flake-utils_8", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_8", "hackage": "hackage_8", "hpc-coveralls": "hpc-coveralls_8", @@ -5924,7 +4841,7 @@ "cabal-34": "cabal-34_9", "cabal-36": "cabal-36_9", "cardano-shell": "cardano-shell_9", - "flake-utils": "flake-utils_25", + "flake-utils": "flake-utils_9", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_9", "hackage": "hackage_9", "hpc-coveralls": "hpc-coveralls_9", @@ -5981,7 +4898,7 @@ "cabal-34": "cabal-34_10", "cabal-36": "cabal-36_10", "cardano-shell": "cardano-shell_10", - "flake-utils": "flake-utils_28", + "flake-utils": "flake-utils_10", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_10", "hackage": "hackage_10", "hpc-coveralls": "hpc-coveralls_10", @@ -5990,7 +4907,7 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -6055,7 +4972,7 @@ "cabal-34": "cabal-34_11", "cabal-36": "cabal-36_11", "cardano-shell": "cardano-shell_11", - "flake-utils": "flake-utils_31", + "flake-utils": "flake-utils_11", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_11", "hackage": "hackage_11", "hpc-coveralls": "hpc-coveralls_11", @@ -6063,6 +4980,8 @@ "nix-tools": "nix-tools_11", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -6111,14 +5030,16 @@ "cabal-34": "cabal-34_12", "cabal-36": "cabal-36_12", "cardano-shell": "cardano-shell_12", - "flake-utils": "flake-utils_37", + "flake-utils": "flake-utils_12", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_12", "hackage": "hackage_12", "hpc-coveralls": "hpc-coveralls_12", + "hydra": "hydra_12", "nix-tools": "nix-tools_12", "nixpkgs": [ "plutarch-safe-money", - "plutarch-numeric", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -6131,16 +5052,15 @@ "stackage": "stackage_12" }, "locked": { - "lastModified": 1644944726, - "narHash": "sha256-jJWdP/3Ne1y1akC3m9rSO5ItRoBc4UTdVQZBCuPmmrM=", - "owner": "L-as", + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "45c583b5580c130487eb5a342679f0bdbc2b23fc", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", "type": "github" }, "original": { - "owner": "L-as", - "ref": "master", + "owner": "input-output-hk", "repo": "haskell.nix", "type": "github" } @@ -6148,11 +5068,11 @@ "haskell-nix_24": { "flake": false, "locked": { - "lastModified": 1629380841, - "narHash": "sha256-gWOWCfX7IgVSvMMYN6rBGK6EA0pk6pmYguXzMvGte+Q=", + "lastModified": 1651151636, + "narHash": "sha256-WdMP9IMB5kByT0zimDuCYZF/dinRB104H8iDTG/c1Eo=", "owner": "input-output-hk", "repo": "haskell.nix", - "rev": "7215f083b37741446aa325b20c8ba9f9f76015eb", + "rev": "f707aa2e75c0d33473166abc61c0b43ac6e107c0", "type": "github" }, "original": { @@ -6168,14 +5088,14 @@ "cabal-34": "cabal-34_13", "cabal-36": "cabal-36_13", "cardano-shell": "cardano-shell_13", - "flake-utils": "flake-utils_38", + "flake-utils": "flake-utils_13", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_13", "hackage": "hackage_13", "hpc-coveralls": "hpc-coveralls_13", - "hydra": "hydra_12", + "hydra": "hydra_13", "nix-tools": "nix-tools_13", "nixpkgs": [ - "plutarch-script-export", + "plutarch-safe-money", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -6217,6 +5137,103 @@ "type": "github" } }, + "haskell-nix_27": { + "inputs": { + "HTTP": "HTTP_14", + "cabal-32": "cabal-32_14", + "cabal-34": "cabal-34_14", + "cabal-36": "cabal-36_14", + "cardano-shell": "cardano-shell_14", + "flake-utils": "flake-utils_14", + "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_14", + "hackage": "hackage_14", + "hpc-coveralls": "hpc-coveralls_14", + "hydra": "hydra_14", + "nix-tools": "nix-tools_14", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-2003": "nixpkgs-2003_14", + "nixpkgs-2105": "nixpkgs-2105_14", + "nixpkgs-2111": "nixpkgs-2111_28", + "nixpkgs-unstable": "nixpkgs-unstable_14", + "old-ghc-nix": "old-ghc-nix_14", + "stackage": "stackage_14" + }, + "locked": { + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_28": { + "flake": false, + "locked": { + "lastModified": 1651151636, + "narHash": "sha256-WdMP9IMB5kByT0zimDuCYZF/dinRB104H8iDTG/c1Eo=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "f707aa2e75c0d33473166abc61c0b43ac6e107c0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, + "haskell-nix_29": { + "inputs": { + "HTTP": "HTTP_15", + "cabal-32": "cabal-32_15", + "cabal-34": "cabal-34_15", + "cabal-36": "cabal-36_15", + "cardano-shell": "cardano-shell_15", + "flake-utils": "flake-utils_15", + "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_15", + "hackage": "hackage_15", + "hpc-coveralls": "hpc-coveralls_15", + "hydra": "hydra_15", + "nix-tools": "nix-tools_15", + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-2003": "nixpkgs-2003_15", + "nixpkgs-2105": "nixpkgs-2105_15", + "nixpkgs-2111": "nixpkgs-2111_30", + "nixpkgs-unstable": "nixpkgs-unstable_15", + "old-ghc-nix": "old-ghc-nix_15", + "stackage": "stackage_15" + }, + "locked": { + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, "haskell-nix_3": { "inputs": { "HTTP": "HTTP_2", @@ -6224,7 +5241,7 @@ "cabal-34": "cabal-34_2", "cabal-36": "cabal-36_2", "cardano-shell": "cardano-shell_2", - "flake-utils": "flake-utils_6", + "flake-utils": "flake-utils_2", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_2", "hackage": "hackage_2", "hpc-coveralls": "hpc-coveralls_2", @@ -6258,6 +5275,22 @@ "type": "github" } }, + "haskell-nix_30": { + "flake": false, + "locked": { + "lastModified": 1651151636, + "narHash": "sha256-WdMP9IMB5kByT0zimDuCYZF/dinRB104H8iDTG/c1Eo=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "f707aa2e75c0d33473166abc61c0b43ac6e107c0", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "haskell.nix", + "type": "github" + } + }, "haskell-nix_4": { "flake": false, "locked": { @@ -6281,7 +5314,7 @@ "cabal-34": "cabal-34_3", "cabal-36": "cabal-36_3", "cardano-shell": "cardano-shell_3", - "flake-utils": "flake-utils_9", + "flake-utils": "flake-utils_3", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_3", "hackage": "hackage_3", "hpc-coveralls": "hpc-coveralls_3", @@ -6338,7 +5371,7 @@ "cabal-34": "cabal-34_4", "cabal-36": "cabal-36_4", "cardano-shell": "cardano-shell_4", - "flake-utils": "flake-utils_12", + "flake-utils": "flake-utils_4", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_4", "hackage": "hackage_4", "hpc-coveralls": "hpc-coveralls_4", @@ -6395,7 +5428,7 @@ "cabal-34": "cabal-34_5", "cabal-36": "cabal-36_5", "cardano-shell": "cardano-shell_5", - "flake-utils": "flake-utils_13", + "flake-utils": "flake-utils_5", "ghc-8.6.5-iohk": "ghc-8.6.5-iohk_5", "hackage": "hackage_5", "hpc-coveralls": "hpc-coveralls_5", @@ -6414,209 +5447,58 @@ "stackage": "stackage_5" }, "locked": { - "lastModified": 1654068838, - "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", - "owner": "input-output-hk", - "repo": "haskell.nix", - "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "haskell.nix", - "type": "github" - } - }, - "heist": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_10": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_11": { - "flake": false, - "locked": { - "lastModified": 1649279862, - "narHash": "sha256-YPD7Qv1ZcXM4uAlsZ2P/2CKen4H2OY3VHHGluYFVulg=", - "owner": "srid", - "repo": "heist", - "rev": "085c7ab88b73079de27c8def27d67f03853fde05", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote-release--ghc9", - "repo": "heist", - "type": "github" - } - }, - "heist_2": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_3": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_4": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_5": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_6": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", + "lastModified": 1654068838, + "narHash": "sha256-GHSufC21DSg8Lz2AzIg3DA9DPxGvLqxGFa/4ADoXRhU=", + "owner": "input-output-hk", + "repo": "haskell.nix", + "rev": "fa2fa131fe15e630c91ab4078d12eb32c41f934b", "type": "github" }, "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", + "owner": "input-output-hk", + "repo": "haskell.nix", "type": "github" } }, - "heist_7": { - "flake": false, - "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", - "type": "github" + "hercules-ci-effects": { + "inputs": { + "nixpkgs": "nixpkgs_4" }, - "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", - "type": "github" - } - }, - "heist_8": { - "flake": false, "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", + "lastModified": 1653841712, + "narHash": "sha256-XBF4i1MuIRAEbFpj3Z3fVaYxzNEsYapyENtw3vG+q1I=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "e14d2131b7c81acca3904b584ac45fb72da64dd2", "type": "github" }, "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", "type": "github" } }, - "heist_9": { - "flake": false, + "hercules-ci-effects_10": { + "inputs": { + "nixpkgs": "nixpkgs_40" + }, "locked": { - "lastModified": 1653169917, - "narHash": "sha256-i52wi4nNC6ATx8gTtmpLnxQZEhKSM0LbpmSu57d5VqI=", - "owner": "srid", - "repo": "heist", - "rev": "75533cade1a0d9859ff487cbf6f22e98711248d3", + "lastModified": 1653841712, + "narHash": "sha256-XBF4i1MuIRAEbFpj3Z3fVaYxzNEsYapyENtw3vG+q1I=", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", + "rev": "e14d2131b7c81acca3904b584ac45fb72da64dd2", "type": "github" }, "original": { - "owner": "srid", - "ref": "emanote", - "repo": "heist", + "owner": "hercules-ci", + "repo": "hercules-ci-effects", "type": "github" } }, - "hercules-ci-effects": { + "hercules-ci-effects_11": { "inputs": { - "nixpkgs": "nixpkgs_4" + "nixpkgs": "nixpkgs_44" }, "locked": { "lastModified": 1653841712, @@ -6632,9 +5514,9 @@ "type": "github" } }, - "hercules-ci-effects_10": { + "hercules-ci-effects_12": { "inputs": { - "nixpkgs": "nixpkgs_47" + "nixpkgs": "nixpkgs_48" }, "locked": { "lastModified": 1653841712, @@ -6650,9 +5532,9 @@ "type": "github" } }, - "hercules-ci-effects_11": { + "hercules-ci-effects_13": { "inputs": { - "nixpkgs": "nixpkgs_52" + "nixpkgs": "nixpkgs_51" }, "locked": { "lastModified": 1653841712, @@ -6668,16 +5550,16 @@ "type": "github" } }, - "hercules-ci-effects_12": { + "hercules-ci-effects_14": { "inputs": { - "nixpkgs": "nixpkgs_58" + "nixpkgs": "nixpkgs_55" }, "locked": { - "lastModified": 1647711660, - "narHash": "sha256-ZoV/oAH8g4NYeTzC7OCZnlM7l0hNBs0nUHf4l1+lmDc=", + "lastModified": 1653841712, + "narHash": "sha256-XBF4i1MuIRAEbFpj3Z3fVaYxzNEsYapyENtw3vG+q1I=", "owner": "hercules-ci", "repo": "hercules-ci-effects", - "rev": "d17e41cfb454d07f5d8d3b667bf45b079d868541", + "rev": "e14d2131b7c81acca3904b584ac45fb72da64dd2", "type": "github" }, "original": { @@ -6686,9 +5568,9 @@ "type": "github" } }, - "hercules-ci-effects_13": { + "hercules-ci-effects_15": { "inputs": { - "nixpkgs": "nixpkgs_61" + "nixpkgs": "nixpkgs_59" }, "locked": { "lastModified": 1653841712, @@ -6706,7 +5588,7 @@ }, "hercules-ci-effects_2": { "inputs": { - "nixpkgs": "nixpkgs_9" + "nixpkgs": "nixpkgs_8" }, "locked": { "lastModified": 1653841712, @@ -6724,7 +5606,7 @@ }, "hercules-ci-effects_3": { "inputs": { - "nixpkgs": "nixpkgs_14" + "nixpkgs": "nixpkgs_12" }, "locked": { "lastModified": 1653841712, @@ -6742,7 +5624,7 @@ }, "hercules-ci-effects_4": { "inputs": { - "nixpkgs": "nixpkgs_19" + "nixpkgs": "nixpkgs_16" }, "locked": { "lastModified": 1653841712, @@ -6760,7 +5642,7 @@ }, "hercules-ci-effects_5": { "inputs": { - "nixpkgs": "nixpkgs_22" + "nixpkgs": "nixpkgs_19" }, "locked": { "lastModified": 1653841712, @@ -6778,7 +5660,7 @@ }, "hercules-ci-effects_6": { "inputs": { - "nixpkgs": "nixpkgs_27" + "nixpkgs": "nixpkgs_23" }, "locked": { "lastModified": 1653841712, @@ -6796,7 +5678,7 @@ }, "hercules-ci-effects_7": { "inputs": { - "nixpkgs": "nixpkgs_32" + "nixpkgs": "nixpkgs_27" }, "locked": { "lastModified": 1653841712, @@ -6814,7 +5696,7 @@ }, "hercules-ci-effects_8": { "inputs": { - "nixpkgs": "nixpkgs_37" + "nixpkgs": "nixpkgs_31" }, "locked": { "lastModified": 1653841712, @@ -6832,7 +5714,7 @@ }, "hercules-ci-effects_9": { "inputs": { - "nixpkgs": "nixpkgs_42" + "nixpkgs": "nixpkgs_36" }, "locked": { "lastModified": 1653841712, @@ -6928,7 +5810,7 @@ "type": "github" } }, - "hpc-coveralls_2": { + "hpc-coveralls_14": { "flake": false, "locked": { "lastModified": 1607498076, @@ -6944,7 +5826,7 @@ "type": "github" } }, - "hpc-coveralls_3": { + "hpc-coveralls_15": { "flake": false, "locked": { "lastModified": 1607498076, @@ -6960,7 +5842,7 @@ "type": "github" } }, - "hpc-coveralls_4": { + "hpc-coveralls_2": { "flake": false, "locked": { "lastModified": 1607498076, @@ -6976,7 +5858,7 @@ "type": "github" } }, - "hpc-coveralls_5": { + "hpc-coveralls_3": { "flake": false, "locked": { "lastModified": 1607498076, @@ -6992,7 +5874,7 @@ "type": "github" } }, - "hpc-coveralls_6": { + "hpc-coveralls_4": { "flake": false, "locked": { "lastModified": 1607498076, @@ -7008,7 +5890,7 @@ "type": "github" } }, - "hpc-coveralls_7": { + "hpc-coveralls_5": { "flake": false, "locked": { "lastModified": 1607498076, @@ -7024,7 +5906,7 @@ "type": "github" } }, - "hpc-coveralls_8": { + "hpc-coveralls_6": { "flake": false, "locked": { "lastModified": 1607498076, @@ -7040,7 +5922,7 @@ "type": "github" } }, - "hpc-coveralls_9": { + "hpc-coveralls_7": { "flake": false, "locked": { "lastModified": 1607498076, @@ -7056,77 +5938,97 @@ "type": "github" } }, - "hs-memory": { + "hpc-coveralls_8": { "flake": false, "locked": { - "lastModified": 1636757734, - "narHash": "sha256-DIlt0NpFUx8IUeTcgZNBJWWfyNaKv5ZKYw1K9aLvxBs=", - "owner": "vincenthz", - "repo": "hs-memory", - "rev": "3cf661a8a9a8ac028df77daa88e8d65c55a3347a", + "lastModified": 1607498076, + "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", "type": "github" }, "original": { - "owner": "vincenthz", - "repo": "hs-memory", - "rev": "3cf661a8a9a8ac028df77daa88e8d65c55a3347a", + "owner": "sevanspowell", + "repo": "hpc-coveralls", "type": "github" } }, - "hspec": { + "hpc-coveralls_9": { "flake": false, "locked": { - "lastModified": 1649095108, - "narHash": "sha256-cPmt4hvmdh727VT6UAL8yFArmm4FAWeg3K5Qi3XtU4g=", - "owner": "srid", - "repo": "hspec", - "rev": "44f2a143e10c93df237af428457d0e4b74ae270a", + "lastModified": 1607498076, + "narHash": "sha256-8uqsEtivphgZWYeUo5RDUhp6bO9j2vaaProQxHBltQk=", + "owner": "sevanspowell", + "repo": "hpc-coveralls", + "rev": "14df0f7d229f4cd2e79f8eabb1a740097fdfa430", "type": "github" }, "original": { - "owner": "srid", - "ref": "askAncestors", - "repo": "hspec", + "owner": "sevanspowell", + "repo": "hpc-coveralls", "type": "github" } }, - "hspec-golden": { - "flake": false, + "hydra": { + "inputs": { + "nix": "nix", + "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix", + "hydra", + "nix", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1648755064, - "narHash": "sha256-5a6BksZx00o2iL0Ei/L1Kkou2BsnsIagN+tTmqYyKfs=", - "owner": "stackbuilders", - "repo": "hspec-golden", - "rev": "4b0ad56b2de0254a7b1e0feda917656f78a5bcda", + "lastModified": 1646878427, + "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "owner": "NixOS", + "repo": "hydra", + "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", "type": "github" }, "original": { - "owner": "stackbuilders", - "repo": "hspec-golden", - "type": "github" + "id": "hydra", + "type": "indirect" } }, - "hspec-hedgehog": { - "flake": false, + "hydra_10": { + "inputs": { + "nix": "nix_10", + "nixpkgs": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix", + "hydra", + "nix", + "nixpkgs" + ] + }, "locked": { - "lastModified": 1602603478, - "narHash": "sha256-XnS3zjQ7eh3iBOWq+Z/YcwrfWI55hV6k8LsZ8qm/qOc=", - "owner": "parsonsmatt", - "repo": "hspec-hedgehog", - "rev": "eb617d854542510f0129acdea4bf52e50b13042e", + "lastModified": 1646878427, + "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "owner": "NixOS", + "repo": "hydra", + "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", "type": "github" }, "original": { - "owner": "parsonsmatt", - "repo": "hspec-hedgehog", - "type": "github" + "id": "hydra", + "type": "indirect" } }, - "hydra": { + "hydra_11": { "inputs": { - "nix": "nix", + "nix": "nix_11", "nixpkgs": [ + "plutarch-safe-money", "liqwid-plutarch-extra", + "plutarch-numeric", "plutarch", "haskell-nix", "hydra", @@ -7147,9 +6049,9 @@ "type": "indirect" } }, - "hydra_10": { + "hydra_12": { "inputs": { - "nix": "nix_10", + "nix": "nix_12", "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -7174,9 +6076,9 @@ "type": "indirect" } }, - "hydra_11": { + "hydra_13": { "inputs": { - "nix": "nix_11", + "nix": "nix_13", "nixpkgs": [ "plutarch-safe-money", "plutarch", @@ -7199,9 +6101,35 @@ "type": "indirect" } }, - "hydra_12": { + "hydra_14": { "inputs": { - "nix": "nix_12", + "nix": "nix_14", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "hydra", + "nix", + "nixpkgs" + ] + }, + "locked": { + "lastModified": 1646878427, + "narHash": "sha256-KtbrofMtN8GlM7D+n90kixr7QpSlVmdN+vK5CA/aRzc=", + "owner": "NixOS", + "repo": "hydra", + "rev": "28b682b85b7efc5cf7974065792a1f22203a5927", + "type": "github" + }, + "original": { + "id": "hydra", + "type": "indirect" + } + }, + "hydra_15": { + "inputs": { + "nix": "nix_15", "nixpkgs": [ "plutarch-script-export", "plutarch", @@ -7530,7 +6458,87 @@ "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", "owner": "input-output-hk", "repo": "iohk-nix", - "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_16": { + "flake": false, + "locked": { + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_17": { + "flake": false, + "locked": { + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_18": { + "flake": false, + "locked": { + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_19": { + "flake": false, + "locked": { + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "iohk-nix", + "type": "github" + } + }, + "iohk-nix_2": { + "flake": false, + "locked": { + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "owner": "input-output-hk", + "repo": "iohk-nix", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", "type": "github" }, "original": { @@ -7539,7 +6547,7 @@ "type": "github" } }, - "iohk-nix_16": { + "iohk-nix_20": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7555,7 +6563,7 @@ "type": "github" } }, - "iohk-nix_17": { + "iohk-nix_21": { "flake": false, "locked": { "lastModified": 1653579289, @@ -7571,7 +6579,7 @@ "type": "github" } }, - "iohk-nix_18": { + "iohk-nix_22": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7587,7 +6595,7 @@ "type": "github" } }, - "iohk-nix_19": { + "iohk-nix_23": { "flake": false, "locked": { "lastModified": 1653579289, @@ -7603,23 +6611,7 @@ "type": "github" } }, - "iohk-nix_2": { - "flake": false, - "locked": { - "lastModified": 1626953580, - "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", - "owner": "input-output-hk", - "repo": "iohk-nix", - "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", - "type": "github" - }, - "original": { - "owner": "input-output-hk", - "repo": "iohk-nix", - "type": "github" - } - }, - "iohk-nix_20": { + "iohk-nix_24": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7635,7 +6627,7 @@ "type": "github" } }, - "iohk-nix_21": { + "iohk-nix_25": { "flake": false, "locked": { "lastModified": 1653579289, @@ -7651,7 +6643,7 @@ "type": "github" } }, - "iohk-nix_22": { + "iohk-nix_26": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7667,14 +6659,14 @@ "type": "github" } }, - "iohk-nix_23": { + "iohk-nix_27": { "flake": false, "locked": { - "lastModified": 1643251385, - "narHash": "sha256-Czbd69lg0ARSZfC18V6h+gtPMioWDAEVPbiHgL2x9LM=", + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", "owner": "input-output-hk", "repo": "iohk-nix", - "rev": "9d6ee3dcb3482f791e40ed991ad6fc649b343ad4", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", "type": "github" }, "original": { @@ -7683,7 +6675,7 @@ "type": "github" } }, - "iohk-nix_24": { + "iohk-nix_28": { "flake": false, "locked": { "lastModified": 1626953580, @@ -7699,7 +6691,7 @@ "type": "github" } }, - "iohk-nix_25": { + "iohk-nix_29": { "flake": false, "locked": { "lastModified": 1653579289, @@ -7715,14 +6707,14 @@ "type": "github" } }, - "iohk-nix_26": { + "iohk-nix_3": { "flake": false, "locked": { - "lastModified": 1626953580, - "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", + "lastModified": 1653579289, + "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", "owner": "input-output-hk", "repo": "iohk-nix", - "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", + "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", "type": "github" }, "original": { @@ -7731,14 +6723,14 @@ "type": "github" } }, - "iohk-nix_3": { + "iohk-nix_30": { "flake": false, "locked": { - "lastModified": 1653579289, - "narHash": "sha256-wveDdPsgB/3nAGAdFaxrcgLEpdi0aJ5kEVNtI+YqVfo=", + "lastModified": 1626953580, + "narHash": "sha256-iEI9aTOaZMGsjWzcrctrC0usmiagwKT2v1LSDe9/tMU=", "owner": "input-output-hk", "repo": "iohk-nix", - "rev": "edb2d2df2ebe42bbdf03a0711115cf6213c9d366", + "rev": "cbd497f5844249ef8fe617166337d59f2a6ebe90", "type": "github" }, "original": { @@ -7843,217 +6835,302 @@ "type": "github" } }, - "ixset-typed": { - "flake": false, + "liqwid-nix": { + "inputs": { + "nixpkgs": "nixpkgs", + "nixpkgs-2205": "nixpkgs-2205" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1660251224, + "narHash": "sha256-spBrASFpblmQFYuS4GHv9hI3cLRzh6OG5tNikRmUUZA=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "6bf26da0cbd1dea4ea275ffb5d05214a7d3e61be", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "ref": "main", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_10": { - "flake": false, + "liqwid-nix_10": { + "inputs": { + "nixpkgs": "nixpkgs_34" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_11": { - "flake": false, + "liqwid-nix_11": { + "inputs": { + "nixpkgs": "nixpkgs_38" + }, "locked": { - "lastModified": 1639657838, - "narHash": "sha256-pI2dzJfkR10CHDEX6TV2E01pqcGkj7kheROw05MRTR8=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "6cf16f77ae173311742623e5f0b308a21b337aa7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_2": { - "flake": false, + "liqwid-nix_12": { + "inputs": { + "nixpkgs": "nixpkgs_42" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_3": { - "flake": false, + "liqwid-nix_13": { + "inputs": { + "nixpkgs": "nixpkgs_46" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_4": { - "flake": false, + "liqwid-nix_14": { + "inputs": { + "nixpkgs": "nixpkgs_53" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_5": { - "flake": false, + "liqwid-nix_15": { + "inputs": { + "nixpkgs": "nixpkgs_57", + "nixpkgs-2205": "nixpkgs-2205_2" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1660165784, + "narHash": "sha256-uSwB6jmiP0giQM9NwCkXloabfRnbDSsd1EAKXbTQpq4=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "07d35ade0f9a1bab07413d059ccec63982592552", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_6": { - "flake": false, + "liqwid-nix_2": { + "inputs": { + "nixpkgs": "nixpkgs_2" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_7": { - "flake": false, + "liqwid-nix_3": { + "inputs": { + "nixpkgs": "nixpkgs_6" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_8": { - "flake": false, + "liqwid-nix_4": { + "inputs": { + "nixpkgs": "nixpkgs_10" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "ixset-typed_9": { - "flake": false, + "liqwid-nix_5": { + "inputs": { + "nixpkgs": "nixpkgs_14" + }, "locked": { - "lastModified": 1652177108, - "narHash": "sha256-g0N1jiumsxHzfo9SGVR+q9awRvHEehSRaoW89LXCCnY=", - "owner": "well-typed", - "repo": "ixset-typed", - "rev": "244d3b72fd051b8d78f2d4edb6208269f29d85b7", + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", "type": "github" }, "original": { - "owner": "well-typed", - "repo": "ixset-typed", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", "type": "github" } }, - "lint-utils": { + "liqwid-nix_6": { "inputs": { - "flake-utils": "flake-utils_33", - "nixpkgs": [ - "plutarch-safe-money", - "plutarch-numeric", - "plutarch", - "emanote", - "ema", - "nixpkgs" - ] + "nixpkgs": "nixpkgs_21" + }, + "locked": { + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "type": "github" + } + }, + "liqwid-nix_7": { + "inputs": { + "nixpkgs": "nixpkgs_25" + }, + "locked": { + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "type": "github" + } + }, + "liqwid-nix_8": { + "inputs": { + "nixpkgs": "nixpkgs_29" }, "locked": { - "lastModified": 1650427214, - "narHash": "sha256-9m66rRSSM614ocRXNPAArwnrS6zzCQYYhd3nw8g4QUg=", - "ref": "overengineered", - "rev": "5555def5a25c5437834c06cbe79b3945916ec59f", - "revCount": 28, - "type": "git", - "url": "https://gitlab.homotopic.tech/nix/lint-utils.git" + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "type": "github" + } + }, + "liqwid-nix_9": { + "inputs": { + "nixpkgs": "nixpkgs_33" + }, + "locked": { + "lastModified": 1659383708, + "narHash": "sha256-eenTO5t4ocK7VzorMUdUyKUoup976cCu5dJcVjebY8E=", + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "rev": "c261df76dc31b3dc5dfde7030420e0a6be73f615", + "type": "github" }, "original": { - "ref": "overengineered", - "type": "git", - "url": "https://gitlab.homotopic.tech/nix/lint-utils.git" + "owner": "Liqwid-Labs", + "repo": "liqwid-nix", + "type": "github" } }, "liqwid-plutarch-extra": { "inputs": { - "haskell-language-server": "haskell-language-server", + "haskell-language-server": [ + "liqwid-plutarch-extra", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "liqwid-plutarch-extra", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "liqwid-plutarch-extra", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_2", "nixpkgs": [ "liqwid-plutarch-extra", "plutarch", @@ -8067,29 +7144,47 @@ "plutarch-quickcheck": "plutarch-quickcheck" }, "locked": { - "lastModified": 1658864114, - "narHash": "sha256-6lMJubbJOVNFe/chEFmbGStI+Pm7zy1+t2wPcDVSiv8=", + "lastModified": 1660162748, + "narHash": "sha256-TvDWZ3mbfQCKHgNDjRR2Ydjx9cgw48hDpN0t/wy7oCI=", "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "fb6d4d1fc73b1c5ff90b5356e8cb3367213aeae0", + "rev": "d8be5f8dc91ad00158727fdbccb6db849e9f3559", "type": "github" }, "original": { "owner": "Liqwid-Labs", - "ref": "seungheonoh/agoraUtils", + "ref": "plutus-v1", "repo": "liqwid-plutarch-extra", "type": "github" } }, "liqwid-plutarch-extra_2": { "inputs": { - "haskell-language-server": "haskell-language-server_25", + "haskell-language-server": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_10", "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -8099,14 +7194,16 @@ "nixpkgs-2111": "nixpkgs-2111_17", "nixpkgs-latest": "nixpkgs-latest_17", "plutarch": "plutarch_9", + "plutarch-context-builder": "plutarch-context-builder_3", + "plutarch-numeric": "plutarch-numeric_3", "plutarch-quickcheck": "plutarch-quickcheck_3" }, "locked": { - "lastModified": 1655470312, - "narHash": "sha256-O4Dy803SFOS+S1OFEecfCRkjWc8y0iHbO+EVKtBqsGk=", + "lastModified": 1659473759, + "narHash": "sha256-hHGEaISfdUyrQEh5OeBD4IEn0xwCdR1vfk3c+yfxeaw=", "owner": "Liqwid-Labs", "repo": "liqwid-plutarch-extra", - "rev": "fd9b2e6e713c36efef30bcef8d97a069fda7d71a", + "rev": "6ddf927299f8f1681092253f0297df549b8a74b6", "type": "github" }, "original": { @@ -8180,6 +7277,54 @@ "type": "github" } }, + "lowdown-src_13": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, + "lowdown-src_14": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, + "lowdown-src_15": { + "flake": false, + "locked": { + "lastModified": 1633514407, + "narHash": "sha256-Dw32tiMjdK9t3ETl5fzGrutQTzh2rufgZV4A/BbxuD4=", + "owner": "kristapsdz", + "repo": "lowdown", + "rev": "d2c2b44ff6c27b936ec27358a2653caaef8f73b8", + "type": "github" + }, + "original": { + "owner": "kristapsdz", + "repo": "lowdown", + "type": "github" + } + }, "lowdown-src_2": { "flake": false, "locked": { @@ -8323,13 +7468,45 @@ "type": "github" }, "original": { - "owner": "NixOS", - "ref": "2.6.0", - "repo": "nix", + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, + "nix-tools": { + "flake": false, + "locked": { + "lastModified": 1649424170, + "narHash": "sha256-XgKXWispvv5RCvZzPb+p7e6Hy3LMuRjafKMl7kXzxGw=", + "owner": "input-output-hk", + "repo": "nix-tools", + "rev": "e109c94016e3b6e0db7ed413c793e2d4bdb24aa7", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "nix-tools", + "type": "github" + } + }, + "nix-tools_10": { + "flake": false, + "locked": { + "lastModified": 1649424170, + "narHash": "sha256-XgKXWispvv5RCvZzPb+p7e6Hy3LMuRjafKMl7kXzxGw=", + "owner": "input-output-hk", + "repo": "nix-tools", + "rev": "e109c94016e3b6e0db7ed413c793e2d4bdb24aa7", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "nix-tools", "type": "github" } }, - "nix-tools": { + "nix-tools_11": { "flake": false, "locked": { "lastModified": 1649424170, @@ -8345,7 +7522,7 @@ "type": "github" } }, - "nix-tools_10": { + "nix-tools_12": { "flake": false, "locked": { "lastModified": 1649424170, @@ -8361,7 +7538,7 @@ "type": "github" } }, - "nix-tools_11": { + "nix-tools_13": { "flake": false, "locked": { "lastModified": 1649424170, @@ -8377,14 +7554,14 @@ "type": "github" } }, - "nix-tools_12": { + "nix-tools_14": { "flake": false, "locked": { - "lastModified": 1644395812, - "narHash": "sha256-BVFk/BEsTLq5MMZvdy3ZYHKfaS3dHrsKh4+tb5t5b58=", + "lastModified": 1649424170, + "narHash": "sha256-XgKXWispvv5RCvZzPb+p7e6Hy3LMuRjafKMl7kXzxGw=", "owner": "input-output-hk", "repo": "nix-tools", - "rev": "d847c63b99bbec78bf83be2a61dc9f09b8a9ccc1", + "rev": "e109c94016e3b6e0db7ed413c793e2d4bdb24aa7", "type": "github" }, "original": { @@ -8393,7 +7570,7 @@ "type": "github" } }, - "nix-tools_13": { + "nix-tools_15": { "flake": false, "locked": { "lastModified": 1649424170, @@ -8540,7 +7717,7 @@ "nix_10": { "inputs": { "lowdown-src": "lowdown-src_10", - "nixpkgs": "nixpkgs_46", + "nixpkgs": "nixpkgs_39", "nixpkgs-regression": "nixpkgs-regression_10" }, "locked": { @@ -8561,7 +7738,7 @@ "nix_11": { "inputs": { "lowdown-src": "lowdown-src_11", - "nixpkgs": "nixpkgs_51", + "nixpkgs": "nixpkgs_43", "nixpkgs-regression": "nixpkgs-regression_11" }, "locked": { @@ -8582,7 +7759,7 @@ "nix_12": { "inputs": { "lowdown-src": "lowdown-src_12", - "nixpkgs": "nixpkgs_60", + "nixpkgs": "nixpkgs_47", "nixpkgs-regression": "nixpkgs-regression_12" }, "locked": { @@ -8600,10 +7777,73 @@ "type": "github" } }, + "nix_13": { + "inputs": { + "lowdown-src": "lowdown-src_13", + "nixpkgs": "nixpkgs_50", + "nixpkgs-regression": "nixpkgs-regression_13" + }, + "locked": { + "lastModified": 1643066034, + "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "owner": "NixOS", + "repo": "nix", + "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, + "nix_14": { + "inputs": { + "lowdown-src": "lowdown-src_14", + "nixpkgs": "nixpkgs_54", + "nixpkgs-regression": "nixpkgs-regression_14" + }, + "locked": { + "lastModified": 1643066034, + "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "owner": "NixOS", + "repo": "nix", + "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, + "nix_15": { + "inputs": { + "lowdown-src": "lowdown-src_15", + "nixpkgs": "nixpkgs_58", + "nixpkgs-regression": "nixpkgs-regression_15" + }, + "locked": { + "lastModified": 1643066034, + "narHash": "sha256-xEPeMcNJVOeZtoN+d+aRwolpW8mFSEQx76HTRdlhPhg=", + "owner": "NixOS", + "repo": "nix", + "rev": "a1cd7e58606a41fcf62bf8637804cf8306f17f62", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "2.6.0", + "repo": "nix", + "type": "github" + } + }, "nix_2": { "inputs": { "lowdown-src": "lowdown-src_2", - "nixpkgs": "nixpkgs_8", + "nixpkgs": "nixpkgs_7", "nixpkgs-regression": "nixpkgs-regression_2" }, "locked": { @@ -8624,7 +7864,7 @@ "nix_3": { "inputs": { "lowdown-src": "lowdown-src_3", - "nixpkgs": "nixpkgs_13", + "nixpkgs": "nixpkgs_11", "nixpkgs-regression": "nixpkgs-regression_3" }, "locked": { @@ -8645,7 +7885,7 @@ "nix_4": { "inputs": { "lowdown-src": "lowdown-src_4", - "nixpkgs": "nixpkgs_18", + "nixpkgs": "nixpkgs_15", "nixpkgs-regression": "nixpkgs-regression_4" }, "locked": { @@ -8666,7 +7906,7 @@ "nix_5": { "inputs": { "lowdown-src": "lowdown-src_5", - "nixpkgs": "nixpkgs_21", + "nixpkgs": "nixpkgs_18", "nixpkgs-regression": "nixpkgs-regression_5" }, "locked": { @@ -8687,7 +7927,7 @@ "nix_6": { "inputs": { "lowdown-src": "lowdown-src_6", - "nixpkgs": "nixpkgs_26", + "nixpkgs": "nixpkgs_22", "nixpkgs-regression": "nixpkgs-regression_6" }, "locked": { @@ -8708,7 +7948,7 @@ "nix_7": { "inputs": { "lowdown-src": "lowdown-src_7", - "nixpkgs": "nixpkgs_31", + "nixpkgs": "nixpkgs_26", "nixpkgs-regression": "nixpkgs-regression_7" }, "locked": { @@ -8729,7 +7969,7 @@ "nix_8": { "inputs": { "lowdown-src": "lowdown-src_8", - "nixpkgs": "nixpkgs_36", + "nixpkgs": "nixpkgs_30", "nixpkgs-regression": "nixpkgs-regression_8" }, "locked": { @@ -8750,7 +7990,7 @@ "nix_9": { "inputs": { "lowdown-src": "lowdown-src_9", - "nixpkgs": "nixpkgs_41", + "nixpkgs": "nixpkgs_35", "nixpkgs-regression": "nixpkgs-regression_9" }, "locked": { @@ -8770,18 +8010,16 @@ }, "nixpkgs": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, "nixpkgs-2003": { @@ -8864,6 +8102,38 @@ "type": "github" } }, + "nixpkgs-2003_14": { + "locked": { + "lastModified": 1620055814, + "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-20.03-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2003_15": { + "locked": { + "lastModified": 1620055814, + "narHash": "sha256-8LEHoYSJiL901bTMVatq+rf8y7QtWuZhwwpKE2fyaRY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "1db42b7fe3878f3f5f7a4f2dc210772fd080e205", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-20.03-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2003_2": { "locked": { "lastModified": 1620055814, @@ -9042,11 +8312,11 @@ }, "nixpkgs-2105_12": { "locked": { - "lastModified": 1642244250, - "narHash": "sha256-vWpUEqQdVP4srj+/YLJRTN9vjpTs4je0cdWKXPbDItc=", + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0fd9ee1aa36ce865ad273f4f07fdc093adeb5c00", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", "type": "github" }, "original": { @@ -9072,6 +8342,38 @@ "type": "github" } }, + "nixpkgs-2105_14": { + "locked": { + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.05-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2105_15": { + "locked": { + "lastModified": 1645296114, + "narHash": "sha256-y53N7TyIkXsjMpOG7RhvqJFGDacLs9HlyHeSTBioqYU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "530a53dcbc9437363471167a5e4762c5fcfa34a1", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.05-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, "nixpkgs-2105_2": { "locked": { "lastModified": 1645296114, @@ -9202,11 +8504,11 @@ }, "nixpkgs-2111": { "locked": { - "lastModified": 1654115789, - "narHash": "sha256-k9Qr8dLrmgEn+xIVbneJdQgCYG8FbbqOrTVaExUrLFI=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bce6d15455f8c15c9ef511368947e7ef789c5316", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9234,11 +8536,11 @@ }, "nixpkgs-2111_11": { "locked": { - "lastModified": 1652298859, - "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", + "lastModified": 1659375853, + "narHash": "sha256-aiMfO6U1w1u93vB+5qCHCQDZKgpJ7qs4GJOQvI3CN/4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "051448e41537c3463ae776d46115d01afb6c498d", + "rev": "511f6a5c3248f9019a41e70c1891484de2bc906c", "type": "github" }, "original": { @@ -9266,11 +8568,11 @@ }, "nixpkgs-2111_13": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9298,11 +8600,11 @@ }, "nixpkgs-2111_15": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9330,11 +8632,11 @@ }, "nixpkgs-2111_17": { "locked": { - "lastModified": 1654115789, - "narHash": "sha256-k9Qr8dLrmgEn+xIVbneJdQgCYG8FbbqOrTVaExUrLFI=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "bce6d15455f8c15c9ef511368947e7ef789c5316", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9350,7 +8652,103 @@ "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_19": { + "locked": { + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_2": { + "locked": { + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_20": { + "locked": { + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_21": { + "locked": { + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_22": { + "locked": { + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-21.11-darwin", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs-2111_23": { + "locked": { + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9360,13 +8758,13 @@ "type": "github" } }, - "nixpkgs-2111_19": { + "nixpkgs-2111_24": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", "type": "github" }, "original": { @@ -9376,13 +8774,13 @@ "type": "github" } }, - "nixpkgs-2111_2": { + "nixpkgs-2111_25": { "locked": { - "lastModified": 1648744337, - "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "lastModified": 1659375853, + "narHash": "sha256-aiMfO6U1w1u93vB+5qCHCQDZKgpJ7qs4GJOQvI3CN/4=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "rev": "511f6a5c3248f9019a41e70c1891484de2bc906c", "type": "github" }, "original": { @@ -9392,7 +8790,7 @@ "type": "github" } }, - "nixpkgs-2111_20": { + "nixpkgs-2111_26": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -9408,13 +8806,13 @@ "type": "github" } }, - "nixpkgs-2111_21": { + "nixpkgs-2111_27": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9424,7 +8822,7 @@ "type": "github" } }, - "nixpkgs-2111_22": { + "nixpkgs-2111_28": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -9440,13 +8838,13 @@ "type": "github" } }, - "nixpkgs-2111_23": { + "nixpkgs-2111_29": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1659446231, + "narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "eabc38219184cc3e04a974fe31857d8e0eac098d", "type": "github" }, "original": { @@ -9456,13 +8854,13 @@ "type": "github" } }, - "nixpkgs-2111_24": { + "nixpkgs-2111_3": { "locked": { - "lastModified": 1644510859, - "narHash": "sha256-xjpVvL5ecbyi0vxtVl/Fh9bwGlMbw3S06zE5nUzFB8A=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0d1d5d7e3679fec9d07f2eb804d9f9fdb98378d3", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9472,13 +8870,13 @@ "type": "github" } }, - "nixpkgs-2111_25": { + "nixpkgs-2111_30": { "locked": { - "lastModified": 1656492155, - "narHash": "sha256-oKWpYhhgZ2Yt4BZHKSFwJSwOAoFawWxNiW0y7wpde+I=", + "lastModified": 1648744337, + "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "7a5ca644cc5e96336e7717aca871f01320c2df09", + "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", "type": "github" }, "original": { @@ -9488,7 +8886,7 @@ "type": "github" } }, - "nixpkgs-2111_26": { + "nixpkgs-2111_4": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -9504,13 +8902,13 @@ "type": "github" } }, - "nixpkgs-2111_3": { + "nixpkgs-2111_5": { "locked": { - "lastModified": 1652298859, - "narHash": "sha256-hcwRboK+NxMWUJh0fQ3VsocDcAHrYJ95FmPEHlddV0Y=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "051448e41537c3463ae776d46115d01afb6c498d", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9520,7 +8918,7 @@ "type": "github" } }, - "nixpkgs-2111_4": { + "nixpkgs-2111_6": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -9536,13 +8934,13 @@ "type": "github" } }, - "nixpkgs-2111_5": { + "nixpkgs-2111_7": { "locked": { - "lastModified": 1653319070, - "narHash": "sha256-Z3cv967iN6mXgxhq1cjOoPod23XgNttCWHXMnMZUq9E=", + "lastModified": 1658346836, + "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1c813bbdc330b45fe922c642eb610902aecd5673", + "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", "type": "github" }, "original": { @@ -9552,7 +8950,7 @@ "type": "github" } }, - "nixpkgs-2111_6": { + "nixpkgs-2111_8": { "locked": { "lastModified": 1648744337, "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", @@ -9568,13 +8966,13 @@ "type": "github" } }, - "nixpkgs-2111_7": { + "nixpkgs-2111_9": { "locked": { - "lastModified": 1652364845, - "narHash": "sha256-1pG2GR+z7IrUVGcMoTsH6nJ+ACMvBplo/Pyw4SXJDIE=", + "lastModified": 1659446231, + "narHash": "sha256-hekabNdTdgR/iLsgce5TGWmfIDZ86qjPhxDg/8TlzhE=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "ee80943d4d1160f460e3d719222212dbfbc6a193", + "rev": "eabc38219184cc3e04a974fe31857d8e0eac098d", "type": "github" }, "original": { @@ -9584,34 +8982,34 @@ "type": "github" } }, - "nixpkgs-2111_8": { + "nixpkgs-2205": { "locked": { - "lastModified": 1648744337, - "narHash": "sha256-bYe1dFJAXovjqiaPKrmAbSBEK5KUkgwVaZcTbSoJ7hg=", + "lastModified": 1660033036, + "narHash": "sha256-GjwzXmdN5SVTT0RIZ11uDTQxaHLTLt9/AbBeIHNfidQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "0a58eebd8ec65ffdef2ce9562784123a73922052", + "rev": "490f6174c03132bf8f078d0f3a6e5890a47f9b30", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-21.11-darwin", + "ref": "nixos-22.05", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs-2111_9": { + "nixpkgs-2205_2": { "locked": { - "lastModified": 1658346836, - "narHash": "sha256-c9BZZbi0tqCQ4j6CMVDlsut3Q3ET1Fezf+qIslCfkhs=", + "lastModified": 1660033036, + "narHash": "sha256-GjwzXmdN5SVTT0RIZ11uDTQxaHLTLt9/AbBeIHNfidQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a1fe662eb26ffc2a036b37c4670392ade632c413", + "rev": "490f6174c03132bf8f078d0f3a6e5890a47f9b30", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixpkgs-21.11-darwin", + "ref": "nixos-22.05", "repo": "nixpkgs", "type": "github" } @@ -9904,6 +9302,70 @@ "type": "github" } }, + "nixpkgs-latest_26": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, + "nixpkgs-latest_27": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, + "nixpkgs-latest_28": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, + "nixpkgs-latest_29": { + "locked": { + "lastModified": 1659622790, + "narHash": "sha256-fYelfx2ScXVprcivGPif+hi9cOZPt3/4wV5rC3AwZDs=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cf63df0364f67848083ff75bc8ac9b7ca7aa5a01", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "cf63df0364f67848083ff75bc8ac9b7ca7aa5a01", + "type": "github" + } + }, "nixpkgs-latest_3": { "locked": { "lastModified": 1653918805, @@ -9920,6 +9382,22 @@ "type": "github" } }, + "nixpkgs-latest_30": { + "locked": { + "lastModified": 1653918805, + "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + }, + "original": { + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "type": "github" + } + }, "nixpkgs-latest_4": { "locked": { "lastModified": 1653918805, @@ -10002,17 +9480,17 @@ }, "nixpkgs-latest_9": { "locked": { - "lastModified": 1653918805, - "narHash": "sha256-6ahwAnBNGgqSNSn/6RnsxrlFi+fkA+RyT6o/5S1915o=", + "lastModified": 1659622790, + "narHash": "sha256-fYelfx2ScXVprcivGPif+hi9cOZPt3/4wV5rC3AwZDs=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "rev": "cf63df0364f67848083ff75bc8ac9b7ca7aa5a01", "type": "github" }, "original": { "owner": "NixOS", "repo": "nixpkgs", - "rev": "a0a69be4b5ee63f1b5e75887a406e9194012b492", + "rev": "cf63df0364f67848083ff75bc8ac9b7ca7aa5a01", "type": "github" } }, @@ -10076,6 +9554,51 @@ "type": "indirect" } }, + "nixpkgs-regression_13": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, + "nixpkgs-regression_14": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, + "nixpkgs-regression_15": { + "locked": { + "lastModified": 1643052045, + "narHash": "sha256-uGJ0VXIhWKGXxkeNnq4TvV3CIOkUJ3PAoLZ3HMzNVMw=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "rev": "215d4d0fd80ca5163643b03a33fde804a29cc1e2", + "type": "indirect" + } + }, "nixpkgs-regression_2": { "locked": { "lastModified": 1643052045, @@ -10246,11 +9769,11 @@ }, "nixpkgs-unstable_12": { "locked": { - "lastModified": 1644486793, - "narHash": "sha256-EeijR4guVHgVv+JpOX3cQO+1XdrkJfGmiJ9XVsVU530=", + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "1882c6b7368fd284ad01b0a5b5601ef136321292", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", "type": "github" }, "original": { @@ -10276,7 +9799,7 @@ "type": "github" } }, - "nixpkgs-unstable_2": { + "nixpkgs-unstable_14": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10292,7 +9815,7 @@ "type": "github" } }, - "nixpkgs-unstable_3": { + "nixpkgs-unstable_15": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10308,7 +9831,7 @@ "type": "github" } }, - "nixpkgs-unstable_4": { + "nixpkgs-unstable_2": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10324,7 +9847,7 @@ "type": "github" } }, - "nixpkgs-unstable_5": { + "nixpkgs-unstable_3": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10340,7 +9863,7 @@ "type": "github" } }, - "nixpkgs-unstable_6": { + "nixpkgs-unstable_4": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10356,7 +9879,7 @@ "type": "github" } }, - "nixpkgs-unstable_7": { + "nixpkgs-unstable_5": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10372,7 +9895,7 @@ "type": "github" } }, - "nixpkgs-unstable_8": { + "nixpkgs-unstable_6": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10388,7 +9911,7 @@ "type": "github" } }, - "nixpkgs-unstable_9": { + "nixpkgs-unstable_7": { "locked": { "lastModified": 1648219316, "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", @@ -10404,14 +9927,13 @@ "type": "github" } }, - "nixpkgs_10": { - "flake": false, + "nixpkgs-unstable_8": { "locked": { - "lastModified": 1645493675, - "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", "type": "github" }, "original": { @@ -10421,29 +9943,29 @@ "type": "github" } }, - "nixpkgs_11": { + "nixpkgs-unstable_9": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1648219316, + "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "owner": "NixOS", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } }, - "nixpkgs_12": { + "nixpkgs_10": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { @@ -10451,7 +9973,7 @@ "type": "indirect" } }, - "nixpkgs_13": { + "nixpkgs_11": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -10466,7 +9988,7 @@ "type": "indirect" } }, - "nixpkgs_14": { + "nixpkgs_12": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10482,7 +10004,7 @@ "type": "github" } }, - "nixpkgs_15": { + "nixpkgs_13": { "flake": false, "locked": { "lastModified": 1645493675, @@ -10499,34 +10021,66 @@ "type": "github" } }, + "nixpkgs_14": { + "locked": { + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_15": { + "locked": { + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" + } + }, "nixpkgs_16": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", "type": "github" }, "original": { - "owner": "nixos", + "owner": "NixOS", "ref": "nixos-unstable", "repo": "nixpkgs", "type": "github" } }, "nixpkgs_17": { + "flake": false, "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", "type": "github" }, "original": { - "id": "nixpkgs", - "type": "indirect" + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_18": { @@ -10562,11 +10116,11 @@ }, "nixpkgs_2": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { @@ -10592,6 +10146,20 @@ } }, "nixpkgs_21": { + "locked": { + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_22": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -10606,7 +10174,7 @@ "type": "indirect" } }, - "nixpkgs_22": { + "nixpkgs_23": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10622,7 +10190,7 @@ "type": "github" } }, - "nixpkgs_23": { + "nixpkgs_24": { "flake": false, "locked": { "lastModified": 1645493675, @@ -10639,29 +10207,13 @@ "type": "github" } }, - "nixpkgs_24": { - "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_25": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { @@ -10719,18 +10271,16 @@ }, "nixpkgs_29": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, "nixpkgs_3": { @@ -10749,20 +10299,6 @@ } }, "nixpkgs_30": { - "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_31": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -10777,7 +10313,7 @@ "type": "indirect" } }, - "nixpkgs_32": { + "nixpkgs_31": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10793,7 +10329,7 @@ "type": "github" } }, - "nixpkgs_33": { + "nixpkgs_32": { "flake": false, "locked": { "lastModified": 1645493675, @@ -10810,29 +10346,27 @@ "type": "github" } }, - "nixpkgs_34": { + "nixpkgs_33": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, - "nixpkgs_35": { + "nixpkgs_34": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { @@ -10840,7 +10374,7 @@ "type": "indirect" } }, - "nixpkgs_36": { + "nixpkgs_35": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -10855,7 +10389,7 @@ "type": "indirect" } }, - "nixpkgs_37": { + "nixpkgs_36": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10871,7 +10405,7 @@ "type": "github" } }, - "nixpkgs_38": { + "nixpkgs_37": { "flake": false, "locked": { "lastModified": 1645493675, @@ -10888,20 +10422,33 @@ "type": "github" } }, - "nixpkgs_39": { + "nixpkgs_38": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_39": { + "locked": { + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "owner": "NixOS", "repo": "nixpkgs", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", "type": "github" + }, + "original": { + "id": "nixpkgs", + "ref": "nixos-21.05-small", + "type": "indirect" } }, "nixpkgs_4": { @@ -10922,11 +10469,44 @@ }, "nixpkgs_40": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_41": { + "flake": false, + "locked": { + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", + "type": "github" + }, + "original": { + "owner": "NixOS", + "ref": "nixpkgs-unstable", + "repo": "nixpkgs", + "type": "github" + } + }, + "nixpkgs_42": { + "locked": { + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { @@ -10934,7 +10514,7 @@ "type": "indirect" } }, - "nixpkgs_41": { + "nixpkgs_43": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -10949,7 +10529,7 @@ "type": "indirect" } }, - "nixpkgs_42": { + "nixpkgs_44": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -10965,7 +10545,7 @@ "type": "github" } }, - "nixpkgs_43": { + "nixpkgs_45": { "flake": false, "locked": { "lastModified": 1645493675, @@ -10982,29 +10562,13 @@ "type": "github" } }, - "nixpkgs_44": { - "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, - "nixpkgs_45": { + "nixpkgs_46": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { @@ -11012,7 +10576,7 @@ "type": "indirect" } }, - "nixpkgs_46": { + "nixpkgs_47": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -11027,7 +10591,7 @@ "type": "indirect" } }, - "nixpkgs_47": { + "nixpkgs_48": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -11043,7 +10607,7 @@ "type": "github" } }, - "nixpkgs_48": { + "nixpkgs_49": { "flake": false, "locked": { "lastModified": 1645493675, @@ -11060,22 +10624,6 @@ "type": "github" } }, - "nixpkgs_49": { - "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", - "type": "github" - }, - "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" - } - }, "nixpkgs_5": { "flake": false, "locked": { @@ -11094,20 +10642,6 @@ } }, "nixpkgs_50": { - "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", - "owner": "NixOS", - "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", - "type": "github" - }, - "original": { - "id": "nixpkgs", - "type": "indirect" - } - }, - "nixpkgs_51": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -11122,7 +10656,7 @@ "type": "indirect" } }, - "nixpkgs_52": { + "nixpkgs_51": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -11138,7 +10672,7 @@ "type": "github" } }, - "nixpkgs_53": { + "nixpkgs_52": { "flake": false, "locked": { "lastModified": 1645493675, @@ -11155,69 +10689,36 @@ "type": "github" } }, - "nixpkgs_54": { - "locked": { - "lastModified": 1650882267, - "narHash": "sha256-BFKiz8srATQIBuFEN2HgS2EHisK29EjZ/HV34wSr2lU=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2ea2f7b6d0cb7ce0712f2aa80303cda08deb0de2", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixpkgs", - "rev": "2ea2f7b6d0cb7ce0712f2aa80303cda08deb0de2", - "type": "github" - } - }, - "nixpkgs_55": { - "locked": { - "lastModified": 1647350163, - "narHash": "sha256-OcMI+PFEHTONthXuEQNddt16Ml7qGvanL3x8QOl2Aao=", - "owner": "nixos", - "repo": "nixpkgs", - "rev": "3eb07eeafb52bcbf02ce800f032f18d666a9498d", - "type": "github" - }, - "original": { - "owner": "nixos", - "repo": "nixpkgs", - "rev": "3eb07eeafb52bcbf02ce800f032f18d666a9498d", - "type": "github" - } - }, - "nixpkgs_56": { + "nixpkgs_53": { "locked": { - "lastModified": 1649456639, - "narHash": "sha256-rZCjaEAZgOtT9kYTBigksof64SqKAXOuoHhlzHvfl0E=", - "owner": "nixos", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "c48167590e3258daac6ab12a41bc2b7341e9b2ec", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { - "owner": "nixos", - "repo": "nixpkgs", - "rev": "c48167590e3258daac6ab12a41bc2b7341e9b2ec", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, - "nixpkgs_57": { + "nixpkgs_54": { "locked": { - "lastModified": 1648219316, - "narHash": "sha256-Ctij+dOi0ZZIfX5eMhgwugfvB+WZSrvVNAyAuANOsnQ=", + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "30d3d79b7d3607d56546dd2a6b49e156ba0ec634", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", "type": "github" }, "original": { "id": "nixpkgs", + "ref": "nixos-21.05-small", "type": "indirect" } }, - "nixpkgs_58": { + "nixpkgs_55": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -11233,14 +10734,14 @@ "type": "github" } }, - "nixpkgs_59": { + "nixpkgs_56": { "flake": false, "locked": { - "lastModified": 1628785280, - "narHash": "sha256-2B5eMrEr6O8ff2aQNeVxTB+9WrGE80OB4+oM6T7fOcc=", + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "6525bbc06a39f26750ad8ee0d40000ddfdc24acb", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", "type": "github" }, "original": { @@ -11250,23 +10751,21 @@ "type": "github" } }, - "nixpkgs_6": { + "nixpkgs_57": { "locked": { - "lastModified": 1652885393, - "narHash": "sha256-YIgvvlk4iQ1Hi7KD9o5gsojc+ApB+jiH1d5stK8uXiw=", - "owner": "nixos", + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", "repo": "nixpkgs", - "rev": "48037fd90426e44e4bf03e6479e88a11453b9b66", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", "type": "github" }, "original": { - "owner": "nixos", - "ref": "nixos-unstable", - "repo": "nixpkgs", - "type": "github" + "id": "nixpkgs", + "type": "indirect" } }, - "nixpkgs_60": { + "nixpkgs_58": { "locked": { "lastModified": 1632864508, "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", @@ -11281,7 +10780,7 @@ "type": "indirect" } }, - "nixpkgs_61": { + "nixpkgs_59": { "locked": { "lastModified": 1647297614, "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", @@ -11297,7 +10796,21 @@ "type": "github" } }, - "nixpkgs_62": { + "nixpkgs_6": { + "locked": { + "lastModified": 1657292830, + "narHash": "sha256-ldfVSTveWceDCmW6gf3B4kR6vwmz/XS80y5wsLLHFJU=", + "owner": "NixOS", + "repo": "nixpkgs", + "rev": "334ec8b503c3981e37a04b817a70e8d026ea9e84", + "type": "github" + }, + "original": { + "id": "nixpkgs", + "type": "indirect" + } + }, + "nixpkgs_60": { "flake": false, "locked": { "lastModified": 1645493675, @@ -11316,45 +10829,48 @@ }, "nixpkgs_7": { "locked": { - "lastModified": 1653117584, - "narHash": "sha256-5uUrHeHBIaySBTrRExcCoW8fBBYVSDjDYDU5A6iOl+k=", + "lastModified": 1632864508, + "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "f4dfed73ee886b115a99e5b85fdfbeb683290d83", + "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", "type": "github" }, "original": { "id": "nixpkgs", + "ref": "nixos-21.05-small", "type": "indirect" } }, "nixpkgs_8": { "locked": { - "lastModified": 1632864508, - "narHash": "sha256-d127FIvGR41XbVRDPVvozUPQ/uRHbHwvfyKHwEt5xFM=", + "lastModified": 1647297614, + "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "82891b5e2c2359d7e58d08849e4c89511ab94234", + "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", "type": "github" }, "original": { - "id": "nixpkgs", - "ref": "nixos-21.05-small", - "type": "indirect" + "owner": "NixOS", + "ref": "nixos-unstable", + "repo": "nixpkgs", + "type": "github" } }, "nixpkgs_9": { + "flake": false, "locked": { - "lastModified": 1647297614, - "narHash": "sha256-ulGq3W5XsrBMU/u5k9d4oPy65pQTkunR4HKKtTq0RwY=", + "lastModified": 1645493675, + "narHash": "sha256-9xundbZQbhFodsQRh6QMN1GeSXfo3y/5NL0CZcJULz0=", "owner": "NixOS", "repo": "nixpkgs", - "rev": "73ad5f9e147c0d2a2061f1d4bd91e05078dc0b58", + "rev": "74b10859829153d5c5d50f7c77b86763759e8654", "type": "github" }, "original": { "owner": "NixOS", - "ref": "nixos-unstable", + "ref": "nixpkgs-unstable", "repo": "nixpkgs", "type": "github" } @@ -11444,7 +10960,7 @@ "type": "github" } }, - "old-ghc-nix_2": { + "old-ghc-nix_14": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11461,7 +10977,7 @@ "type": "github" } }, - "old-ghc-nix_3": { + "old-ghc-nix_15": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11478,7 +10994,7 @@ "type": "github" } }, - "old-ghc-nix_4": { + "old-ghc-nix_2": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11495,7 +11011,7 @@ "type": "github" } }, - "old-ghc-nix_5": { + "old-ghc-nix_3": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11512,7 +11028,7 @@ "type": "github" } }, - "old-ghc-nix_6": { + "old-ghc-nix_4": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11529,7 +11045,7 @@ "type": "github" } }, - "old-ghc-nix_7": { + "old-ghc-nix_5": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11546,7 +11062,7 @@ "type": "github" } }, - "old-ghc-nix_8": { + "old-ghc-nix_6": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11563,7 +11079,7 @@ "type": "github" } }, - "old-ghc-nix_9": { + "old-ghc-nix_7": { "flake": false, "locked": { "lastModified": 1631092763, @@ -11580,210 +11096,37 @@ "type": "github" } }, - "pandoc-link-context": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_10": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_11": { - "flake": false, - "locked": { - "lastModified": 1650932770, - "narHash": "sha256-/WzE4O23B1OcL3WF8Saz5TRQj0tGH7FtbgRLRson2Mc=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "85bd204339aafd309b8a3dd99ebffa6a50776cb6", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_2": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_3": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_4": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_5": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_6": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_7": { - "flake": false, - "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pandoc-link-context_8": { + "old-ghc-nix_8": { "flake": false, "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", + "lastModified": 1631092763, + "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", + "owner": "angerman", + "repo": "old-ghc-nix", + "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", "type": "github" }, "original": { - "owner": "srid", + "owner": "angerman", "ref": "master", - "repo": "pandoc-link-context", + "repo": "old-ghc-nix", "type": "github" } }, - "pandoc-link-context_9": { + "old-ghc-nix_9": { "flake": false, "locked": { - "lastModified": 1653170888, - "narHash": "sha256-bA/Oj2pt3H2b4lqWqVBYo3Qhvhd01r4vM39+vLuPMtA=", - "owner": "srid", - "repo": "pandoc-link-context", - "rev": "c3a3de34b291b2bfec04387af65e0cc0822373c5", + "lastModified": 1631092763, + "narHash": "sha256-sIKgO+z7tj4lw3u6oBZxqIhDrzSkvpHtv0Kki+lh9Fg=", + "owner": "angerman", + "repo": "old-ghc-nix", + "rev": "af48a7a7353e418119b6dfe3cd1463a657f342b8", "type": "github" }, "original": { - "owner": "srid", + "owner": "angerman", "ref": "master", - "repo": "pandoc-link-context", - "type": "github" - } - }, - "pathtree": { - "inputs": { - "flake-compat": "flake-compat_22", - "flake-utils": "flake-utils_34", - "nixpkgs": "nixpkgs_55" - }, - "locked": { - "lastModified": 1649011952, - "narHash": "sha256-RuNIoPXx0xy5TZ81JH33V8EqXWX5erv8gepM0Aaeat8=", - "owner": "srid", - "repo": "pathtree", - "rev": "d60f22b356f79663aca3f5fde9f23bb4a1412963", - "type": "github" - }, - "original": { - "owner": "srid", - "repo": "pathtree", + "repo": "old-ghc-nix", "type": "github" } }, @@ -11792,9 +11135,14 @@ "cardano-base": "cardano-base", "cardano-crypto": "cardano-crypto", "cardano-prelude": "cardano-prelude", - "emanote": "emanote", + "emanote": [ + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat", - "haskell-language-server": "haskell-language-server_2", + "haskell-language-server": "haskell-language-server", "haskell-nix": "haskell-nix", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage", "hercules-ci-effects": "hercules-ci-effects", @@ -11811,29 +11159,47 @@ "secp256k1-haskell": "secp256k1-haskell" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, "plutarch-context-builder": { "inputs": { - "haskell-language-server": "haskell-language-server_4", + "haskell-language-server": [ + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "liqwid-plutarch-extra", "plutarch-context-builder", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_3", "nixpkgs": [ "liqwid-plutarch-extra", "plutarch-context-builder", @@ -11845,15 +11211,15 @@ "plutarch": "plutarch_2" }, "locked": { - "lastModified": 1658268102, - "narHash": "sha256-RE8vhqLY9wXfJHt7933HSaezO3/eP/YmJVdqfbDbKN0=", - "owner": "liqwid-labs", + "lastModified": 1659452596, + "narHash": "sha256-j0StZAogDVbpjzBXsWzlAO4JPp2pafMnG5ndgMyeuwU=", + "owner": "Liqwid-Labs", "repo": "plutarch-context-builder", - "rev": "1f2df0a09a3c60ee398c87723e9443d1c4c45102", + "rev": "7dfa384bbf5427412ba78ef48ddd86ca251fdb18", "type": "github" }, "original": { - "owner": "liqwid-labs", + "owner": "Liqwid-Labs", "ref": "staging", "repo": "plutarch-context-builder", "type": "github" @@ -11861,12 +11227,27 @@ }, "plutarch-context-builder_2": { "inputs": { - "haskell-language-server": "haskell-language-server_15", + "haskell-language-server": [ + "plutarch-context-builder", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-context-builder", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-context-builder", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-context-builder", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_6", "nixpkgs": [ "plutarch-context-builder", "plutarch", @@ -11877,110 +11258,276 @@ "plutarch": "plutarch_6" }, "locked": { - "lastModified": 1658368717, - "narHash": "sha256-GAneUtaxaJSZLNkIGOTByx/Auuq1g3MhzBhTiqZ13+s=", + "lastModified": 1659452596, + "narHash": "sha256-j0StZAogDVbpjzBXsWzlAO4JPp2pafMnG5ndgMyeuwU=", + "owner": "Liqwid-Labs", + "repo": "plutarch-context-builder", + "rev": "7dfa384bbf5427412ba78ef48ddd86ca251fdb18", + "type": "github" + }, + "original": { + "owner": "Liqwid-Labs", + "ref": "plutus-v1", + "repo": "plutarch-context-builder", + "type": "github" + } + }, + "plutarch-context-builder_3": { + "inputs": { + "haskell-language-server": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-language-server" + ], + "haskell-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix" + ], + "haskell-nix-extra-hackage": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_11", + "nixpkgs": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "nixpkgs" + ], + "nixpkgs-2111": "nixpkgs-2111_19", + "nixpkgs-latest": "nixpkgs-latest_19", + "plutarch": "plutarch_10" + }, + "locked": { + "lastModified": 1659452596, + "narHash": "sha256-j0StZAogDVbpjzBXsWzlAO4JPp2pafMnG5ndgMyeuwU=", "owner": "Liqwid-Labs", "repo": "plutarch-context-builder", - "rev": "2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9", + "rev": "7dfa384bbf5427412ba78ef48ddd86ca251fdb18", "type": "github" }, "original": { "owner": "Liqwid-Labs", - "ref": "2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9", + "ref": "staging", "repo": "plutarch-context-builder", "type": "github" } }, "plutarch-numeric": { "inputs": { - "haskell-language-server": "haskell-language-server_7", + "haskell-language-server": [ + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-language-server" + ], + "haskell-nix": [ + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-nix" + ], + "haskell-nix-extra-hackage": [ + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_4", + "nixpkgs": [ + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "nixpkgs" + ], + "nixpkgs-2111": "nixpkgs-2111_5", + "nixpkgs-latest": "nixpkgs-latest_5", + "plutarch": "plutarch_3" + }, + "locked": { + "lastModified": 1659450964, + "narHash": "sha256-jkxeMZ5ZjEl94MG5jWC+ogeh8m5sCpR7FX2Srtedvc4=", + "owner": "liqwid-labs", + "repo": "plutarch-numeric", + "rev": "65a1a5dec3836cf4e3c793bf780a4ee84b0a9331", + "type": "github" + }, + "original": { + "owner": "liqwid-labs", + "ref": "main", + "repo": "plutarch-numeric", + "type": "github" + } + }, + "plutarch-numeric_2": { + "inputs": { + "haskell-language-server": [ + "plutarch-numeric", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ - "liqwid-plutarch-extra", "plutarch-numeric", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-numeric", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-numeric", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_7", "nixpkgs": [ - "liqwid-plutarch-extra", "plutarch-numeric", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_5", - "nixpkgs-latest": "nixpkgs-latest_5", - "plutarch": "plutarch_3" + "nixpkgs-2111": "nixpkgs-2111_13", + "nixpkgs-latest": "nixpkgs-latest_13", + "plutarch": "plutarch_7" }, "locked": { - "lastModified": 1655733533, - "narHash": "sha256-HRSJUEQYYwr0HvYn6GwLmyYY7TXwZcYPAW0U8t6nmok=", - "owner": "liqwid-labs", + "lastModified": 1659450964, + "narHash": "sha256-jkxeMZ5ZjEl94MG5jWC+ogeh8m5sCpR7FX2Srtedvc4=", + "owner": "Liqwid-Labs", "repo": "plutarch-numeric", - "rev": "ce2d39dc366d9453b0f5df328bbb78f11e3b2ed6", + "rev": "65a1a5dec3836cf4e3c793bf780a4ee84b0a9331", "type": "github" }, "original": { - "owner": "liqwid-labs", + "owner": "Liqwid-Labs", + "ref": "main", "repo": "plutarch-numeric", "type": "github" } }, - "plutarch-numeric_2": { + "plutarch-numeric_3": { "inputs": { - "haskell-language-server": "haskell-language-server_18", + "haskell-language-server": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", "plutarch-numeric", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_12", "nixpkgs": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", "plutarch-numeric", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_13", - "nixpkgs-latest": "nixpkgs-latest_13", - "plutarch": "plutarch_7" + "nixpkgs-2111": "nixpkgs-2111_21", + "nixpkgs-latest": "nixpkgs-latest_21", + "plutarch": "plutarch_11" }, "locked": { - "lastModified": 1656613288, - "narHash": "sha256-h2rM+Ng/wyWwqRY41NbxPHBJLIfcqsjeCItYK7iQvR8=", - "owner": "Liqwid-Labs", + "lastModified": 1659450964, + "narHash": "sha256-jkxeMZ5ZjEl94MG5jWC+ogeh8m5sCpR7FX2Srtedvc4=", + "owner": "liqwid-labs", "repo": "plutarch-numeric", - "rev": "da44b2af83f28276cf7466586a8e66291f104663", + "rev": "65a1a5dec3836cf4e3c793bf780a4ee84b0a9331", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "liqwid-labs", "ref": "main", "repo": "plutarch-numeric", "type": "github" } }, - "plutarch-numeric_3": { + "plutarch-numeric_4": { "inputs": { - "haskell-language-server": "haskell-language-server_33", + "haskell-language-server": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-safe-money", "plutarch-numeric", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_14", "nixpkgs": [ "plutarch-safe-money", "plutarch-numeric", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_23", - "nixpkgs-latest": "nixpkgs-latest_23", - "plutarch": "plutarch_12" + "nixpkgs-2111": "nixpkgs-2111_27", + "nixpkgs-latest": "nixpkgs-latest_27", + "plutarch": "plutarch_14" }, "locked": { - "lastModified": 1654950823, - "narHash": "sha256-fq6Iyk1ygNs4sTS55jLjx0hWFAFQNKXBGrVHuzRXFls=", + "lastModified": 1659450964, + "narHash": "sha256-jkxeMZ5ZjEl94MG5jWC+ogeh8m5sCpR7FX2Srtedvc4=", "owner": "Liqwid-Labs", "repo": "plutarch-numeric", - "rev": "11fdf47fdcbf19d51ed587b0b67618152098f442", + "rev": "65a1a5dec3836cf4e3c793bf780a4ee84b0a9331", "type": "github" }, "original": { @@ -11992,13 +11539,31 @@ }, "plutarch-quickcheck": { "inputs": { - "haskell-language-server": "haskell-language-server_10", + "haskell-language-server": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "liqwid-plutarch-extra", "plutarch-quickcheck", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_5", "nixpkgs": [ "liqwid-plutarch-extra", "plutarch-quickcheck", @@ -12010,28 +11575,43 @@ "plutarch": "plutarch_4" }, "locked": { - "lastModified": 1655113586, - "narHash": "sha256-hv9tzB3IGvga6/SBDnk16S3Sfp03tvtkWd8COW0It30=", + "lastModified": 1659450065, + "narHash": "sha256-x6B9sjrZaTite4TSLLyOWfmG3JJbOZuGUNMDZ1f4qhk=", "owner": "liqwid-labs", "repo": "plutarch-quickcheck", - "rev": "a560e12b4809c0f292c96e81189e1b2cf2e7f7eb", + "rev": "2c5b77f1a622ce68d80a09b286eb0ac85527ff26", "type": "github" }, "original": { "owner": "liqwid-labs", + "ref": "staging", "repo": "plutarch-quickcheck", - "rev": "a560e12b4809c0f292c96e81189e1b2cf2e7f7eb", "type": "github" } }, "plutarch-quickcheck_2": { "inputs": { - "haskell-language-server": "haskell-language-server_21", + "haskell-language-server": [ + "plutarch-quickcheck", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-quickcheck", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-quickcheck", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-quickcheck", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_8", "nixpkgs": [ "plutarch-quickcheck", "plutarch", @@ -12042,11 +11622,11 @@ "plutarch": "plutarch_8" }, "locked": { - "lastModified": 1655307888, - "narHash": "sha256-hv9tzB3IGvga6/SBDnk16S3Sfp03tvtkWd8COW0It30=", + "lastModified": 1659450065, + "narHash": "sha256-x6B9sjrZaTite4TSLLyOWfmG3JJbOZuGUNMDZ1f4qhk=", "owner": "liqwid-labs", "repo": "plutarch-quickcheck", - "rev": "541c57675eefc2ecd0fb6c6477d0b7fb8900b5fc", + "rev": "2c5b77f1a622ce68d80a09b286eb0ac85527ff26", "type": "github" }, "original": { @@ -12058,7 +11638,13 @@ }, "plutarch-quickcheck_3": { "inputs": { - "haskell-language-server": "haskell-language-server_28", + "haskell-language-server": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -12066,6 +11652,21 @@ "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_13", "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", @@ -12073,81 +11674,112 @@ "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_19", - "nixpkgs-latest": "nixpkgs-latest_19", - "plutarch": "plutarch_10" + "nixpkgs-2111": "nixpkgs-2111_23", + "nixpkgs-latest": "nixpkgs-latest_23", + "plutarch": "plutarch_12" }, "locked": { - "lastModified": 1655113586, - "narHash": "sha256-hv9tzB3IGvga6/SBDnk16S3Sfp03tvtkWd8COW0It30=", + "lastModified": 1659450065, + "narHash": "sha256-x6B9sjrZaTite4TSLLyOWfmG3JJbOZuGUNMDZ1f4qhk=", "owner": "liqwid-labs", "repo": "plutarch-quickcheck", - "rev": "a560e12b4809c0f292c96e81189e1b2cf2e7f7eb", + "rev": "2c5b77f1a622ce68d80a09b286eb0ac85527ff26", "type": "github" }, "original": { "owner": "liqwid-labs", + "ref": "staging", "repo": "plutarch-quickcheck", - "rev": "a560e12b4809c0f292c96e81189e1b2cf2e7f7eb", "type": "github" } }, "plutarch-safe-money": { "inputs": { - "haskell-language-server": "haskell-language-server_24", + "haskell-language-server": [ + "plutarch-safe-money", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-safe-money", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-safe-money", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-safe-money", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_9", "liqwid-plutarch-extra": "liqwid-plutarch-extra_2", "nixpkgs": [ "plutarch-safe-money", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_21", - "nixpkgs-latest": "nixpkgs-latest_21", - "plutarch": "plutarch_11", - "plutarch-numeric": "plutarch-numeric_3" + "nixpkgs-2111": "nixpkgs-2111_25", + "nixpkgs-latest": "nixpkgs-latest_25", + "plutarch": "plutarch_13", + "plutarch-numeric": "plutarch-numeric_4" }, "locked": { - "lastModified": 1655471113, - "narHash": "sha256-6z17r2rs2M+Gv7MJep6+zP2bq6G5Id4XDhInpU5RulM=", + "lastModified": 1659604619, + "narHash": "sha256-pqjjb/J773z2cE7bBsszxj2QnefewJlIIe1NbDeKrLw=", "owner": "Liqwid-Labs", "repo": "plutarch-safe-money", - "rev": "9f968b80189c7e4b335527cd5b103dc26952f667", + "rev": "6e4f2112a36b2937fc2f3f7143abb4f4c42e7428", "type": "github" }, "original": { "owner": "Liqwid-Labs", + "ref": "main", "repo": "plutarch-safe-money", - "rev": "9f968b80189c7e4b335527cd5b103dc26952f667", "type": "github" } }, "plutarch-script-export": { "inputs": { + "haskell-language-server": [ + "plutarch-script-export", + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch-script-export", "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch-script-export", + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch-script-export", + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix_15", "nixpkgs": [ "plutarch-script-export", "plutarch", "nixpkgs" ], - "nixpkgs-2111": "nixpkgs-2111_25", - "nixpkgs-latest": "nixpkgs-latest_24", - "plutarch": "plutarch_13" + "nixpkgs-2111": "nixpkgs-2111_29", + "nixpkgs-latest": "nixpkgs-latest_29", + "plutarch": "plutarch_15" }, "locked": { - "lastModified": 1657374093, - "narHash": "sha256-96K/mcNI8lNto+gLSOhnGADQYfWrp3+PrZYKoNzSS1A=", + "lastModified": 1660213721, + "narHash": "sha256-YkDefu3XK1FelMFCgf3jOkzc3ugCS1DXUgr9rZoukPw=", "owner": "Liqwid-Labs", "repo": "plutarch-script-export", - "rev": "85c3b8a2ef856e7c18d3227e33fc2dd7bebf3bc1", + "rev": "4d8f6af19d727c46fc8d746b1f6d3e356196610f", "type": "github" }, "original": { @@ -12162,9 +11794,16 @@ "cardano-base": "cardano-base_10", "cardano-crypto": "cardano-crypto_10", "cardano-prelude": "cardano-prelude_10", - "emanote": "emanote_9", + "emanote": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_10", - "haskell-language-server": "haskell-language-server_29", + "haskell-language-server": "haskell-language-server_19", "haskell-nix": "haskell-nix_19", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_10", "hercules-ci-effects": "hercules-ci-effects_10", @@ -12172,7 +11811,7 @@ "nixpkgs": [ "plutarch-safe-money", "liqwid-plutarch-extra", - "plutarch-quickcheck", + "plutarch-context-builder", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -12183,17 +11822,17 @@ "secp256k1-haskell": "secp256k1-haskell_10" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12202,15 +11841,24 @@ "cardano-base": "cardano-base_11", "cardano-crypto": "cardano-crypto_11", "cardano-prelude": "cardano-prelude_11", - "emanote": "emanote_10", + "emanote": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_11", - "haskell-language-server": "haskell-language-server_31", + "haskell-language-server": "haskell-language-server_21", "haskell-nix": "haskell-nix_21", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_11", "hercules-ci-effects": "hercules-ci-effects_11", "iohk-nix": "iohk-nix_21", "nixpkgs": [ "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-numeric", "plutarch", "haskell-nix", "nixpkgs-unstable" @@ -12221,62 +11869,64 @@ "secp256k1-haskell": "secp256k1-haskell_11" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, "plutarch_12": { "inputs": { - "Shrinker": "Shrinker", "cardano-base": "cardano-base_12", "cardano-crypto": "cardano-crypto_12", "cardano-prelude": "cardano-prelude_12", - "cryptonite": "cryptonite", - "emanote": "emanote_11", + "emanote": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_12", - "foundation": "foundation", - "haskell-language-server": "haskell-language-server_34", + "haskell-language-server": "haskell-language-server_23", "haskell-nix": "haskell-nix_23", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_12", "hercules-ci-effects": "hercules-ci-effects_12", - "hs-memory": "hs-memory", - "hspec": "hspec", - "hspec-golden": "hspec-golden", - "hspec-hedgehog": "hspec-hedgehog", "iohk-nix": "iohk-nix_23", "nixpkgs": [ "plutarch-safe-money", - "plutarch-numeric", + "liqwid-plutarch-extra", + "plutarch-quickcheck", "plutarch", "haskell-nix", "nixpkgs-unstable" ], + "nixpkgs-latest": "nixpkgs-latest_24", "plutus": "plutus_12", "protolude": "protolude_12", - "sized-functors": "sized-functors", - "th-extras": "th-extras" + "secp256k1-haskell": "secp256k1-haskell_12" }, "locked": { - "lastModified": 1652353304, - "narHash": "sha256-DeSwiDyJeI9had5OCxLiGtYeDl07Vic0cR8RETBLY9k=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "ae2059f11f24d47bedeaa18749d01711cddab0bc", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12286,40 +11936,128 @@ "cardano-crypto": "cardano-crypto_13", "cardano-prelude": "cardano-prelude_13", "emanote": [ - "plutarch-script-export", + "plutarch-safe-money", "plutarch", "haskell-nix", "nixpkgs-unstable" ], "flat": "flat_13", - "haskell-language-server": "haskell-language-server_36", + "haskell-language-server": "haskell-language-server_25", "haskell-nix": "haskell-nix_25", - "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_12", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_13", "hercules-ci-effects": "hercules-ci-effects_13", "iohk-nix": "iohk-nix_25", "nixpkgs": [ - "plutarch-script-export", + "plutarch-safe-money", "plutarch", "haskell-nix", "nixpkgs-unstable" ], - "nixpkgs-latest": "nixpkgs-latest_25", + "nixpkgs-latest": "nixpkgs-latest_26", "plutus": "plutus_13", "protolude": "protolude_13", - "secp256k1-haskell": "secp256k1-haskell_12" + "secp256k1-haskell": "secp256k1-haskell_13" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "liqwid-labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "liqwid-labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "owner": "Plutonomicon", + "ref": "staging", + "repo": "plutarch-plutus", + "type": "github" + } + }, + "plutarch_14": { + "inputs": { + "cardano-base": "cardano-base_14", + "cardano-crypto": "cardano-crypto_14", + "cardano-prelude": "cardano-prelude_14", + "emanote": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "flat": "flat_14", + "haskell-language-server": "haskell-language-server_27", + "haskell-nix": "haskell-nix_27", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_14", + "hercules-ci-effects": "hercules-ci-effects_14", + "iohk-nix": "iohk-nix_27", + "nixpkgs": [ + "plutarch-safe-money", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-latest": "nixpkgs-latest_28", + "plutus": "plutus_14", + "protolude": "protolude_14", + "secp256k1-haskell": "secp256k1-haskell_14" + }, + "locked": { + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", + "type": "github" + }, + "original": { + "owner": "Plutonomicon", + "ref": "staging", + "repo": "plutarch-plutus", + "type": "github" + } + }, + "plutarch_15": { + "inputs": { + "cardano-base": "cardano-base_15", + "cardano-crypto": "cardano-crypto_15", + "cardano-prelude": "cardano-prelude_15", + "emanote": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "flat": "flat_15", + "haskell-language-server": "haskell-language-server_29", + "haskell-nix": "haskell-nix_29", + "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_15", + "hercules-ci-effects": "hercules-ci-effects_15", + "iohk-nix": "iohk-nix_29", + "nixpkgs": [ + "plutarch-script-export", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], + "nixpkgs-latest": "nixpkgs-latest_30", + "plutus": "plutus_15", + "protolude": "protolude_15", + "secp256k1-haskell": "secp256k1-haskell_15" + }, + "locked": { + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", + "type": "github" + }, + "original": { + "owner": "Plutonomicon", + "ref": "staging", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12328,9 +12066,15 @@ "cardano-base": "cardano-base_2", "cardano-crypto": "cardano-crypto_2", "cardano-prelude": "cardano-prelude_2", - "emanote": "emanote_2", + "emanote": [ + "liqwid-plutarch-extra", + "plutarch-context-builder", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_2", - "haskell-language-server": "haskell-language-server_5", + "haskell-language-server": "haskell-language-server_3", "haskell-nix": "haskell-nix_3", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_2", "hercules-ci-effects": "hercules-ci-effects_2", @@ -12348,17 +12092,17 @@ "secp256k1-haskell": "secp256k1-haskell_2" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12367,9 +12111,15 @@ "cardano-base": "cardano-base_3", "cardano-crypto": "cardano-crypto_3", "cardano-prelude": "cardano-prelude_3", - "emanote": "emanote_3", + "emanote": [ + "liqwid-plutarch-extra", + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_3", - "haskell-language-server": "haskell-language-server_8", + "haskell-language-server": "haskell-language-server_5", "haskell-nix": "haskell-nix_5", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_3", "hercules-ci-effects": "hercules-ci-effects_3", @@ -12387,17 +12137,17 @@ "secp256k1-haskell": "secp256k1-haskell_3" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12406,9 +12156,15 @@ "cardano-base": "cardano-base_4", "cardano-crypto": "cardano-crypto_4", "cardano-prelude": "cardano-prelude_4", - "emanote": "emanote_4", + "emanote": [ + "liqwid-plutarch-extra", + "plutarch-quickcheck", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_4", - "haskell-language-server": "haskell-language-server_11", + "haskell-language-server": "haskell-language-server_7", "haskell-nix": "haskell-nix_7", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_4", "hercules-ci-effects": "hercules-ci-effects_4", @@ -12426,17 +12182,17 @@ "secp256k1-haskell": "secp256k1-haskell_4" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12451,7 +12207,7 @@ "nixpkgs-unstable" ], "flat": "flat_5", - "haskell-language-server": "haskell-language-server_13", + "haskell-language-server": "haskell-language-server_9", "haskell-nix": "haskell-nix_9", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_5", "hercules-ci-effects": "hercules-ci-effects_5", @@ -12467,17 +12223,17 @@ "secp256k1-haskell": "secp256k1-haskell_5" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "liqwid-labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "liqwid-labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "owner": "Plutonomicon", + "ref": "staging", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12486,9 +12242,14 @@ "cardano-base": "cardano-base_6", "cardano-crypto": "cardano-crypto_6", "cardano-prelude": "cardano-prelude_6", - "emanote": "emanote_5", + "emanote": [ + "plutarch-context-builder", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_6", - "haskell-language-server": "haskell-language-server_16", + "haskell-language-server": "haskell-language-server_11", "haskell-nix": "haskell-nix_11", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_6", "hercules-ci-effects": "hercules-ci-effects_6", @@ -12505,17 +12266,17 @@ "secp256k1-haskell": "secp256k1-haskell_6" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12524,9 +12285,14 @@ "cardano-base": "cardano-base_7", "cardano-crypto": "cardano-crypto_7", "cardano-prelude": "cardano-prelude_7", - "emanote": "emanote_6", + "emanote": [ + "plutarch-numeric", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_7", - "haskell-language-server": "haskell-language-server_19", + "haskell-language-server": "haskell-language-server_13", "haskell-nix": "haskell-nix_13", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_7", "hercules-ci-effects": "hercules-ci-effects_7", @@ -12543,17 +12309,17 @@ "secp256k1-haskell": "secp256k1-haskell_7" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12562,9 +12328,14 @@ "cardano-base": "cardano-base_8", "cardano-crypto": "cardano-crypto_8", "cardano-prelude": "cardano-prelude_8", - "emanote": "emanote_7", + "emanote": [ + "plutarch-quickcheck", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_8", - "haskell-language-server": "haskell-language-server_22", + "haskell-language-server": "haskell-language-server_15", "haskell-nix": "haskell-nix_15", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_8", "hercules-ci-effects": "hercules-ci-effects_8", @@ -12581,17 +12352,17 @@ "secp256k1-haskell": "secp256k1-haskell_8" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12600,9 +12371,15 @@ "cardano-base": "cardano-base_9", "cardano-crypto": "cardano-crypto_9", "cardano-prelude": "cardano-prelude_9", - "emanote": "emanote_8", + "emanote": [ + "plutarch-safe-money", + "liqwid-plutarch-extra", + "plutarch", + "haskell-nix", + "nixpkgs-unstable" + ], "flat": "flat_9", - "haskell-language-server": "haskell-language-server_26", + "haskell-language-server": "haskell-language-server_17", "haskell-nix": "haskell-nix_17", "haskell-nix-extra-hackage": "haskell-nix-extra-hackage_9", "hercules-ci-effects": "hercules-ci-effects_9", @@ -12620,17 +12397,17 @@ "secp256k1-haskell": "secp256k1-haskell_9" }, "locked": { - "lastModified": 1654108284, - "narHash": "sha256-VD0zX4pFrJJaaUO7uJgioZGg1moe1Fy8nAb5j2mV/Qc=", - "owner": "Liqwid-Labs", - "repo": "plutarch", - "rev": "e7ef565645146e26e75ec29fe97122a74e52c6b7", + "lastModified": 1659381657, + "narHash": "sha256-W0EWY0DV2idbIeqtJnShVHQ83exME8TK2GYQGbVpz8A=", + "owner": "Plutonomicon", + "repo": "plutarch-plutus", + "rev": "45b7c77a9ee9bd6c7dc25ddebcc3d12c58c4c3a2", "type": "github" }, "original": { - "owner": "Liqwid-Labs", + "owner": "Plutonomicon", "ref": "staging", - "repo": "plutarch", + "repo": "plutarch-plutus", "type": "github" } }, @@ -12639,7 +12416,7 @@ "cardano-repo-tool": "cardano-repo-tool", "gitignore-nix": "gitignore-nix", "hackage-nix": "hackage-nix", - "haskell-language-server": "haskell-language-server_3", + "haskell-language-server": "haskell-language-server_2", "haskell-nix": "haskell-nix_2", "iohk-nix": "iohk-nix_2", "nixpkgs": "nixpkgs_5", @@ -12647,11 +12424,11 @@ "sphinxcontrib-haddock": "sphinxcontrib-haddock" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12665,19 +12442,19 @@ "cardano-repo-tool": "cardano-repo-tool_10", "gitignore-nix": "gitignore-nix_10", "hackage-nix": "hackage-nix_10", - "haskell-language-server": "haskell-language-server_30", + "haskell-language-server": "haskell-language-server_20", "haskell-nix": "haskell-nix_20", "iohk-nix": "iohk-nix_20", - "nixpkgs": "nixpkgs_48", + "nixpkgs": "nixpkgs_41", "pre-commit-hooks-nix": "pre-commit-hooks-nix_10", "sphinxcontrib-haddock": "sphinxcontrib-haddock_10" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12691,19 +12468,19 @@ "cardano-repo-tool": "cardano-repo-tool_11", "gitignore-nix": "gitignore-nix_11", "hackage-nix": "hackage-nix_11", - "haskell-language-server": "haskell-language-server_32", + "haskell-language-server": "haskell-language-server_22", "haskell-nix": "haskell-nix_22", "iohk-nix": "iohk-nix_22", - "nixpkgs": "nixpkgs_53", + "nixpkgs": "nixpkgs_45", "pre-commit-hooks-nix": "pre-commit-hooks-nix_11", "sphinxcontrib-haddock": "sphinxcontrib-haddock_11" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12717,25 +12494,23 @@ "cardano-repo-tool": "cardano-repo-tool_12", "gitignore-nix": "gitignore-nix_12", "hackage-nix": "hackage-nix_12", - "haskell-language-server": "haskell-language-server_35", + "haskell-language-server": "haskell-language-server_24", "haskell-nix": "haskell-nix_24", "iohk-nix": "iohk-nix_24", - "nixpkgs": "nixpkgs_59", + "nixpkgs": "nixpkgs_49", "pre-commit-hooks-nix": "pre-commit-hooks-nix_12", - "sphinxcontrib-haddock": "sphinxcontrib-haddock_12", - "stackage-nix": "stackage-nix" + "sphinxcontrib-haddock": "sphinxcontrib-haddock_12" }, "locked": { - "lastModified": 1645203653, - "narHash": "sha256-HAi60mSkyMXzu1Wg3h6KdYZg+ufNMvX6obfcLo0ArL0=", - "owner": "L-as", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", + "owner": "input-output-hk", "repo": "plutus", - "rev": "5ec17953aae3ac9546f6d923201eb1dbb4e058bb", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { - "owner": "L-as", - "ref": "ghc9", + "owner": "input-output-hk", "repo": "plutus", "type": "github" } @@ -12745,19 +12520,71 @@ "cardano-repo-tool": "cardano-repo-tool_13", "gitignore-nix": "gitignore-nix_13", "hackage-nix": "hackage-nix_13", - "haskell-language-server": "haskell-language-server_37", + "haskell-language-server": "haskell-language-server_26", "haskell-nix": "haskell-nix_26", "iohk-nix": "iohk-nix_26", - "nixpkgs": "nixpkgs_62", + "nixpkgs": "nixpkgs_52", "pre-commit-hooks-nix": "pre-commit-hooks-nix_13", "sphinxcontrib-haddock": "sphinxcontrib-haddock_13" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", + "owner": "input-output-hk", + "repo": "plutus", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "plutus", + "type": "github" + } + }, + "plutus_14": { + "inputs": { + "cardano-repo-tool": "cardano-repo-tool_14", + "gitignore-nix": "gitignore-nix_14", + "hackage-nix": "hackage-nix_14", + "haskell-language-server": "haskell-language-server_28", + "haskell-nix": "haskell-nix_28", + "iohk-nix": "iohk-nix_28", + "nixpkgs": "nixpkgs_56", + "pre-commit-hooks-nix": "pre-commit-hooks-nix_14", + "sphinxcontrib-haddock": "sphinxcontrib-haddock_14" + }, + "locked": { + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", + "owner": "input-output-hk", + "repo": "plutus", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", + "type": "github" + }, + "original": { + "owner": "input-output-hk", + "repo": "plutus", + "type": "github" + } + }, + "plutus_15": { + "inputs": { + "cardano-repo-tool": "cardano-repo-tool_15", + "gitignore-nix": "gitignore-nix_15", + "hackage-nix": "hackage-nix_15", + "haskell-language-server": "haskell-language-server_30", + "haskell-nix": "haskell-nix_30", + "iohk-nix": "iohk-nix_30", + "nixpkgs": "nixpkgs_60", + "pre-commit-hooks-nix": "pre-commit-hooks-nix_15", + "sphinxcontrib-haddock": "sphinxcontrib-haddock_15" + }, + "locked": { + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12771,19 +12598,19 @@ "cardano-repo-tool": "cardano-repo-tool_2", "gitignore-nix": "gitignore-nix_2", "hackage-nix": "hackage-nix_2", - "haskell-language-server": "haskell-language-server_6", + "haskell-language-server": "haskell-language-server_4", "haskell-nix": "haskell-nix_4", "iohk-nix": "iohk-nix_4", - "nixpkgs": "nixpkgs_10", + "nixpkgs": "nixpkgs_9", "pre-commit-hooks-nix": "pre-commit-hooks-nix_2", "sphinxcontrib-haddock": "sphinxcontrib-haddock_2" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12797,19 +12624,19 @@ "cardano-repo-tool": "cardano-repo-tool_3", "gitignore-nix": "gitignore-nix_3", "hackage-nix": "hackage-nix_3", - "haskell-language-server": "haskell-language-server_9", + "haskell-language-server": "haskell-language-server_6", "haskell-nix": "haskell-nix_6", "iohk-nix": "iohk-nix_6", - "nixpkgs": "nixpkgs_15", + "nixpkgs": "nixpkgs_13", "pre-commit-hooks-nix": "pre-commit-hooks-nix_3", "sphinxcontrib-haddock": "sphinxcontrib-haddock_3" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12823,19 +12650,19 @@ "cardano-repo-tool": "cardano-repo-tool_4", "gitignore-nix": "gitignore-nix_4", "hackage-nix": "hackage-nix_4", - "haskell-language-server": "haskell-language-server_12", + "haskell-language-server": "haskell-language-server_8", "haskell-nix": "haskell-nix_8", "iohk-nix": "iohk-nix_8", - "nixpkgs": "nixpkgs_20", + "nixpkgs": "nixpkgs_17", "pre-commit-hooks-nix": "pre-commit-hooks-nix_4", "sphinxcontrib-haddock": "sphinxcontrib-haddock_4" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12849,19 +12676,19 @@ "cardano-repo-tool": "cardano-repo-tool_5", "gitignore-nix": "gitignore-nix_5", "hackage-nix": "hackage-nix_5", - "haskell-language-server": "haskell-language-server_14", + "haskell-language-server": "haskell-language-server_10", "haskell-nix": "haskell-nix_10", "iohk-nix": "iohk-nix_10", - "nixpkgs": "nixpkgs_23", + "nixpkgs": "nixpkgs_20", "pre-commit-hooks-nix": "pre-commit-hooks-nix_5", "sphinxcontrib-haddock": "sphinxcontrib-haddock_5" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12875,19 +12702,19 @@ "cardano-repo-tool": "cardano-repo-tool_6", "gitignore-nix": "gitignore-nix_6", "hackage-nix": "hackage-nix_6", - "haskell-language-server": "haskell-language-server_17", + "haskell-language-server": "haskell-language-server_12", "haskell-nix": "haskell-nix_12", "iohk-nix": "iohk-nix_12", - "nixpkgs": "nixpkgs_28", + "nixpkgs": "nixpkgs_24", "pre-commit-hooks-nix": "pre-commit-hooks-nix_6", "sphinxcontrib-haddock": "sphinxcontrib-haddock_6" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12901,19 +12728,19 @@ "cardano-repo-tool": "cardano-repo-tool_7", "gitignore-nix": "gitignore-nix_7", "hackage-nix": "hackage-nix_7", - "haskell-language-server": "haskell-language-server_20", + "haskell-language-server": "haskell-language-server_14", "haskell-nix": "haskell-nix_14", "iohk-nix": "iohk-nix_14", - "nixpkgs": "nixpkgs_33", + "nixpkgs": "nixpkgs_28", "pre-commit-hooks-nix": "pre-commit-hooks-nix_7", "sphinxcontrib-haddock": "sphinxcontrib-haddock_7" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12927,19 +12754,19 @@ "cardano-repo-tool": "cardano-repo-tool_8", "gitignore-nix": "gitignore-nix_8", "hackage-nix": "hackage-nix_8", - "haskell-language-server": "haskell-language-server_23", + "haskell-language-server": "haskell-language-server_16", "haskell-nix": "haskell-nix_16", "iohk-nix": "iohk-nix_16", - "nixpkgs": "nixpkgs_38", + "nixpkgs": "nixpkgs_32", "pre-commit-hooks-nix": "pre-commit-hooks-nix_8", "sphinxcontrib-haddock": "sphinxcontrib-haddock_8" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -12953,19 +12780,19 @@ "cardano-repo-tool": "cardano-repo-tool_9", "gitignore-nix": "gitignore-nix_9", "hackage-nix": "hackage-nix_9", - "haskell-language-server": "haskell-language-server_27", + "haskell-language-server": "haskell-language-server_18", "haskell-nix": "haskell-nix_18", "iohk-nix": "iohk-nix_18", - "nixpkgs": "nixpkgs_43", + "nixpkgs": "nixpkgs_37", "pre-commit-hooks-nix": "pre-commit-hooks-nix_9", "sphinxcontrib-haddock": "sphinxcontrib-haddock_9" }, "locked": { - "lastModified": 1653669501, - "narHash": "sha256-qJrjEeo9Jmar1TwihDFzKQNC1ui4M03iClJM1zMd5Uk=", + "lastModified": 1656595231, + "narHash": "sha256-3EBhSroECMOSP02qZGT0Zb3QHWibI/tYjdcaT5/YotY=", "owner": "input-output-hk", "repo": "plutus", - "rev": "fed48a71550a12290efc84eefb74305d93cde69d", + "rev": "b39a526e983cb931d0cc49b7d073d6d43abd22b5", "type": "github" }, "original": { @@ -13054,6 +12881,38 @@ "type": "github" } }, + "pre-commit-hooks-nix_14": { + "flake": false, + "locked": { + "lastModified": 1624971177, + "narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, + "pre-commit-hooks-nix_15": { + "flake": false, + "locked": { + "lastModified": 1624971177, + "narHash": "sha256-Amf/nBj1E77RmbSSmV+hg6YOpR+rddCbbVgo5C7BS0I=", + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "rev": "397f0713d007250a2c7a745e555fa16c5dc8cadb", + "type": "github" + }, + "original": { + "owner": "cachix", + "repo": "pre-commit-hooks.nix", + "type": "github" + } + }, "pre-commit-hooks-nix_2": { "flake": false, "locked": { @@ -13233,17 +13092,16 @@ "protolude_12": { "flake": false, "locked": { - "lastModified": 1637276813, - "narHash": "sha256-/mgR1Vyp1WYBjdkbwQycrf6lcmOgUFcYUZIMhVgYhdo=", + "lastModified": 1647139352, + "narHash": "sha256-JyHAQfTTUswP8MeGEZibx/2/v01Q7cU5mNpnmDazh24=", "owner": "protolude", "repo": "protolude", - "rev": "d821ef0ac7552cfa2c3e7a7bdf29539f57e3fae6", + "rev": "3e249724fd0ead27370c8c297b1ecd38f92cbd5b", "type": "github" }, "original": { "owner": "protolude", "repo": "protolude", - "rev": "d821ef0ac7552cfa2c3e7a7bdf29539f57e3fae6", "type": "github" } }, @@ -13263,6 +13121,38 @@ "type": "github" } }, + "protolude_14": { + "flake": false, + "locked": { + "lastModified": 1647139352, + "narHash": "sha256-JyHAQfTTUswP8MeGEZibx/2/v01Q7cU5mNpnmDazh24=", + "owner": "protolude", + "repo": "protolude", + "rev": "3e249724fd0ead27370c8c297b1ecd38f92cbd5b", + "type": "github" + }, + "original": { + "owner": "protolude", + "repo": "protolude", + "type": "github" + } + }, + "protolude_15": { + "flake": false, + "locked": { + "lastModified": 1647139352, + "narHash": "sha256-JyHAQfTTUswP8MeGEZibx/2/v01Q7cU5mNpnmDazh24=", + "owner": "protolude", + "repo": "protolude", + "rev": "3e249724fd0ead27370c8c297b1ecd38f92cbd5b", + "type": "github" + }, + "original": { + "owner": "protolude", + "repo": "protolude", + "type": "github" + } + }, "protolude_2": { "flake": false, "locked": { @@ -13393,10 +13283,23 @@ }, "root": { "inputs": { + "haskell-language-server": [ + "plutarch", + "haskell-language-server" + ], "haskell-nix": [ "plutarch", "haskell-nix" ], + "haskell-nix-extra-hackage": [ + "plutarch", + "haskell-nix-extra-hackage" + ], + "iohk-nix": [ + "plutarch", + "iohk-nix" + ], + "liqwid-nix": "liqwid-nix", "liqwid-plutarch-extra": "liqwid-plutarch-extra", "nixpkgs": [ "plutarch", @@ -13412,7 +13315,39 @@ "plutarch-script-export": "plutarch-script-export" } }, - "secp256k1-haskell": { + "secp256k1-haskell": { + "flake": false, + "locked": { + "lastModified": 1650290419, + "narHash": "sha256-XrjiqCC7cNTFib78gdMPGNettAkwAxQlbC/n+/mRFt4=", + "owner": "haskoin", + "repo": "secp256k1-haskell", + "rev": "3df963ab6ae14ec122691a97af09a7331511a387", + "type": "github" + }, + "original": { + "owner": "haskoin", + "repo": "secp256k1-haskell", + "type": "github" + } + }, + "secp256k1-haskell_10": { + "flake": false, + "locked": { + "lastModified": 1650290419, + "narHash": "sha256-XrjiqCC7cNTFib78gdMPGNettAkwAxQlbC/n+/mRFt4=", + "owner": "haskoin", + "repo": "secp256k1-haskell", + "rev": "3df963ab6ae14ec122691a97af09a7331511a387", + "type": "github" + }, + "original": { + "owner": "haskoin", + "repo": "secp256k1-haskell", + "type": "github" + } + }, + "secp256k1-haskell_11": { "flake": false, "locked": { "lastModified": 1650290419, @@ -13428,7 +13363,7 @@ "type": "github" } }, - "secp256k1-haskell_10": { + "secp256k1-haskell_12": { "flake": false, "locked": { "lastModified": 1650290419, @@ -13444,7 +13379,7 @@ "type": "github" } }, - "secp256k1-haskell_11": { + "secp256k1-haskell_13": { "flake": false, "locked": { "lastModified": 1650290419, @@ -13460,7 +13395,23 @@ "type": "github" } }, - "secp256k1-haskell_12": { + "secp256k1-haskell_14": { + "flake": false, + "locked": { + "lastModified": 1650290419, + "narHash": "sha256-XrjiqCC7cNTFib78gdMPGNettAkwAxQlbC/n+/mRFt4=", + "owner": "haskoin", + "repo": "secp256k1-haskell", + "rev": "3df963ab6ae14ec122691a97af09a7331511a387", + "type": "github" + }, + "original": { + "owner": "haskoin", + "repo": "secp256k1-haskell", + "type": "github" + } + }, + "secp256k1-haskell_15": { "flake": false, "locked": { "lastModified": 1650290419, @@ -13604,24 +13555,23 @@ "type": "github" } }, - "sized-functors": { + "sphinxcontrib-haddock": { "flake": false, "locked": { - "lastModified": 1620614934, - "narHash": "sha256-pVJbEGF4/lvXmWIypwkMQBYygOx3TQwLJbMpfdYovdY=", - "owner": "JonasDuregard", - "repo": "sized-functors", - "rev": "fe6bf78a1b97ff7429630d0e8974c9bc40945dcf", + "lastModified": 1594136664, + "narHash": "sha256-O9YT3iCUBHP3CEF88VDLLCO2HSP3HqkNA2q2939RnVY=", + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "rev": "f3956b3256962b2d27d5a4e96edb7951acf5de34", "type": "github" }, "original": { - "owner": "JonasDuregard", - "repo": "sized-functors", - "rev": "fe6bf78a1b97ff7429630d0e8974c9bc40945dcf", + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", "type": "github" } }, - "sphinxcontrib-haddock": { + "sphinxcontrib-haddock_10": { "flake": false, "locked": { "lastModified": 1594136664, @@ -13637,7 +13587,7 @@ "type": "github" } }, - "sphinxcontrib-haddock_10": { + "sphinxcontrib-haddock_11": { "flake": false, "locked": { "lastModified": 1594136664, @@ -13653,7 +13603,7 @@ "type": "github" } }, - "sphinxcontrib-haddock_11": { + "sphinxcontrib-haddock_12": { "flake": false, "locked": { "lastModified": 1594136664, @@ -13669,7 +13619,7 @@ "type": "github" } }, - "sphinxcontrib-haddock_12": { + "sphinxcontrib-haddock_13": { "flake": false, "locked": { "lastModified": 1594136664, @@ -13685,7 +13635,23 @@ "type": "github" } }, - "sphinxcontrib-haddock_13": { + "sphinxcontrib-haddock_14": { + "flake": false, + "locked": { + "lastModified": 1594136664, + "narHash": "sha256-O9YT3iCUBHP3CEF88VDLLCO2HSP3HqkNA2q2939RnVY=", + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "rev": "f3956b3256962b2d27d5a4e96edb7951acf5de34", + "type": "github" + }, + "original": { + "owner": "michaelpj", + "repo": "sphinxcontrib-haddock", + "type": "github" + } + }, + "sphinxcontrib-haddock_15": { "flake": false, "locked": { "lastModified": 1594136664, @@ -13845,14 +13811,14 @@ "type": "github" } }, - "stackage-nix": { + "stackage_10": { "flake": false, "locked": { - "lastModified": 1597712578, - "narHash": "sha256-c/pcfZ6w5Yp//7oC0hErOGVVphBLc5vc4IZlWKZ/t6E=", + "lastModified": 1654046327, + "narHash": "sha256-IxX46Dh4OZpF3k7KPMa3tZSScYYGqFxXpCnMc0QRkuQ=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "e32c8b06d56954865725514ce0d98d5d1867e43a", + "rev": "cc1d778723fcd431f9b2ed632a50c610c3e38b54", "type": "github" }, "original": { @@ -13861,7 +13827,7 @@ "type": "github" } }, - "stackage_10": { + "stackage_11": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13877,7 +13843,7 @@ "type": "github" } }, - "stackage_11": { + "stackage_12": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13893,14 +13859,14 @@ "type": "github" } }, - "stackage_12": { + "stackage_13": { "flake": false, "locked": { - "lastModified": 1644887829, - "narHash": "sha256-tjUXJpqB7MMnqM4FF5cdtZipfratUcTKRQVA6F77sEQ=", + "lastModified": 1654046327, + "narHash": "sha256-IxX46Dh4OZpF3k7KPMa3tZSScYYGqFxXpCnMc0QRkuQ=", "owner": "input-output-hk", "repo": "stackage.nix", - "rev": "db8bdef6588cf4f38e6069075ba76f0024381f68", + "rev": "cc1d778723fcd431f9b2ed632a50c610c3e38b54", "type": "github" }, "original": { @@ -13909,7 +13875,7 @@ "type": "github" } }, - "stackage_13": { + "stackage_14": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13925,7 +13891,7 @@ "type": "github" } }, - "stackage_2": { + "stackage_15": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13941,7 +13907,7 @@ "type": "github" } }, - "stackage_3": { + "stackage_2": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13957,7 +13923,7 @@ "type": "github" } }, - "stackage_4": { + "stackage_3": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13973,7 +13939,7 @@ "type": "github" } }, - "stackage_5": { + "stackage_4": { "flake": false, "locked": { "lastModified": 1654046327, @@ -13989,7 +13955,7 @@ "type": "github" } }, - "stackage_6": { + "stackage_5": { "flake": false, "locked": { "lastModified": 1654046327, @@ -14005,7 +13971,7 @@ "type": "github" } }, - "stackage_7": { + "stackage_6": { "flake": false, "locked": { "lastModified": 1654046327, @@ -14021,7 +13987,7 @@ "type": "github" } }, - "stackage_8": { + "stackage_7": { "flake": false, "locked": { "lastModified": 1654046327, @@ -14037,7 +14003,7 @@ "type": "github" } }, - "stackage_9": { + "stackage_8": { "flake": false, "locked": { "lastModified": 1654046327, @@ -14053,338 +14019,19 @@ "type": "github" } }, - "tailwind-haskell": { - "inputs": { - "ema": [ - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_2", - "flake-utils": "flake-utils_2", - "nixpkgs": "nixpkgs_2" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_10": { - "inputs": { - "ema": [ - "plutarch-safe-money", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_20", - "flake-utils": "flake-utils_30", - "nixpkgs": "nixpkgs_50" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_11": { - "inputs": { - "flake-compat": "flake-compat_23", - "flake-utils": "flake-utils_35", - "nixpkgs": "nixpkgs_56" - }, - "locked": { - "lastModified": 1649519562, - "narHash": "sha256-IVZ4D7JkSCn0sjeTw5b0s2TTIU+g4hk78u1znXY4JjQ=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "f5bfc15da3ee6e74a077579fb10269bb450fa5cb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_2": { - "inputs": { - "ema": [ - "liqwid-plutarch-extra", - "plutarch-context-builder", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_4", - "flake-utils": "flake-utils_5", - "nixpkgs": "nixpkgs_7" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_3": { - "inputs": { - "ema": [ - "liqwid-plutarch-extra", - "plutarch-numeric", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_6", - "flake-utils": "flake-utils_8", - "nixpkgs": "nixpkgs_12" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_4": { - "inputs": { - "ema": [ - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_8", - "flake-utils": "flake-utils_11", - "nixpkgs": "nixpkgs_17" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_5": { - "inputs": { - "ema": [ - "plutarch-context-builder", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_10", - "flake-utils": "flake-utils_15", - "nixpkgs": "nixpkgs_25" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_6": { - "inputs": { - "ema": [ - "plutarch-numeric", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_12", - "flake-utils": "flake-utils_18", - "nixpkgs": "nixpkgs_30" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_7": { - "inputs": { - "ema": [ - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_14", - "flake-utils": "flake-utils_21", - "nixpkgs": "nixpkgs_35" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_8": { - "inputs": { - "ema": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_16", - "flake-utils": "flake-utils_24", - "nixpkgs": "nixpkgs_40" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "tailwind-haskell_9": { - "inputs": { - "ema": [ - "plutarch-safe-money", - "liqwid-plutarch-extra", - "plutarch-quickcheck", - "plutarch", - "emanote", - "ema" - ], - "flake-compat": "flake-compat_18", - "flake-utils": "flake-utils_27", - "nixpkgs": "nixpkgs_45" - }, - "locked": { - "lastModified": 1653230344, - "narHash": "sha256-MNwayqvZHsIsP1uyqwQFvzcfFGBMejzZOqAapDjrV5I=", - "owner": "srid", - "repo": "tailwind-haskell", - "rev": "0fb8a18b0e770bafc17521836658f31c56e6dfdb", - "type": "github" - }, - "original": { - "owner": "srid", - "ref": "master", - "repo": "tailwind-haskell", - "type": "github" - } - }, - "th-extras": { + "stackage_9": { "flake": false, "locked": { - "lastModified": 1641329261, - "narHash": "sha256-+K91xH/zew66ry0EAV5FaEIAHUZdJ3ngD9GzCJiUq7k=", - "owner": "mokus0", - "repo": "th-extras", - "rev": "787ed752c1e5d41b5903b74e171ed087de38bffa", - "type": "github" - }, - "original": { - "owner": "mokus0", - "repo": "th-extras", - "rev": "787ed752c1e5d41b5903b74e171ed087de38bffa", - "type": "github" - } - }, - "unionmount": { - "inputs": { - "flake-compat": "flake-compat_24", - "flake-utils": "flake-utils_36", - "nixpkgs": "nixpkgs_57" - }, - "locked": { - "lastModified": 1649012450, - "narHash": "sha256-m0qlPd3jxjyDEkd7cQKLX0GT9a00qnvygec9GCBZ1hc=", - "owner": "srid", - "repo": "unionmount", - "rev": "27584567d9182c12018f988db899593a896f86ff", + "lastModified": 1654046327, + "narHash": "sha256-IxX46Dh4OZpF3k7KPMa3tZSScYYGqFxXpCnMc0QRkuQ=", + "owner": "input-output-hk", + "repo": "stackage.nix", + "rev": "cc1d778723fcd431f9b2ed632a50c610c3e38b54", "type": "github" }, "original": { - "owner": "srid", - "ref": "master", - "repo": "unionmount", + "owner": "input-output-hk", + "repo": "stackage.nix", "type": "github" } } diff --git a/flake.nix b/flake.nix index a62928bd..d60ca23a 100644 --- a/flake.nix +++ b/flake.nix @@ -1,263 +1,109 @@ { description = "agora"; - inputs.nixpkgs.follows = "plutarch/nixpkgs"; - inputs.haskell-nix.follows = "plutarch/haskell-nix"; - inputs.nixpkgs-latest.url = "github:NixOS/nixpkgs?rev=a0a69be4b5ee63f1b5e75887a406e9194012b492"; - # temporary fix for nix versions that have the transitive follows bug - # see https://github.com/NixOS/nix/issues/6013 - inputs.nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; }; - - # Plutarch and its friends - inputs.plutarch.url = - "github:liqwid-labs/plutarch?rev=e7ef565645146e26e75ec29fe97122a74e52c6b7"; - inputs.plutarch.inputs.emanote.follows = - "plutarch/haskell-nix/nixpkgs-unstable"; - inputs.plutarch.inputs.nixpkgs.follows = - "plutarch/haskell-nix/nixpkgs-unstable"; - - inputs.liqwid-plutarch-extra.url = - "github:Liqwid-Labs/liqwid-plutarch-extra?ref=seungheonoh/agoraUtils"; - inputs.plutarch-numeric.url = - "github:Liqwid-Labs/plutarch-numeric?ref=main"; - inputs.plutarch-safe-money.url = - "github:Liqwid-Labs/plutarch-safe-money?rev=9f968b80189c7e4b335527cd5b103dc26952f667"; - - inputs.plutarch-script-export.url = - "github:Liqwid-Labs/plutarch-script-export?ref=main"; - - # Testing - inputs.plutarch-quickcheck.url = - "github:liqwid-labs/plutarch-quickcheck?ref=staging"; - - # PCB Rev is locked until Agora test have explicit Minting CS. Check PCB PR #12 - inputs.plutarch-context-builder.url = - "github:Liqwid-Labs/plutarch-context-builder?ref=2a2ca72ff310788e531cbbe379ef7b0c4cb42dc9"; + inputs = { + nixpkgs.follows = "plutarch/nixpkgs"; + nixpkgs-latest.url = "github:NixOS/nixpkgs?rev=cf63df0364f67848083ff75bc8ac9b7ca7aa5a01"; + # temporary fix for nix versions that have the transitive follows bug + # see https://github.com/NixOS/nix/issues/6013 + nixpkgs-2111 = { url = "github:NixOS/nixpkgs/nixpkgs-21.11-darwin"; }; + + haskell-nix-extra-hackage.follows = "plutarch/haskell-nix-extra-hackage"; + haskell-nix.follows = "plutarch/haskell-nix"; + iohk-nix.follows = "plutarch/iohk-nix"; + haskell-language-server.follows = "plutarch/haskell-language-server"; + + # Plutarch and its friends + plutarch = { + url = "github:Plutonomicon/plutarch-plutus?ref=staging"; + + inputs.emanote.follows = + "plutarch/haskell-nix/nixpkgs-unstable"; + inputs.nixpkgs.follows = + "plutarch/haskell-nix/nixpkgs-unstable"; + }; - outputs = inputs@{ self, nixpkgs, nixpkgs-latest, haskell-nix, plutarch, ... }: + plutarch-numeric.url = + "github:Liqwid-Labs/plutarch-numeric?ref=main"; + plutarch-safe-money.url = + "github:Liqwid-Labs/plutarch-safe-money?ref=main"; + liqwid-plutarch-extra.url = + "github:Liqwid-Labs/liqwid-plutarch-extra?ref=plutus-v1"; + plutarch-quickcheck.url = + "github:liqwid-labs/plutarch-quickcheck?ref=staging"; + plutarch-context-builder.url = + "github:Liqwid-Labs/plutarch-context-builder?ref=plutus-v1"; + plutarch-script-export.url = + "github:Liqwid-Labs/plutarch-script-export?ref=main"; + + liqwid-nix.url = "github:Liqwid-Labs/liqwid-nix?ref=main"; + }; + + outputs = inputs@{ liqwid-nix, ... }: let - supportedSystems = nixpkgs-latest.lib.systems.flakeExposed; - - perSystem = nixpkgs.lib.genAttrs supportedSystems; - - pkgsFor = system: import nixpkgs { - inherit system; - overlays = [ haskell-nix.overlay (import "${plutarch.inputs.iohk-nix}/overlays/crypto") ]; - # This only does bad things for us... - # inherit (haskell-nix) config; - }; - pkgsFor' = system: import nixpkgs-latest { inherit system; }; - - fourmoluFor = system: (pkgsFor' system).haskell.packages.ghc922.fourmolu_0_6_0_0; - - defaultGhcVersion = "ghc923"; - - nonReinstallablePkgs = [ - "array" - "array" - "base" - "binary" - "bytestring" - "Cabal" - "containers" - "deepseq" - "directory" - "exceptions" - "filepath" - "ghc" - "ghc-bignum" - "ghc-boot" - "ghc-boot" - "ghc-boot-th" - "ghc-compact" - "ghc-heap" - # "ghci" - # "haskeline" - "ghcjs-prim" - "ghcjs-th" - "ghc-prim" - "ghc-prim" - "hpc" - "integer-gmp" - "integer-simple" - "mtl" - "parsec" - "pretty" - "process" - "rts" - "stm" - "template-haskell" - "terminfo" - "text" - "time" - "transformers" - "unix" - "Win32" - "xhtml" - ]; - - haskellModules = [ - ({ config, pkgs, hsPkgs, ... }: { - inherit nonReinstallablePkgs; # Needed for a lot of different things - packages = { - cardano-binary.doHaddock = false; - cardano-binary.ghcOptions = [ "-Wwarn" ]; - cardano-crypto-class.components.library.pkgconfig = pkgs.lib.mkForce [ [ pkgs.libsodium-vrf ] ]; - cardano-crypto-class.doHaddock = false; - cardano-crypto-class.ghcOptions = [ "-Wwarn" ]; - cardano-crypto-praos.components.library.pkgconfig = pkgs.lib.mkForce [ [ pkgs.libsodium-vrf ] ]; - cardano-prelude.doHaddock = false; # somehow above options are not applied? - cardano-prelude.ghcOptions = [ "-Wwarn" ]; - # Workaround missing support for build-tools: - # https://github.com/input-output-hk/haskell.nix/issues/231 - plutarch-test.components.exes.plutarch-test.build-tools = [ - config.hsPkgs.hspec-discover - ]; + benchCheckOverlay = self: super: { + toFlake = + let + inherit (self) inputs perSystem pkgsFor'; + flake = super.toFlake or { }; + name = "benchCheck"; + in + flake // { + checks = perSystem (system: + flake.checks.${system} // { + ${name} = + let + pkgs' = pkgsFor' system; + bench = flake.packages.${system}."agora:bench:agora-bench"; + in + pkgs'.runCommand name + { + nativeBuildInputs = [ pkgs'.diffutils ]; + } '' + export LC_CTYPE=C.UTF-8 + export LC_ALL=C.UTF-8 + export LANG=C.UTF-8 + cd ${inputs.self} + ${bench}/bin/agora-bench | diff bench.csv - \ + || (echo "bench.csv is outdated"; exit 1) + mkdir "$out" + ''; + }); }; - }) - ]; - - myhackage = system: compiler-nix-name: plutarch.inputs.haskell-nix-extra-hackage.mkHackageFor system compiler-nix-name ( - [ - "${inputs.plutarch.inputs.flat}" - "${inputs.plutarch.inputs.protolude}" - "${inputs.plutarch.inputs.cardano-prelude}/cardano-prelude" - "${inputs.plutarch.inputs.cardano-crypto}" - "${inputs.plutarch.inputs.cardano-base}/binary" - "${inputs.plutarch.inputs.cardano-base}/cardano-crypto-class" - "${inputs.plutarch.inputs.plutus}/plutus-core" - "${inputs.plutarch.inputs.plutus}/plutus-ledger-api" - "${inputs.plutarch.inputs.plutus}/plutus-tx" - "${inputs.plutarch.inputs.plutus}/prettyprinter-configurable" - "${inputs.plutarch.inputs.plutus}/word-array" - "${inputs.plutarch.inputs.secp256k1-haskell}" - "${inputs.plutarch.inputs.plutus}/plutus-tx-plugin" # necessary for FFI tests - - # Custom deps as a consumer - "${inputs.plutarch}" - "${inputs.plutarch}/plutarch-extra" - "${inputs.liqwid-plutarch-extra}" + }; + in + (liqwid-nix.buildProject + { + inherit inputs; + src = ./.; + } + [ + liqwid-nix.haskellProject + liqwid-nix.plutarchProject + (liqwid-nix.addDependencies [ "${inputs.plutarch-numeric}" "${inputs.plutarch-safe-money}" "${inputs.plutarch-quickcheck}" "${inputs.plutarch-context-builder}" + "${inputs.liqwid-plutarch-extra}" "${inputs.plutarch-script-export}" - ] - ); - - applyDep = pkgs: o: - let - h = myhackage pkgs.system o.compiler-nix-name; - o' = (plutarch.applyPlutarchDep pkgs o); - in - o' // rec { - modules = haskellModules ++ [ h.module ] ++ (o'.modules or [ ]); - extra-hackages = [ (import h.hackageNix) ] ++ (o'.extra-hackages or [ ]); - extra-hackage-tarballs = { _xNJUd_plutarch-hackage = h.hackageTarball; }; - cabalProjectLocal = (o'.cabalProjectLocal or "") + " , cache >= 0.1.3.0 "; - }; - - projectForGhc = compiler-nix-name: system: - let pkgs = pkgsFor system; in - let pkgs' = pkgsFor' system; in - let pkgSet = pkgs.haskell-nix.cabalProject' (applyDep pkgs { - src = ./.; - inherit compiler-nix-name; - modules = [ ]; - shell = { - withHoogle = true; - - exactDeps = true; - - # We use the ones from Nixpkgs, since they are cached reliably. - # Eventually we will probably want to build these with haskell.nix. - nativeBuildInputs = [ - pkgs'.cabal-install - pkgs'.hlint - pkgs'.haskellPackages.cabal-fmt - (fourmoluFor system) - pkgs'.nixpkgs-fmt - (plutarch.hlsFor compiler-nix-name system) - ]; - }; - }); in - pkgSet; - - projectFor = projectForGhc defaultGhcVersion; - - formatCheckFor = system: - let - pkgs' = pkgsFor' system; - in - pkgs'.runCommand "format-check" - { - nativeBuildInputs = [ pkgs'.haskellPackages.cabal-fmt pkgs'.nixpkgs-fmt (fourmoluFor system) pkgs'.hlint ]; - } '' - export LC_CTYPE=C.UTF-8 - export LC_ALL=C.UTF-8 - export LANG=C.UTF-8 - cd ${self} - make format_check || (echo " Please run 'make format'" ; exit 1) - find -name '*.hs' -not -path './dist*/*' -not -path './haddock/*' | xargs hlint - mkdir $out - '' - ; - - benchCheckFor = system: agora-bench: - let - pkgs = pkgsFor system; - pkgs' = pkgsFor' system; - in - pkgs.runCommand "bench-check" - { - bench = "${agora-bench}/bin/agora-bench"; - nativeBuildInputs = [ - pkgs'.diffutils - ]; - } '' - export LC_CTYPE=C.UTF-8 - export LC_ALL=C.UTF-8 - export LANG=C.UTF-8 - cd ${self} - make bench_check || (echo " Please run 'make bench'" ; exit 1) - mkdir $out - ''; - in - { - project = perSystem projectFor; - flake = perSystem (system: (projectFor system).flake { }); - - packages = perSystem (system: - self.flake.${system}.packages // { - haddock = - let - agora-doc = self.flake.${system}.packages."agora:lib:agora".doc; - pkgs = pkgsFor system; - in - pkgs.runCommand "haddock-merge" { } '' - cd ${self} - mkdir $out - cp -r ${agora-doc}/share/doc/* $out - ''; - }); - - # Define what we want to test - checks = perSystem (system: - self.flake.${system}.checks // { - formatCheck = formatCheckFor system; - # benchCheck = benchCheckFor system self.flake.${system}.packages."agora:bench:agora-bench"; - agora = self.flake.${system}.packages."agora:lib:agora"; - agora-test = self.flake.${system}.packages."agora:test:agora-test"; - benchCheck = benchCheckFor system self.flake.${system}.packages."agora:bench:agora-bench"; - }); - check = perSystem (system: - (pkgsFor system).runCommand "combined-test" - { - checksss = builtins.attrValues self.checks.${system}; - } '' - echo $checksss - touch $out - ''); - devShell = perSystem (system: self.flake.${system}.devShell); - }; + ]) + (liqwid-nix.enableFormatCheck [ + "-XQuasiQuotes" + "-XTemplateHaskell" + "-XTypeApplications" + "-XImportQualifiedPost" + "-XPatternSynonyms" + "-XOverloadedRecordDot" + ]) + liqwid-nix.enableLintCheck + liqwid-nix.enableCabalFormatCheck + liqwid-nix.enableNixFormatCheck + liqwid-nix.addBuildChecks + (liqwid-nix.addCommandLineTools (pkgs: _: [ + pkgs.haskellPackages.hasktags + ])) + benchCheckOverlay + ] + ).toFlake; } From 14aacf206fb8b0b4edd4ad9debfe355555860141 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 11 Aug 2022 05:10:25 +0800 Subject: [PATCH 69/78] refactor makefile --- Makefile | 85 +++++++++++++++++++++++++++++++++++++++----------------- 1 file changed, 59 insertions(+), 26 deletions(-) diff --git a/Makefile b/Makefile index ab8c2924..bab143b7 100644 --- a/Makefile +++ b/Makefile @@ -1,13 +1,32 @@ # This really ought to be `/usr/bin/env bash`, but nix flakes don't like that. SHELL := /bin/sh -.PHONY: hoogle format haddock usage tag format_nix format_haskell format_check lint ps_bridge bench bench_check scripts +.PHONY: hoogle format haddock usage tag format_nix format_haskell format_check \ + lint refactor ps_bridge bench bench_check scripts test build ci -AGORA_TARGETS := agora agora-bench agora-purescript-bridge agora-scripts agora-specs agora-test agora-testlib +SOURCE_FILES := $(shell git ls-tree -r HEAD --full-tree --name-only) +SOURCE_FILES := $(wildcard $(SOURCE_FILES)) +HASKELL_SOURCES := $(filter %.hs,$(SOURCE_FILES)) +CABAL_SOURCES := $(filter %.cabal,$(SOURCE_FILES)) +NIX_SOURCES := $(filter %.nix,$(SOURCE_FILES)) +FORMAT_EXTENSIONS := -o -XQuasiQuotes -o -XTemplateHaskell -o -XTypeApplications \ + -o -XImportQualifiedPost -o -XPatternSynonyms -o -XOverloadedRecordDot +HLINT_EXTS := -XQuasiQuotes + +THREADS ?= 8 +PS_BRIDGE_OUTPUT_DIR ?= agora-purescript-bridge/ +BENCH_OUTPUT ?= bench.csv +TEST_CASE_TIMEOUT ?= 100 usage: - @echo "usage: make [OPTIONS]" + @echo "usage: [env [= ...]] make [OPTIONS]" @echo + @echo "Available variables:" + @echo " THREADS -- The number of threads for building the project" + @echo " PS_BRIDGE_OUTPUT_DIR -- The output directory of the purescript bridge" + @echo " BENCH_OUTPUT -- The output file of the benchmark report" + @echo " TEST_CASE_TIMEOUT -- Timeout for individual tests. Default unit: s" + @echo @echo "Available commands:" @echo " hoogle -- Start local hoogle" @echo " format -- Format the project" @@ -21,8 +40,13 @@ usage: @echo " bench -- Generate bench report bench.csv" @echo " bench_check -- Check if bench report is up-to-date" @echo " scripts -- Run the agora script server (dev mode)" + @echo " ci -- Run all the CI checks" + +requires_nix_shell: + @ [ "$(IN_NIX_SHELL)" ] || echo "The $(MAKECMDGOALS) target must be run from inside a nix shell" + @ [ "$(IN_NIX_SHELL)" ] || (echo " run 'nix develop' first" && false) -hoogle: +hoogle: requires_nix_shell pkill hoogle || true hoogle generate --local=haddock --database=hoo/local.hoo hoogle server --local -p 8081 >> /dev/null & @@ -30,39 +54,48 @@ hoogle: format: format_haskell format_nix -format_nix: - git ls-tree -r HEAD --full-tree --name-only | grep -E '.*\.nix' | xargs nixpkgs-fmt +format_nix: requires_nix_shell + nixpkgs-fmt $(NIX_SOURCES) -FORMAT_EXTENSIONS := -o -XQuasiQuotes -o -XTemplateHaskell -o -XTypeApplications -o -XImportQualifiedPost -o -XPatternSynonyms -o -XOverloadedRecordDot -format_haskell: - find -name '*.hs' -not -path './dist-*/*' | xargs fourmolu $(FORMAT_EXTENSIONS) -m inplace - git ls-tree -r HEAD --full-tree --name-only | grep -E '.*\.cabal' | xargs cabal-fmt -i +format_haskell: requires_nix_shell + fourmolu $(FORMAT_EXTENSIONS) -m inplace $(HASKELL_SOURCES) + cabal-fmt -i $(CABAL_SOURCES) -format_check: - find -name '*.hs' \ - -not -path './dist*/*' \ - -not -path './haddock/*' \ - | xargs fourmolu $(FORMAT_EXTENSIONS) -m check +format_check: requires_nix_shell + fourmolu $(FORMAT_EXTENSIONS) -m check $(HASKELL_SOURCES) + nixpkgs-fmt --check $(NIX_SOURCES) + cabal-fmt --check $(CABAL_SOURCES) -haddock: +haddock: requires_nix_shell cabal haddock --haddock-html --haddock-hoogle --builddir=haddock -tag: - hasktags -x $(AGORA_TARGETS) +tag: requires_nix_shell + hasktags -x $(HASKELL_SOURCES) + +lint: requires_nix_shell + hlint $(HLINT_EXTS) $(HASKELL_SOURCES) -lint: - hlint $(AGORA_TARGETS) +refactor: requires_nix_shell + for src in $(HASKELL_SOURCES) ; do \ + hlint $(HLINT_EXTS) --refactor --refactor-options='-i -s' $$src ;\ + done -PS_BRIDGE_OUTPUT_DIR := agora-purescript-bridge/ -ps_bridge: +ps_bridge: requires_nix_shell cabal run exe:agora-purescript-bridge -- -o $(PS_BRIDGE_OUTPUT_DIR) -BENCH_OUTPUT = "bench.csv" -bench: +bench: requires_nix_shell cabal run agora-bench -- -o $(BENCH_OUTPUT) -bench_check: +bench_check: requires_nix_shell cabal -v0 new-run agora-bench | diff bench.csv - -scripts: +scripts: requires_nix_shell cabal run agora-scripts -- -c + +test: requires_nix_shell + cabal test --test-options="--hide-successes -t $(TEST_CASE_TIMEOUT) -j$(THREADS)" + +build: requires_nix_shell + cabal build -j$(THREADS) + +ci: format_check lint build bench_check test haddock From f248dbab494808812a75751a46e9f0f67698d53b Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 3 Aug 2022 20:59:37 +0800 Subject: [PATCH 70/78] fix compilation errors --- agora-bench/Bench.hs | 1 - agora-scripts/Main.hs | 7 +- agora-specs/Property/Generator.hs | 12 +- agora-specs/Property/Governor.hs | 8 +- agora-specs/Sample/Effect/GovernorMutation.hs | 2 +- .../Sample/Effect/TreasuryWithdrawal.hs | 3 +- agora-specs/Sample/Governor/Initialize.hs | 26 +- agora-specs/Sample/Governor/Mutate.hs | 36 +- agora-specs/Sample/Proposal/Advance.hs | 64 +- agora-specs/Sample/Proposal/Cosign.hs | 40 +- agora-specs/Sample/Proposal/Create.hs | 44 +- agora-specs/Sample/Proposal/UnlockStake.hs | 36 +- agora-specs/Sample/Proposal/Vote.hs | 36 +- agora-specs/Sample/Shared.hs | 8 +- agora-specs/Sample/Stake.hs | 32 +- agora-specs/Sample/Stake/SetDelegate.hs | 18 +- agora-specs/Sample/Treasury.hs | 28 +- agora-specs/Spec/AuthorityToken.hs | 5 +- agora-testlib/Test/Specification.hs | 9 +- agora-testlib/Test/Util.hs | 11 - agora/Agora/AuthorityToken.hs | 11 +- agora/Agora/Effect.hs | 4 +- agora/Agora/Effect/GovernorMutation.hs | 39 +- agora/Agora/Effect/NoOp.hs | 27 +- agora/Agora/Effect/TreasuryWithdrawal.hs | 33 +- agora/Agora/Governor.hs | 71 +- agora/Agora/Governor/Scripts.hs | 88 +- agora/Agora/Plutarch/Orphans.hs | 136 +- agora/Agora/Proposal.hs | 234 ++-- agora/Agora/Proposal/Scripts.hs | 64 +- agora/Agora/Proposal/Time.hs | 99 +- agora/Agora/Stake.hs | 121 +- agora/Agora/Stake/Scripts.hs | 43 +- agora/Agora/Treasury.hs | 32 +- agora/Agora/Utils.hs | 8 +- bench.csv | 1162 ++++++++--------- 36 files changed, 1326 insertions(+), 1272 deletions(-) diff --git a/agora-bench/Bench.hs b/agora-bench/Bench.hs index 32cefc2c..d8cdafbb 100644 --- a/agora-bench/Bench.hs +++ b/agora-bench/Bench.hs @@ -8,7 +8,6 @@ import Data.ByteString.Short qualified as SBS import Data.Csv (DefaultOrdered, ToNamedRecord, header, headerOrder, namedRecord, toNamedRecord, (.=)) import Data.List (intercalate) import Data.Text (Text, pack) -import GHC.Generics (Generic) import Plutarch.Evaluate (evalScript) import PlutusLedgerApi.V1 ( ExBudget (ExBudget), diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index 4811ab52..5191b85f 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -107,7 +107,12 @@ agoraScripts params = governorSTAssetClass :: AssetClass governorSTAssetClass = - Value.assetClass (mintingPolicySymbol $ mkMintingPolicy $ governorPolicy governor) "" + Value.assetClass + ( mintingPolicySymbol $ + mkMintingPolicy def $ + governorPolicy governor + ) + "" proposal :: Proposal proposal = proposalFromGovernor governor diff --git a/agora-specs/Property/Generator.hs b/agora-specs/Property/Generator.hs index e7a2f309..a1a26fc2 100644 --- a/agora-specs/Property/Generator.hs +++ b/agora-specs/Property/Generator.hs @@ -114,8 +114,10 @@ genInput = do val <- genSingletonValue return $ input $ - credential cred - . withValue val + mconcat + [ credential cred + , withValue val + ] genOutput :: Builder a => Gen a genOutput = do @@ -123,8 +125,10 @@ genOutput = do val <- genSingletonValue return $ output $ - credential cred - . withValue val + mconcat + [ credential cred + , withValue val + ] genOutRef :: Gen TxOutRef genOutRef = do diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index 5bd5097e..a75cf555 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -157,7 +157,13 @@ governorMintingProperty = -} gst = assetClassValue govAssetClass 1 mintAmount x = mint . mconcat $ replicate x gst - outputToGov = output $ script govValidatorHash . withValue gst . withDatum govDatum + outputToGov = + output $ + mconcat + [ script govValidatorHash + , withValue gst + , withDatum govDatum + ] referencedInput = input $ withOutRef gstUTXORef govDatum :: GovernorDatum diff --git a/agora-specs/Sample/Effect/GovernorMutation.hs b/agora-specs/Sample/Effect/GovernorMutation.hs index bc3967a9..35640915 100644 --- a/agora-specs/Sample/Effect/GovernorMutation.hs +++ b/agora-specs/Sample/Effect/GovernorMutation.hs @@ -51,7 +51,7 @@ import Test.Util (datumPair, toDatumHash) -- | The effect validator instance. effectValidator :: Validator -effectValidator = mkValidator $ mutateGovernorValidator governor +effectValidator = mkValidator def $ mutateGovernorValidator governor -- | The hash of the validator instance. effectValidatorHash :: ValidatorHash diff --git a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs index 724dca98..5cb2db22 100644 --- a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs +++ b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs @@ -23,6 +23,7 @@ import Agora.Effect.TreasuryWithdrawal ( TreasuryWithdrawalDatum (TreasuryWithdrawalDatum), treasuryWithdrawalValidator, ) +import Data.Default (def) import Plutarch.Api.V1 (mkValidator, validatorHash) import PlutusLedgerApi.V1 ( Address (Address), @@ -147,7 +148,7 @@ buildReceiversOutputFromDatum (TreasuryWithdrawalDatum xs _) = f <$> xs -- | Effect validator instance. validator :: Validator -validator = mkValidator $ treasuryWithdrawalValidator currSymbol +validator = mkValidator def $ treasuryWithdrawalValidator currSymbol -- | 'TokenName' that represents the hash of the 'Agora.Stake.Stake' validator. validatorHashTN :: TokenName diff --git a/agora-specs/Sample/Governor/Initialize.hs b/agora-specs/Sample/Governor/Initialize.hs index 954d9cb4..38283738 100644 --- a/agora-specs/Sample/Governor/Initialize.hs +++ b/agora-specs/Sample/Governor/Initialize.hs @@ -114,7 +114,7 @@ govValidatorHash :: ValidatorHash govValidatorHash = governorValidatorHash governor govPolicy :: MintingPolicy -govPolicy = mkMintingPolicy (governorPolicy governor) +govPolicy = mkMintingPolicy def (governorPolicy governor) govSymbol :: CurrencySymbol govSymbol = mintingPolicySymbol govPolicy @@ -169,12 +169,16 @@ mintGST ps = builder then mconcat [ input $ - pubKey witnessPubKey - . withValue witnessValue - . withOutRef witnessRef + mconcat + [ pubKey witnessPubKey + , withValue witnessValue + , withOutRef witnessRef + ] , output $ - pubKey witnessPubKey - . withValue witnessValue + mconcat + [ pubKey witnessPubKey + , withValue witnessValue + ] ] else mempty @@ -184,11 +188,13 @@ mintGST ps = builder let datum = if ps.withGovernorDatum then withDatum governorOutputDatum - else id + else mempty in output $ - script govValidatorHash - . withValue governorValue - . datum + mconcat + [ script govValidatorHash + , withValue governorValue + , datum + ] -- builder = mconcat diff --git a/agora-specs/Sample/Governor/Mutate.hs b/agora-specs/Sample/Governor/Mutate.hs index 735aae1b..c5026b3d 100644 --- a/agora-specs/Sample/Governor/Mutate.hs +++ b/agora-specs/Sample/Governor/Mutate.hs @@ -49,7 +49,7 @@ import Sample.Shared ( minAda, ) import Test.Specification (SpecificationTree, testValidator) -import Test.Util (CombinableBuilder, mkSpending, pubKeyHashes, sortValue, validatorHashes, withOptional) +import Test.Util (CombinableBuilder, mkSpending, pubKeyHashes, sortValue, validatorHashes) -------------------------------------------------------------------------------- @@ -142,18 +142,22 @@ mkGovernorBuilder ps = then pubKey $ head pubKeyHashes else script govValidatorHash withGSTDatum = - withOptional withDatum $ + maybe mempty withDatum $ mkGovernorOutputDatum ps.governorOutputDatumValidity in mconcat [ input $ - script govValidatorHash - . withDatum governorInputDatum - . withValue value - . withOutRef governorRef + mconcat + [ script govValidatorHash + , withDatum governorInputDatum + , withValue value + , withOutRef governorRef + ] , output $ - gstOutput - . withGSTDatum - . withValue value + mconcat + [ gstOutput + , withGSTDatum + , withValue value + ] ] -------------------------------------------------------------------------------- @@ -162,7 +166,7 @@ mockEffectValidator :: ClosedTerm PValidator mockEffectValidator = noOpValidator authorityTokenSymbol mockEffectValidatorHash :: ValidatorHash -mockEffectValidatorHash = validatorHash $ mkValidator mockEffectValidator +mockEffectValidatorHash = validatorHash $ mkValidator def mockEffectValidator mkGATValue :: GATValidity -> Integer -> Value mkGATValue NoGAT _ = mempty @@ -187,11 +191,15 @@ mkMockEffectBuilder ps = in mconcat [ mint burnt , input $ - script mockEffectValidatorHash - . withValue inputValue + mconcat + [ script mockEffectValidatorHash + , withValue inputValue + ] , output $ - script mockEffectValidatorHash - . withValue outputValue + mconcat + [ script mockEffectValidatorHash + , withValue outputValue + ] ] -------------------------------------------------------------------------------- diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 2039f562..2ef3ff72 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -321,14 +321,18 @@ mkProposalBuilder ps = value = sortValue $ minAda <> pst in mconcat [ input $ - script proposalValidatorHash - . withOutRef proposalRef - . withDatum (mkProposalInputDatum ps) - . withValue value + mconcat + [ script proposalValidatorHash + , withOutRef proposalRef + , withDatum (mkProposalInputDatum ps) + , withValue value + ] , output $ - script proposalValidatorHash - . withDatum (mkProposalOutputDatum ps) - . withValue value + mconcat + [ script proposalValidatorHash + , withDatum (mkProposalOutputDatum ps) + , withValue value + ] ] {- | The proposal redeemer used to spend the proposal UTXO, which is always @@ -400,14 +404,18 @@ mkStakeBuilder ps = in mconcat [ withSig , input $ - script stakeValidatorHash - . withOutRef (mkStakeRef idx) - . withValue perStakeValue - . withDatum i + mconcat + [ script stakeValidatorHash + , withOutRef (mkStakeRef idx) + , withValue perStakeValue + , withDatum i + ] , output $ - script stakeValidatorHash - . withValue perStakeValue - . withDatum o + mconcat + [ script stakeValidatorHash + , withValue perStakeValue + , withDatum o + ] ] in mconcat $ zipWith3 @@ -457,15 +465,19 @@ mkGovernorBuilder ps = value = sortValue $ gst <> minAda in mconcat [ input $ - script govValidatorHash - . withValue value - . withOutRef governorRef - . withDatum governorInputDatum + mconcat + [ script govValidatorHash + , withValue value + , withOutRef governorRef + , withDatum governorInputDatum + ] , output $ - script govValidatorHash - . withValue value - . withOutRef governorRef - . withDatum (mkGovernorOutputDatum ps) + mconcat + [ script govValidatorHash + , withValue value + , withOutRef governorRef + , withDatum (mkGovernorOutputDatum ps) + ] ] {- | The proposal redeemer used to spend the governor UTXO, which is always @@ -501,9 +513,11 @@ mkAuthorityTokenBuilder (AuthorityTokenParameters es mdt invalidTokenName) = in mconcat [ mint minted , output $ - script vh - . maybe id withDatum mdt - . withValue value + mconcat + [ script vh + , maybe mempty withDatum mdt + , withValue value + ] ] -- | The redeemer used while running the authority token policy. diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index 04535339..69704973 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -162,15 +162,19 @@ cosign ps = builder else stakeDatum in mconcat [ input $ - script stakeValidatorHash - . withValue stakeValue - . withDatum stakeDatum - . withTxId stakeTxRef - . withOutRef (mkStakeRef refIdx) + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum stakeDatum + , withTxId stakeTxRef + , withOutRef (mkStakeRef refIdx) + ] , output $ - script stakeValidatorHash - . withValue stakeValue - . withDatum stakeOutputDatum + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum stakeOutputDatum + ] , signedWith stakeDatum.owner ] ) @@ -189,15 +193,19 @@ cosign ps = builder proposalBuilder = mconcat [ input $ - script proposalValidatorHash - . withValue pst - . withDatum proposalInputDatum - . withTxId proposalTxRef - . withOutRef proposalRef + mconcat + [ script proposalValidatorHash + , withValue pst + , withDatum proposalInputDatum + , withTxId proposalTxRef + , withOutRef proposalRef + ] , output $ - script proposalValidatorHash - . withValue (sortValue (pst <> minAda)) - . withDatum proposalOutputDatum + mconcat + [ script proposalValidatorHash + , withValue (sortValue (pst <> minAda)) + , withDatum proposalOutputDatum + ] ] validTimeRange :: POSIXTimeRange diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index 4dd15e2a..e962f005 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -302,29 +302,39 @@ createProposal ps = builder , --- timeRange $ mkTimeRange ps , input $ - script govValidatorHash - . withValue governorValue - . withDatum governorInputDatum - . withOutRef governorRef + mconcat + [ script govValidatorHash + , withValue governorValue + , withDatum governorInputDatum + , withOutRef governorRef + ] , output $ - script govValidatorHash - . withValue governorValue - . withDatum (mkGovernorOutputDatum ps) + mconcat + [ script govValidatorHash + , withValue governorValue + , withDatum (mkGovernorOutputDatum ps) + ] , --- input $ - script stakeValidatorHash - . withValue stakeValue - . withDatum (mkStakeInputDatum ps) - . withOutRef stakeRef + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum (mkStakeInputDatum ps) + , withOutRef stakeRef + ] , output $ - script stakeValidatorHash - . withValue stakeValue - . withDatum (mkStakeOutputDatum ps) + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum (mkStakeOutputDatum ps) + ] , --- output $ - script proposalValidatorHash - . withValue proposalValue - . withDatum (mkProposalOutputDatum ps) + mconcat + [ script proposalValidatorHash + , withValue proposalValue + , withDatum (mkProposalOutputDatum ps) + ] ] -------------------------------------------------------------------------------- diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index a664d4e2..09c1db0a 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -257,14 +257,18 @@ unlockStake ps = ( \((i, o), idx) -> mconcat [ input $ - script proposalValidatorHash - . withValue pst - . withDatum i - . withOutRef (mkProposalRef idx) + mconcat + [ script proposalValidatorHash + , withValue pst + , withDatum i + , withOutRef (mkProposalRef idx) + ] , output $ - script proposalValidatorHash - . withValue (sortValue $ pst <> minAda) - . withDatum o + mconcat + [ script proposalValidatorHash + , withValue (sortValue $ pst <> minAda) + , withDatum o + ] ] ) (zip pIODatums [0 ..]) @@ -285,14 +289,18 @@ unlockStake ps = stakes = mconcat [ input $ - script stakeValidatorHash - . withValue stakeValue - . withDatum sInDatum - . withOutRef stakeRef + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum sInDatum + , withOutRef stakeRef + ] , output $ - script stakeValidatorHash - . withValue stakeValue - . withDatum sOutDatum + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum sOutDatum + ] ] builder = diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index dd4f6613..b1b1835c 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -219,23 +219,31 @@ vote params = , signedWith signer , timeRange validTimeRange , input $ - script proposalValidatorHash - . withValue pst - . withDatum proposalInputDatum - . withOutRef proposalRef + mconcat + [ script proposalValidatorHash + , withValue pst + , withDatum proposalInputDatum + , withOutRef proposalRef + ] , input $ - script stakeValidatorHash - . withValue stakeValue - . withDatum stakeInputDatum - . withOutRef stakeRef + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum stakeInputDatum + , withOutRef stakeRef + ] , output $ - script proposalValidatorHash - . withValue pst - . withDatum proposalOutputDatum + mconcat + [ script proposalValidatorHash + , withValue pst + , withDatum proposalOutputDatum + ] , output $ - script stakeValidatorHash - . withValue stakeValue - . withDatum stakeOutputDatum + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum stakeOutputDatum + ] ] in builder diff --git a/agora-specs/Sample/Shared.hs b/agora-specs/Sample/Shared.hs index 8e6c476e..a08891a5 100644 --- a/agora-specs/Sample/Shared.hs +++ b/agora-specs/Sample/Shared.hs @@ -141,10 +141,10 @@ governor = Governor oref gt mc mc = 20 govPolicy :: MintingPolicy -govPolicy = mkMintingPolicy (governorPolicy governor) +govPolicy = mkMintingPolicy def (governorPolicy governor) govValidator :: Validator -govValidator = mkValidator (governorValidator governor) +govValidator = mkValidator def (governorValidator governor) govSymbol :: CurrencySymbol govSymbol = mintingPolicySymbol govPolicy @@ -239,7 +239,7 @@ gatCs :: CurrencySymbol gatCs = "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049" trValidator :: Validator -trValidator = mkValidator (treasuryValidator gatCs) +trValidator = mkValidator def (treasuryValidator gatCs) -- | `ScriptCredential` used for the dummy treasury validator. trCredential :: Credential @@ -251,7 +251,7 @@ gatTn = validatorHashToTokenName $ validatorHash mockTrEffect -- | Mock treasury effect script, used for testing. mockTrEffect :: Validator -mockTrEffect = mkValidator $ noOpValidator gatCs +mockTrEffect = mkValidator def $ noOpValidator gatCs -- | Mock treasury effect validator hash mockTrEffectHash :: ValidatorHash diff --git a/agora-specs/Sample/Stake.hs b/agora-specs/Sample/Stake.hs index ee60d447..9348260e 100644 --- a/agora-specs/Sample/Stake.hs +++ b/agora-specs/Sample/Stake.hs @@ -26,6 +26,7 @@ import Agora.Stake ( StakeDatum (StakeDatum, stakedAmount), ) import Agora.Stake.Scripts (stakeValidator) +import Data.Default (def) import Data.Tagged (Tagged, untag) import Plutarch.Api.V1 (mkValidator, validatorHash) import Plutarch.Context ( @@ -69,7 +70,10 @@ import Sample.Shared ( -- | 'TokenName' that represents the hash of the 'Stake' validator. validatorHashTN :: TokenName -validatorHashTN = let ValidatorHash vh = validatorHash (mkValidator $ stakeValidator stake) in TokenName vh +validatorHashTN = + let validator = mkValidator def $ stakeValidator stake + ValidatorHash vh = validatorHash validator + in TokenName vh -- | This script context should be a valid transaction. stakeCreation :: ScriptContext @@ -85,9 +89,11 @@ stakeCreation = , signedWith signer , mint st , output $ - script stakeValidatorHash - . withValue (st <> Value.singleton "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" "LQ" 424242424242) - . withDatum datum + mconcat + [ script stakeValidatorHash + , withValue (st <> Value.singleton "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" "LQ" 424242424242) + , withDatum datum + ] , withMinting stakeSymbol ] in buildMintingUnsafe builder @@ -143,14 +149,18 @@ stakeDepositWithdraw config = , signedWith signer , mint st , input $ - script stakeValidatorHash - . withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeBefore.stakedAmount)) - . withDatum stakeAfter - . withOutRef stakeRef + mconcat + [ script stakeValidatorHash + , withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeBefore.stakedAmount)) + , withDatum stakeAfter + , withOutRef stakeRef + ] , output $ - script stakeValidatorHash - . withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeAfter.stakedAmount)) - . withDatum stakeAfter + mconcat + [ script stakeValidatorHash + , withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeAfter.stakedAmount)) + , withDatum stakeAfter + ] , withSpendingOutRef stakeRef ] in buildSpendingUnsafe builder diff --git a/agora-specs/Sample/Stake/SetDelegate.hs b/agora-specs/Sample/Stake/SetDelegate.hs index cf46e2a8..4549600d 100644 --- a/agora-specs/Sample/Stake/SetDelegate.hs +++ b/agora-specs/Sample/Stake/SetDelegate.hs @@ -129,14 +129,18 @@ setDelegate ps = buildSpendingUnsafe builder [ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" , signedWith signer , input $ - script stakeValidatorHash - . withValue stakeValue - . withDatum stakeInput - . withOutRef stakeRef + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum stakeInput + , withOutRef stakeRef + ] , output $ - script stakeValidatorHash - . withValue stakeValue - . withDatum stakeOutput + mconcat + [ script stakeValidatorHash + , withValue stakeValue + , withDatum stakeOutput + ] , withSpendingOutRef stakeRef ] diff --git a/agora-specs/Sample/Treasury.hs b/agora-specs/Sample/Treasury.hs index 2c3c9027..f314509e 100644 --- a/agora-specs/Sample/Treasury.hs +++ b/agora-specs/Sample/Treasury.hs @@ -19,7 +19,6 @@ module Sample.Treasury ( import Plutarch.Context ( MintingBuilder, - UTXO, buildMintingUnsafe, credential, input, @@ -57,11 +56,12 @@ import Sample.Shared ( baseCtxBuilder :: MintingBuilder baseCtxBuilder = - let treasury :: UTXO -> UTXO - treasury = - credential trCredential - . withValue minAda - . withTxId "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049" + let treasury = + mconcat + [ credential trCredential + , withValue minAda + , withTxId "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049" + ] in mconcat [ txId "73475cb40a568e8da8a045ced110137e159f890ac4da883b6b17dc651b3a8049" , signedWith signer @@ -81,9 +81,11 @@ validCtx = mconcat [ baseCtxBuilder , input $ - script mockTrEffectHash - . withValue (Value.singleton gatCs gatTn 1 <> minAda) - . withTxId "52b67b60260da3937510ad545c7f46f8d9915bd27e1082e76947fb309f913bd3" + mconcat + [ script mockTrEffectHash + , withValue (Value.singleton gatCs gatTn 1 <> minAda) + , withTxId "52b67b60260da3937510ad545c7f46f8d9915bd27e1082e76947fb309f913bd3" + ] ] in buildMintingUnsafe builder @@ -122,8 +124,10 @@ trCtxGATNameNotAddress = mconcat [ baseCtxBuilder , input $ - script wrongEffHash - . withValue (Value.singleton gatCs gatTn 1 <> minAda) - . withTxId "52b67b60260da3937510ad545c7f46f8d9915bd27e1082e76947fb309f913bd3" + mconcat + [ script wrongEffHash + , withValue (Value.singleton gatCs gatTn 1 <> minAda) + , withTxId "52b67b60260da3937510ad545c7f46f8d9915bd27e1082e76947fb309f913bd3" + ] ] in buildMintingUnsafe builder diff --git a/agora-specs/Spec/AuthorityToken.hs b/agora-specs/Spec/AuthorityToken.hs index 93d7beab..909cbce5 100644 --- a/agora-specs/Spec/AuthorityToken.hs +++ b/agora-specs/Spec/AuthorityToken.hs @@ -10,7 +10,8 @@ Tests for Authority token functions module Spec.AuthorityToken (specs) where import Agora.AuthorityToken (singleAuthorityTokenBurned) -import Plutarch (ClosedTerm, POpaque, compile, perror, popaque) +import Plutarch (ClosedTerm, POpaque, perror, popaque) +import Plutarch.Extra.Compile (mustCompile) import Plutarch.Unsafe (punsafeCoerce) import PlutusLedgerApi.V1 ( Address (Address), @@ -60,7 +61,7 @@ singleAuthorityTokenBurnedTest mint outs = actual (popaque (pconstant ())) perror - in compile s + in mustCompile s -- | The SpecificationTree exported by this module. specs :: [SpecificationTree] diff --git a/agora-testlib/Test/Specification.hs b/agora-testlib/Test/Specification.hs index 2594b010..34a03351 100644 --- a/agora-testlib/Test/Specification.hs +++ b/agora-testlib/Test/Specification.hs @@ -52,6 +52,7 @@ module Test.Specification ( import Plutarch.Api.V1 (PMintingPolicy, PValidator) import Plutarch.Builtin (pforgetData) import Plutarch.Evaluate (evalScript) +import Plutarch.Extra.Compile (mustCompile) import Plutarch.Lift (PUnsafeLiftDecl (PLifted)) import PlutusLedgerApi.V1 (Script, ScriptContext) import PlutusTx.IsData qualified as PlutusTx (ToData) @@ -164,7 +165,7 @@ policySucceedsWith :: SpecificationTree policySucceedsWith tag policy redeemer scriptContext = scriptSucceeds tag $ - compile + mustCompile ( policy # pforgetData (pconstantData redeemer) # pconstant scriptContext @@ -182,7 +183,7 @@ policyFailsWith :: SpecificationTree policyFailsWith tag policy redeemer scriptContext = scriptFails tag $ - compile + mustCompile ( policy # pforgetData (pconstantData redeemer) # pconstant scriptContext @@ -203,7 +204,7 @@ validatorSucceedsWith :: SpecificationTree validatorSucceedsWith tag validator datum redeemer scriptContext = scriptSucceeds tag $ - compile + mustCompile ( validator # pforgetData (pconstantData datum) # pforgetData (pconstantData redeemer) @@ -225,7 +226,7 @@ validatorFailsWith :: SpecificationTree validatorFailsWith tag validator datum redeemer scriptContext = scriptFails tag $ - compile + mustCompile ( validator # pforgetData (pconstantData datum) # pforgetData (pconstantData redeemer) diff --git a/agora-testlib/Test/Util.hs b/agora-testlib/Test/Util.hs index 3d2c8cbf..d0b0a7bb 100644 --- a/agora-testlib/Test/Util.hs +++ b/agora-testlib/Test/Util.hs @@ -19,7 +19,6 @@ module Test.Util ( scriptCredentials, validatorHashes, groupsOfN, - withOptional, mkSpending, mkMinting, CombinableBuilder, @@ -37,7 +36,6 @@ import Data.ByteString.Lazy qualified as ByteString.Lazy import Data.List (sortOn) import Plutarch.Context ( Builder, - UTXO, buildMintingUnsafe, buildSpendingUnsafe, withMinting, @@ -182,15 +180,6 @@ groupsOfN n xs = -------------------------------------------------------------------------------- --- | Optionally apply a modifier to the given 'UTXO'. -withOptional :: - (a -> UTXO -> UTXO) -> - Maybe a -> - UTXO -> - UTXO -withOptional f (Just b) = f b -withOptional _ _ = id - {- | Given the builder generator and the parameters, create a 'ScriptContext' that spends the UTXO that referenced by the given 'TxOutRef'. -} diff --git a/agora/Agora/AuthorityToken.hs b/agora/Agora/AuthorityToken.hs index 448a215e..630c07dd 100644 --- a/agora/Agora/AuthorityToken.hs +++ b/agora/Agora/AuthorityToken.hs @@ -12,7 +12,6 @@ module Agora.AuthorityToken ( AuthorityToken (..), ) where -import GHC.Generics qualified as GHC import Plutarch.Api.V1 ( AmountGuarantees, KeyGuarantees, @@ -53,7 +52,7 @@ newtype AuthorityToken = AuthorityToken } deriving stock ( -- | @since 0.1.0 - GHC.Generic + Generic ) -------------------------------------------------------------------------------- @@ -105,7 +104,7 @@ authorityTokensValidIn = phoistAcyclic $ singleAuthorityTokenBurned :: forall (keys :: KeyGuarantees) (amounts :: AmountGuarantees) (s :: S). Term s PCurrencySymbol -> - Term s (PBuiltinList (PAsData PTxInInfo)) -> + Term s (PBuiltinList PTxInInfo) -> Term s (PValue keys amounts) -> Term s PBool singleAuthorityTokenBurned gatCs inputs mint = unTermCont $ do @@ -120,7 +119,7 @@ singleAuthorityTokenBurned gatCs inputs mint = unTermCont $ do pall # plam ( \txInInfo' -> unTermCont $ do - PTxInInfo txInInfo <- pmatchC (pfromData txInInfo') + PTxInInfo txInInfo <- pmatchC txInInfo' let txOut' = pfield @"resolved" # txInInfo pure $ authorityTokensValidIn # gatCs # pfromData txOut' ) @@ -156,9 +155,7 @@ authorityTokenPolicy params = pguardC "All outputs only emit valid GATs" $ pall # plam - ( (authorityTokensValidIn # ownSymbol #) - . pfromData - ) + (authorityTokensValidIn # ownSymbol #) # txInfo.outputs pure $ popaque $ pconstant () ) diff --git a/agora/Agora/Effect.hs b/agora/Agora/Effect.hs index ad4776dc..84557cdb 100644 --- a/agora/Agora/Effect.hs +++ b/agora/Agora/Effect.hs @@ -23,7 +23,7 @@ import PlutusLedgerApi.V1.Value (CurrencySymbol) -} makeEffect :: forall (datum :: PType). - (PIsData datum, PTryFrom PData (PAsData datum)) => + (PTryFrom PData datum) => CurrencySymbol -> (forall (s :: S). Term s PCurrencySymbol -> Term s datum -> Term s PTxOutRef -> Term s (PAsData PTxInfo) -> Term s POpaque) -> ClosedTerm PValidator @@ -34,7 +34,7 @@ makeEffect gatCs' f = -- convert input datum, PData, into desierable type -- the way this conversion is performed should be defined -- by PTryFrom for each datum in effect script. - (pfromData -> datum', _) <- ptryFromC datum + (datum', _) <- ptryFromC datum -- ensure purpose is Spending. PSpending txOutRef <- pmatchC $ pfromData ctx.purpose diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index 433b27c3..8e3383a0 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -30,8 +30,7 @@ import Agora.Governor.Scripts ( governorSTAssetClassFromGovernor, ) import Agora.Plutarch.Orphans () -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, I (I)) +import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PTxOutRef, PValidator, @@ -42,7 +41,6 @@ import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pvalueOf) import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, - PIsDataReprInstances (PIsDataReprInstances), ) import Plutarch.Extra.Maybe ( passertPDJust, @@ -66,8 +64,16 @@ data MutateGovernorDatum = MutateGovernorDatum , newDatum :: GovernorDatum -- ^ The new settings for the governor. } - deriving stock (Show, GHC.Generic) - deriving anyclass (Generic) + deriving stock + ( -- | @since 0.1.ç + Show + , -- | @since 0.1.ç + Generic + ) + deriving anyclass + ( -- | @since 0.1.ç + SOP.Generic + ) PlutusTx.makeIsDataIndexed ''MutateGovernorDatum [('MutateGovernorDatum, 0)] @@ -88,19 +94,13 @@ newtype PMutateGovernorDatum (s :: S) ) ) deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -109,7 +109,9 @@ newtype PMutateGovernorDatum (s :: S) , -- | @since 0.1.0 PEq ) - via (PIsDataReprInstances PMutateGovernorDatum) + +instance DerivePlutusType PMutateGovernorDatum where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 instance PUnsafeLiftDecl PMutateGovernorDatum where type PLifted PMutateGovernorDatum = MutateGovernorDatum @@ -118,7 +120,7 @@ instance PUnsafeLiftDecl PMutateGovernorDatum where type PLifted PMutateGovernor deriving via (DerivePConstantViaData MutateGovernorDatum PMutateGovernorDatum) instance (PConstantDecl MutateGovernorDatum) -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PMutateGovernorDatum) instance PTryFrom PData (PAsData PMutateGovernorDatum) +deriving anyclass instance PTryFrom PData PMutateGovernorDatum -------------------------------------------------------------------------------- @@ -195,7 +197,7 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) plength # pfromData txInfoF.outputs #== 1 let govAddress = pfield @"address" #$ govInInfo.resolved - govOutput' = pfromData $ phead # pfromData txInfoF.outputs + govOutput' = phead # pfromData txInfoF.outputs govOutput <- pletFieldsC @'["address", "value", "datumHash"] govOutput' @@ -208,9 +210,8 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) let governorOutputDatumHash = passertPDJust # "Governor output doesn't have datum" # govOutput.datumHash governorOutputDatum = - pfromData @PGovernorDatum $ - passertPJust # "Governor output datum not found" - #$ ptryFindDatum # governorOutputDatumHash # txInfoF.datums + passertPJust @PGovernorDatum # "Governor output datum not found" + #$ ptryFindDatum # governorOutputDatumHash # txInfoF.datums -- Ensure the output governor datum is what we want. pguardC "Unexpected governor datum" $ datumF.newDatum #== governorOutputDatum diff --git a/agora/Agora/Effect/NoOp.hs b/agora/Agora/Effect/NoOp.hs index 0ff1dc68..4027a6cd 100644 --- a/agora/Agora/Effect/NoOp.hs +++ b/agora/Agora/Effect/NoOp.hs @@ -7,11 +7,9 @@ A dumb effect that only burns its GAT. -} module Agora.Effect.NoOp (noOpValidator, PNoOp) where -import Control.Applicative (Const) - import Agora.Effect (makeEffect) +import Agora.Plutarch.Orphans () import Plutarch.Api.V1 (PValidator) -import Plutarch.TryFrom (PTryFrom (..)) import PlutusLedgerApi.V1.Value (CurrencySymbol) {- | Dummy datum for NoOp effect. @@ -19,22 +17,23 @@ import PlutusLedgerApi.V1.Value (CurrencySymbol) @since 0.1.0 -} newtype PNoOp (s :: S) = PNoOp (Term s PUnit) - deriving + deriving stock + ( -- | @since 0.2.0 + Generic + ) + deriving anyclass ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData ) - via (DerivePNewtype PNoOp PUnit) --- | @since 0.1.0 -instance PTryFrom PData (PAsData PNoOp) where - type PTryFromExcess PData (PAsData PNoOp) = Const () - ptryFrom' _ cont = - -- JUSTIFICATION: - -- We don't care anything about data. - -- It should always be reduced to Unit. - cont (pdata $ pcon $ PNoOp (pconstant ()), ()) +-- | @since 0.2.0 +instance DerivePlutusType PNoOp where + type DPTStrat _ = PlutusTypeNewtype + +-- | @since 0.2.0 +instance PTryFrom PData (PAsData PNoOp) {- | Dummy effect which can only burn its GAT. @@ -42,4 +41,4 @@ instance PTryFrom PData (PAsData PNoOp) where -} noOpValidator :: CurrencySymbol -> ClosedTerm PValidator noOpValidator curr = makeEffect curr $ - \_ (_datum :: Term s PNoOp) _ _ -> popaque (pconstant ()) + \_ (_datum :: Term s (PAsData PNoOp)) _ _ -> popaque (pconstant ()) diff --git a/agora/Agora/Effect/TreasuryWithdrawal.hs b/agora/Agora/Effect/TreasuryWithdrawal.hs index 3c185075..53e13361 100644 --- a/agora/Agora/Effect/TreasuryWithdrawal.hs +++ b/agora/Agora/Effect/TreasuryWithdrawal.hs @@ -15,8 +15,7 @@ module Agora.Effect.TreasuryWithdrawal ( import Agora.Effect (makeEffect) import Agora.Plutarch.Orphans () -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, I (I)) +import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( AmountGuarantees (Positive), KeyGuarantees (Sorted), @@ -31,7 +30,6 @@ import "plutarch" Plutarch.Api.V1.Value (pnormalize) import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, - PIsDataReprInstances (..), ) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) @@ -57,11 +55,11 @@ data TreasuryWithdrawalDatum = TreasuryWithdrawalDatum ( -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic ) deriving anyclass ( -- | @since 0.1.0 - Generic + SOP.Generic ) -- | @since 0.1.0 @@ -86,23 +84,21 @@ newtype PTreasuryWithdrawalDatum (s :: S) ) deriving stock ( -- | @since 0.1.0 - GHC.Generic + Generic ) deriving anyclass ( -- | @since 0.1.0 - Generic + SOP.Generic , -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PDataFields ) - via PIsDataReprInstances PTreasuryWithdrawalDatum + +instance DerivePlutusType PTreasuryWithdrawalDatum where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 instance PUnsafeLiftDecl PTreasuryWithdrawalDatum where @@ -115,10 +111,7 @@ deriving via (PConstantDecl TreasuryWithdrawalDatum) -- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PTreasuryWithdrawalDatum) - instance - PTryFrom PData (PAsData PTreasuryWithdrawalDatum) +instance PTryFrom PData PTreasuryWithdrawalDatum {- | Withdraws given list of values to specific target addresses. It can be evoked by burning GAT. The transaction should have correct @@ -150,17 +143,17 @@ treasuryWithdrawalValidator currSymbol = makeEffect currSymbol $ pletC $ pmap # plam - ( \(pfromData -> txOut') -> unTermCont $ do + ( \txOut' -> unTermCont $ do txOut <- pletFieldsC @'["address", "value"] $ txOut' let cred = pfield @"credential" # pfromData txOut.address pure . pdata $ ptuple # cred # txOut.value ) - # txInfo.outputs + # pfromData txInfo.outputs inputValues <- pletC $ pmap # plam - ( \((pfield @"resolved" #) . pfromData -> txOut') -> unTermCont $ do + ( \((pfield @"resolved" #) -> txOut') -> unTermCont $ do txOut <- pletFieldsC @'["address", "value"] $ txOut' let cred = pfield @"credential" # pfromData txOut.address pure . pdata $ ptuple # cred # txOut.value @@ -189,7 +182,7 @@ treasuryWithdrawalValidator currSymbol = makeEffect currSymbol $ pnot #$ pany # plam ( \x -> - effInput.address #== pfield @"address" # pfromData x + effInput.address #== pfield @"address" # x ) # pfromData txInfo.outputs inputsAreOnlyTreasuriesOrCollateral = diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index ae7acef1..9f53b7fe 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -40,18 +40,16 @@ import Agora.Proposal.Time ( ) import Agora.SafeMoney (GTTag) import Data.Tagged (Tagged (..)) -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, I (I)) +import Generics.SOP qualified as SOP import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, - PIsDataReprInstances (PIsDataReprInstances), ) import Plutarch.Extra.IsData ( DerivePConstantViaEnum (..), EnumIsData (..), + PlutusTypeEnumData, ) -import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pletFieldsC) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import PlutusLedgerApi.V1 (TxOutRef) @@ -78,7 +76,12 @@ data GovernorDatum = GovernorDatum -- ^ The maximum number of unfinished proposals that a stake is allowed to be -- associated to. } - deriving stock (Show, GHC.Generic) + deriving stock + ( -- | @since 0.1.0 + Show + , -- | @since 0.1.0 + Generic + ) -- | @since 0.1.0 PlutusTx.makeIsDataIndexed ''GovernorDatum [('GovernorDatum, 0)] @@ -105,7 +108,7 @@ data GovernorRedeemer ( -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic , -- | @since 0.2.0 Enum , -- | @since 0.2.0 @@ -113,7 +116,7 @@ data GovernorRedeemer ) deriving anyclass ( -- | @since 0.2.0 - Generic + SOP.Generic ) deriving ( -- | @since 0.1.0 @@ -136,7 +139,12 @@ data Governor = Governor -- ^ Arbitrary limit for maximum amount of cosigners on a proposal. -- See `Agora.Proposal.proposalDatumValid`. } - deriving stock (GHC.Generic) + deriving stock + ( -- | @since 0.1.0 + Generic + , -- | @since 0.2.0 + Show + ) -------------------------------------------------------------------------------- @@ -158,18 +166,14 @@ newtype PGovernorDatum (s :: S) = PGovernorDatum ) } deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr + SOP.Generic ) - deriving + deriving anyclass ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 @@ -179,7 +183,10 @@ newtype PGovernorDatum (s :: S) = PGovernorDatum , -- | @since 0.1.0 PEq ) - via PIsDataReprInstances PGovernorDatum + +-- | @since 0.2.0 +instance DerivePlutusType PGovernorDatum where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 instance PUnsafeLiftDecl PGovernorDatum where type PLifted PGovernorDatum = GovernorDatum @@ -188,29 +195,41 @@ instance PUnsafeLiftDecl PGovernorDatum where type PLifted PGovernorDatum = Gove deriving via (DerivePConstantViaData GovernorDatum PGovernorDatum) instance (PConstantDecl GovernorDatum) -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PGovernorDatum) instance PTryFrom PData (PAsData PGovernorDatum) +deriving anyclass instance PTryFrom PData PGovernorDatum {- | Plutarch-level version of 'GovernorRedeemer'. @since 0.1.0 -} -newtype PGovernorRedeemer (s :: S) - = PGovernorRedeemer (Term s PInteger) +data PGovernorRedeemer (s :: S) + = PCreateProposal + | PMintGATs + | PMutateGovernor deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic + , -- | @since 0.2.0 + Enum + , -- | @since 0.2.0 + Bounded ) - deriving + deriving anyclass ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData + , -- | @since 0.2.0 + PEq ) - via (DerivePNewtype' PGovernorRedeemer) + +-- | @since 0.2.0 +instance PTryFrom PData (PAsData PGovernorRedeemer) + +-- | @since 0.2.0 +instance DerivePlutusType PGovernorRedeemer where + type DPTStrat _ = PlutusTypeEnumData -- | @since 0.1.0 instance PUnsafeLiftDecl PGovernorRedeemer where type PLifted PGovernorRedeemer = GovernorRedeemer @@ -255,9 +274,9 @@ pisGovernorDatumValid = phoistAcyclic $ foldr1 (#&&) [ ptraceIfFalse "thresholds valid" $ - pisProposalThresholdsValid # datumF.proposalThresholds + pisProposalThresholdsValid # pfromData datumF.proposalThresholds , ptraceIfFalse "timings valid" $ - pisProposalTimingConfigValid # datumF.proposalTimings + pisProposalTimingConfigValid # pfromData datumF.proposalTimings , ptraceIfFalse "time range valid" $ pisMaxTimeRangeWidthValid # datumF.createProposalTimeRangeMaxWidth ] diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 7bed9b5e..db659118 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -74,6 +74,7 @@ import Agora.Utils ( validatorHashToAddress, validatorHashToTokenName, ) +import Data.Default (def) import Plutarch.Api.V1 ( PAddress, PCurrencySymbol, @@ -93,15 +94,6 @@ import Plutarch.Api.V1.AssetClass ( passetClass, passetClassValueOf, ) -import Plutarch.Extra.IsData (pmatchEnumFromData) -import Plutarch.Extra.List (pfirstJust) -import Plutarch.Extra.Map ( - plookup, - plookup', - ) - --------------------------------------------------------------------------------- - import Plutarch.Api.V1.ScriptContext ( pfindOutputsToAddress, pfindTxInByTxOutRef, @@ -112,6 +104,12 @@ import Plutarch.Api.V1.ScriptContext ( ) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (phasOnlyOneTokenOfCurrencySymbol, psymbolValueOf) import Plutarch.Extra.Field (pletAllC) +import Plutarch.Extra.IsData (pmatchEnumFromData) +import Plutarch.Extra.List (pfirstJust) +import Plutarch.Extra.Map ( + plookup, + plookup', + ) import Plutarch.Extra.Maybe (passertPDJust, passertPJust, pisDJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) @@ -177,12 +175,12 @@ governorPolicy gov = # "Governor output not found" #$ pfind # plam - ( \((pfield @"value" #) . pfromData -> value) -> + ( \((pfield @"value" #) -> value) -> psymbolValueOf # ownSymbol # value #== 1 ) # pfromData txInfoF.outputs - let datumHash = pfield @"datumHash" # pfromData govOutput + let datumHash = pfield @"datumHash" # govOutput datum = mustFindDatum' @PGovernorDatum # datumHash # txInfoF.datums pguardC "Governor output datum valid" $ pisGovernorDatumValid # datum @@ -292,7 +290,7 @@ governorValidator gov = ownInputF <- pletFieldsC @'["address", "value"] ownInput let ownAddress = pfromData $ ownInputF.address - (pfromData -> (oldGovernorDatum :: Term _ PGovernorDatum), _) <- ptryFromC datum' + (oldGovernorDatum :: Term _ PGovernorDatum, _) <- ptryFromC datum' oldGovernorDatumF <- pletAllC oldGovernorDatum -- Check that GST will be returned to the governor. @@ -314,9 +312,8 @@ governorValidator gov = passertPDJust # "Governor output doesn't have datum" # ownOutput.datumHash newGovernorDatum <- pletC $ - pfromData $ - passertPJust # "Ouput governor state datum not found" - #$ ptryFindDatum # outputGovernorStateDatumHash # txInfoF.datums + passertPJust # "Ouput governor state datum not found" + #$ ptryFindDatum # outputGovernorStateDatumHash # txInfoF.datums pguardC "New datum is valid" $ pisGovernorDatumValid # newGovernorDatum @@ -368,9 +365,9 @@ governorValidator gov = pguardC "Stake input doesn't have datum" $ pisDJust # stakeInputF.datumHash - let stakeInputDatum = mustFindDatum' @PStakeDatum # stakeInputF.datumHash # txInfoF.datums + let stakeInputDatum = mustFindDatum' @(PAsData PStakeDatum) # stakeInputF.datumHash # txInfoF.datums - stakeInputDatumF <- pletAllC stakeInputDatum + stakeInputDatumF <- pletAllC $ pto $ pfromData stakeInputDatum pguardC "Proposals created by the stake must not exceed the number stored in the governor." $ pnumCreatedProposals # stakeInputDatumF.lockedBy @@ -400,11 +397,11 @@ governorValidator gov = proposalOutputDatum' <- pletC $ - mustFindDatum' @PProposalDatum + mustFindDatum' @(PAsData PProposalDatum) # outputDatumHash # txInfoF.datums - proposalOutputDatum <- pletAllC proposalOutputDatum' + proposalOutputDatum <- pletAllC $ pto $ pfromData proposalOutputDatum' let expectedStartingTime = createProposalStartingTime @@ -462,7 +459,7 @@ governorValidator gov = #$ ptryFindDatum # stakeOutputDatumHash # txInfoF.datums stakeOutputLocks = - pfromData $ pfield @"lockedBy" # stakeOutputDatum + pfromData $ pfield @"lockedBy" #$ pto $ pfromData stakeOutputDatum -- The stake should be locked by the newly created proposal. newLock = @@ -493,29 +490,28 @@ governorValidator gov = proposalInputF <- pletFieldsC @'["datumHash"] $ pfield @"resolved" - #$ pfromData - $ passertPJust - # "Proposal input not found" - #$ pfind - # plam - ( \((pfield @"resolved" #) -> txOut) -> unTermCont $ do - txOutF <- pletFieldsC @'["address", "value"] txOut - - pure $ - psymbolValueOf # ppstSymbol # txOutF.value #== 1 - #&& txOutF.address #== pdata pproposalValidatorAddress - ) - # pfromData txInfoF.inputs + #$ passertPJust + # "Proposal input not found" + #$ pfind + # plam + ( \((pfield @"resolved" #) -> txOut) -> unTermCont $ do + txOutF <- pletFieldsC @'["address", "value"] txOut + + pure $ + psymbolValueOf # ppstSymbol # txOutF.value #== 1 + #&& txOutF.address #== pdata pproposalValidatorAddress + ) + # pfromData txInfoF.inputs proposalInputDatum <- pletC $ - mustFindDatum' @PProposalDatum + mustFindDatum' @(PAsData PProposalDatum) # proposalInputF.datumHash # txInfoF.datums proposalInputDatumF <- - pletFieldsC @'["effects", "status", "thresholds", "votes"] - proposalInputDatum + pletFieldsC @'["effects", "status", "thresholds", "votes"] $ + pto $ pfromData proposalInputDatum -- Check that the proposal state is advanced so that a proposal cannot be executed twice. @@ -552,12 +548,12 @@ governorValidator gov = pguardC "Output GATs is more than minted GATs" $ plength # outputsWithGAT #== gatCount - let gatOutputValidator' :: Term s (PMap _ PValidatorHash PDatumHash :--> PAsData PTxOut :--> PBool) + let gatOutputValidator' :: Term s (PMap _ PValidatorHash PDatumHash :--> PTxOut :--> PBool) gatOutputValidator' = phoistAcyclic $ plam - ( \effects (pfromData -> output') -> unTermCont $ do - output <- pletFieldsC @'["address", "datumHash"] $ output' + ( \effects output' -> unTermCont $ do + output <- pletFieldsC @'["address", "datumHash"] output' let scriptHash = passertPJust # "GAT receiver is not a script" @@ -644,7 +640,7 @@ governorSTSymbolFromGovernor :: Governor -> CurrencySymbol governorSTSymbolFromGovernor gov = mintingPolicySymbol policy where policy :: MintingPolicy - policy = mkMintingPolicy $ governorPolicy gov + policy = mkMintingPolicy def $ governorPolicy gov {- | Get the 'AssetClass' of GST. @@ -664,7 +660,7 @@ proposalSTSymbolFromGovernor :: Governor -> CurrencySymbol proposalSTSymbolFromGovernor gov = symbol where gstAC = governorSTAssetClassFromGovernor gov - policy = mkMintingPolicy $ proposalPolicy gstAC + policy = mkMintingPolicy def $ proposalPolicy gstAC symbol = mintingPolicySymbol policy {- | Get the 'AssetClass' of the proposal state token. @@ -683,7 +679,7 @@ proposalSTAssetClassFromGovernor gov = AssetClass (symbol, "") stakeSTSymbolFromGovernor :: Governor -> CurrencySymbol stakeSTSymbolFromGovernor gov = mintingPolicySymbol policy where - policy = mkMintingPolicy $ stakePolicy gov.gtClassRef + policy = mkMintingPolicy def $ stakePolicy gov.gtClassRef {- | Get the 'AssetClass' of the stake token. @@ -717,7 +713,7 @@ stakeValidatorHashFromGovernor :: Governor -> ValidatorHash stakeValidatorHashFromGovernor gov = validatorHash validator where params = stakeFromGovernor gov - validator = mkValidator $ stakeValidator params + validator = mkValidator def $ stakeValidator params {- | Get the 'Proposal' parameter, given the 'Governor' parameter. @@ -738,7 +734,7 @@ proposalValidatorHashFromGovernor :: Governor -> ValidatorHash proposalValidatorHashFromGovernor gov = validatorHash validator where params = proposalFromGovernor gov - validator = mkValidator $ proposalValidator params + validator = mkValidator def $ proposalValidator params {- | Get the hash of 'Agora.Proposal.proposalValidator'. @@ -747,7 +743,7 @@ proposalValidatorHashFromGovernor gov = validatorHash validator governorValidatorHash :: Governor -> ValidatorHash governorValidatorHash gov = validatorHash validator where - validator = mkValidator $ governorValidator gov + validator = mkValidator def $ governorValidator gov {- | Get the 'AuthorityToken' parameter given the 'Governor' parameter. @@ -763,5 +759,5 @@ authorityTokenFromGovernor gov = AuthorityToken $ governorSTAssetClassFromGovern authorityTokenSymbolFromGovernor :: Governor -> CurrencySymbol authorityTokenSymbolFromGovernor gov = mintingPolicySymbol policy where - policy = mkMintingPolicy $ authorityTokenPolicy params + policy = mkMintingPolicy def $ authorityTokenPolicy params params = authorityTokenFromGovernor gov diff --git a/agora/Agora/Plutarch/Orphans.hs b/agora/Agora/Plutarch/Orphans.hs index e203019c..a1ccae37 100644 --- a/agora/Agora/Plutarch/Orphans.hs +++ b/agora/Agora/Plutarch/Orphans.hs @@ -1,135 +1,15 @@ {-# OPTIONS_GHC -Wno-orphans #-} -{- FIXME: All of the following instances and - types ought to belong in either plutarch or - plutarch-extra. - - A number of these have been "stolen" from Mango's - PR: https://github.com/Plutonomicon/plutarch/pull/438/ --} - module Agora.Plutarch.Orphans () where -import Control.Arrow (first) -import Plutarch.Api.V1 (PAddress, PCredential, PCurrencySymbol, PDatumHash, PMap, PMaybeData, PPOSIXTime, PPubKeyHash, PStakingCredential, PTokenName, PTxId, PTxOutRef, PValidatorHash, PValue) -import Plutarch.Builtin (PBuiltinMap) -import Plutarch.DataRepr (PIsDataReprInstances (..)) -import Plutarch.Extra.TermCont (ptryFromC) -import Plutarch.Numeric.Additive (AdditiveSemigroup ((+))) -import Plutarch.Reducible (Reduce, Reducible) -import Plutarch.TryFrom (PTryFrom (PTryFromExcess, ptryFrom')) -import Plutarch.Unsafe (punsafeCoerce) -import Prelude hiding ((+)) - -instance Reducible (f x y) => Reducible (Flip f y x) where - type Reduce (Flip f y x) = Reduce (f x y) - -newtype Flip f a b = Flip (f b a) - --- | @since 0.1.0 -instance PTryFrom PData (PAsData b) => PTryFrom PData (PAsData (DerivePNewtype c b)) where - type - PTryFromExcess PData (PAsData (DerivePNewtype c b)) = - PTryFromExcess PData (PAsData b) - ptryFrom' d k = - ptryFrom' @_ @(PAsData b) d $ k . first punsafeCoerce - --- | @since 0.1.0 -instance PTryFrom PData (PAsData PPubKeyHash) where - type PTryFromExcess PData (PAsData PPubKeyHash) = Flip Term PPubKeyHash - ptryFrom' opq = runTermCont $ do - (wrapped :: Term _ (PAsData PByteString), unwrapped :: Term _ PByteString) <- - ptryFromC @(PAsData PByteString) opq - tcont $ \f -> pif (plengthBS # unwrapped #== 28) (f ()) (ptraceError "a PubKeyHash should be 28 bytes long") - pure (punsafeCoerce wrapped, punsafeCoerce unwrapped) - --- | @since 0.1.0 -instance AdditiveSemigroup (Term s PPOSIXTime) where - (punsafeCoerce @_ @_ @PInteger -> x) + (punsafeCoerce @_ @_ @PInteger -> y) = punsafeCoerce $ x + y - --- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype PPOSIXTime PInteger) - instance - PTryFrom PData (PAsData PPOSIXTime) - --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PTxId) - instance - PTryFrom PData (PAsData PTxId) - --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PTxOutRef) - instance - PTryFrom PData (PAsData PTxOutRef) - --- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype (PMap g k v) (PBuiltinMap k v)) - instance - ( PTryFrom PData (PAsData k) - , PTryFrom PData (PAsData v) - ) => - PTryFrom PData (PAsData (PMap g k v)) - --- | @since 0.1.0 -instance PTryFrom PData (PAsData PValidatorHash) where - type PTryFromExcess PData (PAsData PValidatorHash) = Flip Term PValidatorHash - ptryFrom' opq = runTermCont $ do - (wrapped :: Term _ (PAsData PByteString), unwrapped :: Term _ PByteString) <- - ptryFromC @(PAsData PByteString) opq - tcont $ \f -> pif (plengthBS # unwrapped #== 28) (f ()) (ptraceError "a ValidatorHash should be 28 bytes long") - pure (punsafeCoerce wrapped, punsafeCoerce unwrapped) - --- | @since 0.1.0 -instance PTryFrom PData (PAsData PDatumHash) where - type PTryFromExcess PData (PAsData PDatumHash) = Flip Term PDatumHash - ptryFrom' opq = runTermCont $ do - (wrapped :: Term _ (PAsData PByteString), unwrapped :: Term _ PByteString) <- - tcont $ ptryFrom @(PAsData PByteString) opq - tcont $ \f -> pif (plengthBS # unwrapped #== 32) (f ()) (ptraceError "a DatumHash should be 32 bytes long") - pure (punsafeCoerce wrapped, punsafeCoerce unwrapped) - --- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype PCurrencySymbol PByteString) - instance - PTryFrom PData (PAsData PCurrencySymbol) - --- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype PTokenName PByteString) - instance - PTryFrom PData (PAsData PTokenName) - --- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype (PValue k v) (PMap k PCurrencySymbol (PMap k PTokenName PInteger))) - instance - PTryFrom PData (PAsData (PValue k v)) - --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances (PMaybeData a)) - instance - PTryFrom PData (PAsData a) => PTryFrom PData (PAsData (PMaybeData a)) +import Plutarch.Api.V1 (PDatumHash) +import Plutarch.Builtin (PIsData (..)) --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PAddress) - instance - PTryFrom PData (PAsData PAddress) +-- TODO: add checks +instance PTryFrom PData (PAsData PDatumHash) --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PCredential) - instance - PTryFrom PData (PAsData PCredential) +instance PTryFrom PData (PAsData PUnit) --- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PStakingCredential) - instance - PTryFrom PData (PAsData PStakingCredential) +instance (PIsData a) => PIsData (PAsData a) where + pfromDataImpl = pfromData + pdataImpl = pdataImpl . pfromData diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 9abd9b6e..917d581a 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -39,11 +39,11 @@ module Agora.Proposal ( pisProposalThresholdsValid, ) where +import Agora.Plutarch.Orphans () import Agora.Proposal.Time (PProposalStartingTime, PProposalTimingConfig, ProposalStartingTime, ProposalTimingConfig) import Agora.SafeMoney (GTTag) import Data.Tagged (Tagged) -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, I (I)) +import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( KeyGuarantees (Unsorted), PDatumHash, @@ -52,7 +52,7 @@ import Plutarch.Api.V1 ( PValidatorHash, ) import Plutarch.Api.V1.AssocMap qualified as PAssocMap -import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields, PIsDataReprInstances (..)) +import Plutarch.DataRepr (DerivePConstantViaData (..), PDataFields) import Plutarch.Extra.Comonad (pextract) import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.Function (pbuiltinUncurry) @@ -60,13 +60,13 @@ import Plutarch.Extra.IsData ( DerivePConstantViaDataList (..), DerivePConstantViaEnum (..), EnumIsData (..), + PlutusTypeEnumData, ProductIsData (ProductIsData), ) import Plutarch.Extra.List (pfirstJust) import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map.Unsorted qualified as PUM import Plutarch.Extra.Maybe (pfromJust) -import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), @@ -92,6 +92,14 @@ import PlutusTx.AssocMap qualified as AssocMap @since 0.1.0 -} newtype ProposalId = ProposalId {proposalTag :: Integer} + deriving stock + ( -- | @since 0.1.0 + Eq + , -- | @since 0.1.0 + Show + , -- | @since 0.1.0 + Generic + ) deriving newtype ( -- | @since 0.1.0 PlutusTx.ToData @@ -100,13 +108,9 @@ newtype ProposalId = ProposalId {proposalTag :: Integer} , -- | @since 0.1.0 PlutusTx.UnsafeFromData ) - deriving stock - ( -- | @since 0.1.0 - Eq - , -- | @since 0.1.0 - Show - , -- | @since 0.1.0 - GHC.Generic + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic ) {- | Encodes a result. Typically, for a Yes/No proposal, we encode it like this: @@ -127,7 +131,7 @@ newtype ResultTag = ResultTag {getResultTag :: Integer} , -- | @since 0.1.0 Ord , -- | @since 0.1.0 - GHC.Generic + Generic ) deriving newtype ( -- | @since 0.1.0 @@ -137,6 +141,10 @@ newtype ResultTag = ResultTag {getResultTag :: Integer} , -- | @since 0.1.0 PlutusTx.UnsafeFromData ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic + ) {- | The "status" of the proposal. This is only useful for state transitions that need to happen as a result of a transaction as opposed to time-based "periods". @@ -186,7 +194,7 @@ data ProposalStatus , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic , -- | @since 0.2.0 Enum , -- | @since 0.2.0 @@ -194,7 +202,7 @@ data ProposalStatus ) deriving anyclass ( -- | @since 0.2.0 - Generic + SOP.Generic ) deriving ( -- | @since 0.1.0 @@ -230,9 +238,9 @@ data ProposalThresholds = ProposalThresholds , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic ) - deriving anyclass (Generic) + deriving anyclass (SOP.Generic) PlutusTx.makeIsDataIndexed 'ProposalThresholds [('ProposalThresholds, 0)] @@ -252,19 +260,23 @@ PlutusTx.makeIsDataIndexed 'ProposalThresholds [('ProposalThresholds, 0)] newtype ProposalVotes = ProposalVotes { getProposalVotes :: AssocMap.Map ResultTag Integer } - deriving newtype - ( -- | @since 0.1.0 - PlutusTx.ToData - , -- | @since 0.1.0 - PlutusTx.FromData - ) deriving stock ( -- | @since 0.1.0 Eq , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic + ) + deriving newtype + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic ) {- | Create a 'ProposalVotes' that has the same shape as the 'effects' field. @@ -307,9 +319,12 @@ data ProposalDatum = ProposalDatum , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic ) - deriving anyclass (Generic) deriving ( -- | @since 0.1.0 PlutusTx.ToData @@ -367,7 +382,11 @@ data ProposalRedeemer , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic ) -- | @since 0.1.0 @@ -395,7 +414,11 @@ data Proposal = Proposal , -- | @since 0.1.0 Eq , -- | @since 0.1.0 - GHC.Generic + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic ) -------------------------------------------------------------------------------- @@ -406,19 +429,33 @@ data Proposal = Proposal @since 0.1.0 -} newtype PResultTag (s :: S) = PResultTag (Term s PInteger) - deriving - ( -- | @since 0.1.0 + deriving stock + ( -- | @since 0.2.0 + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic + , -- @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PEq + , -- | @since 0.2.0 + PPartialOrd , -- | @since 0.1.0 POrd , -- | @since 0.2.0 PShow ) - via (DerivePNewtype PResultTag PInteger) + +-- | @since 0.2.0 +instance DerivePlutusType PResultTag where + type DPTStrat _ = PlutusTypeNewtype + +-- | @since 0.1.0 +instance PTryFrom PData (PAsData PResultTag) -- | @since 0.1.0 instance PUnsafeLiftDecl PResultTag where type PLifted PResultTag = ResultTag @@ -429,36 +466,38 @@ deriving via instance (PConstantDecl ResultTag) --- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype PResultTag PInteger) - instance - PTryFrom PData (PAsData PResultTag) - {- | Plutarch-level version of 'PProposalId'. @since 0.1.0 -} newtype PProposalId (s :: S) = PProposalId (Term s PInteger) - deriving - ( -- | @since 0.1.0 + deriving stock + ( -- | @since 0.2.0 + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PEq + , -- | @since 0.2.0 + PPartialOrd , -- | @since 0.1.0 POrd , -- | @since 0.2.0 PShow ) - via (DerivePNewtype PProposalId PInteger) + +-- | @since 0.2.0 +instance DerivePlutusType PProposalId where + type DPTStrat _ = PlutusTypeNewtype -- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype PProposalId PInteger) - instance - PTryFrom PData (PAsData PProposalId) +instance PTryFrom PData (PAsData PProposalId) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalId where type PLifted PProposalId = ProposalId @@ -473,30 +512,43 @@ deriving via @since 0.1.0 -} -newtype PProposalStatus (s :: S) = PProposalStatus (Term s PInteger) +data PProposalStatus (s :: S) + = -- | @since 0.2.0 + PDraft + | -- | @since 0.2.0 + PVoting + | -- | @since 0.2.0 + PLocked + | -- | @since 0.2.0 + PFinished deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic + , -- | @since 0.2.0 + Bounded + , -- | @since 0.2.0 + Enum ) - deriving + deriving anyclass ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PEq ) - via (DerivePNewtype' PProposalStatus) + +-- | @since 0.2.0 +instance DerivePlutusType PProposalStatus where + type DPTStrat _ = PlutusTypeEnumData -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalStatus where type PLifted PProposalStatus = ProposalStatus -- | @since 0.1.0 -deriving via PAsData (DerivePNewtype' PProposalStatus) instance PTryFrom PData (PAsData PProposalStatus) +instance PTryFrom PData (PAsData PProposalStatus) -- | @since 0.1.0 deriving via (DerivePConstantViaEnum ProposalStatus PProposalStatus) instance (PConstantDecl ProposalStatus) @@ -517,32 +569,26 @@ newtype PProposalThresholds (s :: S) = PProposalThresholds ) } deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PDataFields ) - via (PIsDataReprInstances PProposalThresholds) + +-- | @since 0.2.0 +instance DerivePlutusType PProposalThresholds where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PProposalThresholds) - instance - PTryFrom PData (PAsData PProposalThresholds) +instance PTryFrom PData PProposalThresholds -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalThresholds where type PLifted PProposalThresholds = ProposalThresholds @@ -559,19 +605,25 @@ deriving via -} newtype PProposalVotes (s :: S) = PProposalVotes (Term s (PMap 'Unsorted PResultTag PInteger)) - deriving - ( -- | @since 0.1.0 + deriving stock + ( -- | @since 0.2.0 + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData ) - via (DerivePNewtype PProposalVotes (PMap 'Unsorted PResultTag PInteger)) + +-- | @since 0.2.0 +instance DerivePlutusType PProposalVotes where + type DPTStrat _ = PlutusTypeNewtype -- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype PProposalVotes (PMap 'Unsorted PResultTag PInteger)) - instance - PTryFrom PData (PAsData PProposalVotes) +instance PTryFrom PData (PAsData PProposalVotes) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalVotes where type PLifted PProposalVotes = ProposalVotes @@ -603,31 +655,25 @@ newtype PProposalDatum (s :: S) = PProposalDatum ) } deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData - , -- | @since 0.1.0 - PDataFields , -- | @since 0.1.0 PEq ) - via (DerivePNewtype' PProposalDatum) --- | @since 0.1.0 -deriving via PAsData (DerivePNewtype' PProposalDatum) instance PTryFrom PData (PAsData PProposalDatum) +-- | @since 0.2.0 +instance DerivePlutusType PProposalDatum where + type DPTStrat _ = PlutusTypeNewtype + +instance PTryFrom PData (PAsData PProposalDatum) -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalDatum where type PLifted PProposalDatum = ProposalDatum @@ -645,30 +691,24 @@ data PProposalRedeemer (s :: S) | PUnlock (Term s (PDataRecord '[])) | PAdvanceProposal (Term s (PDataRecord '[])) deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData ) - via PIsDataReprInstances PProposalRedeemer + +-- | @since 0.2.0 +instance DerivePlutusType PProposalRedeemer where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PProposalRedeemer) - instance - PTryFrom PData (PAsData PProposalRedeemer) +instance PTryFrom PData PProposalRedeemer -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalRedeemer where type PLifted PProposalRedeemer = ProposalRedeemer diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 29cd9784..7e897e54 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -174,12 +174,10 @@ proposalValidator proposal = PJust ((pfield @"resolved" #) -> txOut) <- pmatchC $ pfindTxInByTxOutRef # txOutRef # txInfoF.inputs txOutF <- pletFieldsC @'["address", "value"] $ txOut - (pfromData -> proposalDatum, _) <- - ptryFromC @(PAsData PProposalDatum) datum - (pfromData -> proposalRedeemer, _) <- - ptryFromC @(PAsData PProposalRedeemer) redeemer + proposalDatum <- pfromData . fst <$> ptryFromC @(PAsData PProposalDatum) datum + proposalRedeemer <- fst <$> ptryFromC @PProposalRedeemer redeemer - proposalF <- pletAllC proposalDatum + proposalF <- pletAllC $ pto proposalDatum ownAddress <- pletC $ txOutF.address @@ -211,11 +209,12 @@ proposalValidator proposal = -- TODO: this is highly inefficient: O(n) for every output, -- Maybe we can cache the sorted datum map? let datum = - mustFindDatum' @PProposalDatum - # inputF.datumHash - # txInfoF.datums + pfromData $ + mustFindDatum' @(PAsData PProposalDatum) + # inputF.datumHash + # txInfoF.datums - proposalId = pfield @"proposalId" # datum + proposalId = pfield @"proposalId" # pto datum pure $ inputF.address #== ownAddress @@ -226,21 +225,34 @@ proposalValidator proposal = proposalOut <- pletC $ - mustFindDatum' @PProposalDatum - # (pfield @"datumHash" # ownOutput) - # txInfoF.datums + pfromData $ + mustFindDatum' @(PAsData PProposalDatum) + # (pfield @"datumHash" # ownOutput) + # txInfoF.datums proposalUnchanged <- pletC $ proposalOut #== proposalDatum proposalOutStatus <- pletC $ pfromData $ - pfield @"status" # proposalOut + pfield @"status" # pto proposalOut onlyStatusChanged <- pletC $ -- Only the status of proposals is updated. + -- Only the status of proposals is updated. + + -- Only the status of proposals is updated. + + -- Only the status of proposals is updated. + + -- Only the status of proposals is updated. + + -- Only the status of proposals is updated. + + -- Only the status of proposals is updated. + -- Only the status of proposals is updated. proposalOut #== mkRecordConstr @@ -263,9 +275,9 @@ proposalValidator proposal = stakeSTAssetClass <- pletC $ passetClass # pconstant stakeSym # pconstant stakeTn - filterStakeDatumHash :: Term _ (PAsData PTxOut :--> PMaybe (PAsData PDatumHash)) <- + filterStakeDatumHash :: Term _ (PTxOut :--> PMaybe (PAsData PDatumHash)) <- pletC $ - plam $ \(pfromData -> txOut) -> unTermCont $ do + plam $ \txOut -> unTermCont $ do txOutF <- pletFieldsC @'["value", "datumHash"] txOut pure $ pif @@ -333,12 +345,11 @@ proposalValidator proposal = let stake = pfromData $ pfromJust - #$ ptryFindDatum - @(PAsData PStakeDatum) + #$ ptryFindDatum @(PAsData PStakeDatum) # pfromData dh # txInfoF.datums - stakeF <- pletFieldsC @'["stakedAmount", "owner"] stake + stakeF <- pletFieldsC @'["stakedAmount", "owner"] $ pto stake PPair amount owners <- pmatchC l @@ -369,14 +380,10 @@ proposalValidator proposal = stakeOutputHash <- pletC $ pfromData $ phead # stakeOutputDatumHashes stakeIn :: Term _ PStakeDatum <- - pletC $ - pfromData $ - pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums + pletC $ pfromData $ pfromJust #$ ptryFindDatum # stakeInputHash # txInfoF.datums stakeOut :: Term _ PStakeDatum <- - pletC $ - pfromData $ - pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums + pletC $ pfromData $ pfromJust #$ ptryFindDatum # stakeOutputHash # txInfoF.datums stakeUnchanged <- pletC $ stakeInputHash #== stakeOutputHash @@ -391,7 +398,7 @@ proposalValidator proposal = withSingleStake val = withSingleStake' #$ plam $ \stakeIn stakeOut stakeUnchange -> unTermCont $ do - stakeInF <- pletAllC stakeIn + stakeInF <- pletAllC $ pto stakeIn val stakeInF stakeOut stakeUnchange @@ -581,7 +588,7 @@ proposalValidator proposal = $ ptraceIfFalse "Proposal unchanged" proposalUnchanged -- At last, we ensure that all locks belong to this proposal will be removed. - stakeOutputLocks <- pletC $ pfield @"lockedBy" # stakeOut + stakeOutputLocks <- pletC $ pfield @"lockedBy" # pto stakeOut let templateStakeOut = mkRecordConstr @@ -662,13 +669,12 @@ proposalValidator proposal = pany # plam ( \( (pfield @"value" #) - . (pfield @"resolved" #) - . pfromData -> + . (pfield @"resolved" #) -> value ) -> psymbolValueOf # gstSymbol # value #== 1 ) - # txInfoF.inputs + # pfromData txInfoF.inputs let toFailedState = unTermCont $ do pguardC "Proposal should fail: not on time" $ diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index b2728340..c6da780e 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -30,9 +30,7 @@ module Agora.Proposal.Time ( pisMaxTimeRangeWidthValid, ) where -import Agora.Plutarch.Orphans () -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, HasDatatypeInfo, I (I)) +import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PExtended (PFinite), PInterval (PInterval), @@ -44,7 +42,6 @@ import Plutarch.Api.V1 ( import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, - PIsDataReprInstances (..), ) import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.TermCont (pguardC, pmatchC) @@ -53,10 +50,9 @@ import Plutarch.Lift ( PConstantDecl, PUnsafeLiftDecl (..), ) -import Plutarch.Numeric.Additive (AdditiveSemigroup ((+))) import PlutusLedgerApi.V1.Time (POSIXTime) import PlutusTx qualified -import Prelude hiding ((+)) +import Prelude -------------------------------------------------------------------------------- @@ -67,8 +63,22 @@ import Prelude hiding ((+)) newtype ProposalStartingTime = ProposalStartingTime { getProposalStartingTime :: POSIXTime } - deriving newtype (PlutusTx.ToData, PlutusTx.FromData, PlutusTx.UnsafeFromData) - deriving stock (Eq, Show, GHC.Generic) + deriving stock + ( -- | @since 0.1.0 + Eq + , -- | @since 0.1.0 + Show + , -- | @since 0.1.0 + Generic + ) + deriving newtype + ( -- | @since 0.1.0 + PlutusTx.ToData + , -- | @since 0.1.0 + PlutusTx.FromData + , -- | @since 0.1.0 + PlutusTx.UnsafeFromData + ) {- | Configuration of proposal timings. @@ -92,9 +102,12 @@ data ProposalTimingConfig = ProposalTimingConfig , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic + ) + deriving anyclass + ( -- | @since 0.1.0 + SOP.Generic ) - deriving anyclass (Generic) PlutusTx.makeIsDataIndexed 'ProposalTimingConfig [('ProposalTimingConfig, 0)] @@ -108,7 +121,7 @@ newtype MaxTimeRangeWidth = MaxTimeRangeWidth {getMaxWidth :: POSIXTime} , -- | @since 0.1.0 Ord , -- | @since 0.1.0 - GHC.Generic + Generic ) deriving newtype ( -- | @since 0.1.0 @@ -154,41 +167,47 @@ data PProposalTime (s :: S) = PProposalTime } deriving stock ( -- | @since 0.1.0 - GHC.Generic + Generic ) deriving anyclass ( -- | @since 0.1.0 - Generic + SOP.Generic , -- | @since 0.1.0 - PlutusType + SOP.HasDatatypeInfo , -- | @since 0.1.0 - HasDatatypeInfo + PlutusType , -- | @since 0.1.0 PEq ) +instance DerivePlutusType PProposalTime where + type DPTStrat _ = PlutusTypeScott + -- | Plutarch-level version of 'ProposalStartingTime'. newtype PProposalStartingTime (s :: S) = PProposalStartingTime (Term s PPOSIXTime) - deriving + deriving stock ( -- | @since 0.1.0 + Generic + ) + deriving anyclass + ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PEq - , -- | @since 0.1.0 - POrd ) - via (DerivePNewtype PProposalStartingTime PPOSIXTime) + +instance DerivePlutusType PProposalStartingTime where + type DPTStrat _ = PlutusTypeNewtype -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalStartingTime where type PLifted PProposalStartingTime = ProposalStartingTime -deriving via - PAsData (DerivePNewtype PProposalStartingTime PPOSIXTime) - instance - PTryFrom PData (PAsData PProposalStartingTime) +instance PTryFrom PData (PAsData PProposalStartingTime) -- | @since 0.1.0 deriving via @@ -213,29 +232,25 @@ newtype PProposalTimingConfig (s :: S) = PProposalTimingConfig ) } deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PDataFields ) - via (PIsDataReprInstances PProposalTimingConfig) + +instance DerivePlutusType PProposalTimingConfig where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 -deriving via PAsData (PIsDataReprInstances PProposalTimingConfig) instance PTryFrom PData (PAsData PProposalTimingConfig) +instance PTryFrom PData PProposalTimingConfig -- | @since 0.1.0 instance PUnsafeLiftDecl PProposalTimingConfig where @@ -250,20 +265,30 @@ deriving via -- | Plutarch-level version of 'MaxTimeRangeWidth'. newtype PMaxTimeRangeWidth (s :: S) = PMaxTimeRangeWidth (Term s PPOSIXTime) - deriving - ( -- | @since 0.1.0 + deriving stock + ( -- | @since 0.2.0 + Generic + ) + deriving anyclass + ( -- | @since 0.2.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PEq + , -- | @since 0.2.0 + PPartialOrd , -- | @since 0.1.0 POrd ) - via (DerivePNewtype PMaxTimeRangeWidth PPOSIXTime) + +instance DerivePlutusType PMaxTimeRangeWidth where + type DPTStrat _ = PlutusTypeNewtype -- | @since 0.1.0 -deriving via PAsData (DerivePNewtype PMaxTimeRangeWidth PPOSIXTime) instance PTryFrom PData (PAsData PMaxTimeRangeWidth) +instance PTryFrom PData (PAsData PMaxTimeRangeWidth) -- | @since 0.1.0 instance PUnsafeLiftDecl PMaxTimeRangeWidth where type PLifted PMaxTimeRangeWidth = MaxTimeRangeWidth diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 46e1237a..70a5f2cb 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -31,20 +31,16 @@ module Agora.Stake ( pisIrrelevant, ) where -import Agora.Plutarch.Orphans () import Agora.Proposal (PProposalId, PResultTag, ProposalId (..), ResultTag (..)) import Agora.SafeMoney (GTTag) import Data.Tagged (Tagged (..)) -import GHC.Generics qualified as GHC -import Generics.SOP (Generic, HasDatatypeInfo, I (I)) +import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PMaybeData, PPubKeyHash, ) import Plutarch.DataRepr ( DerivePConstantViaData (..), - PDataFields, - PIsDataReprInstances (PIsDataReprInstances), ) import Plutarch.Extra.Field (pletAll) import Plutarch.Extra.IsData ( @@ -52,7 +48,6 @@ import Plutarch.Extra.IsData ( ProductIsData (ProductIsData), ) import Plutarch.Extra.List (pnotNull) -import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.Sum (PSum (..)) import Plutarch.Extra.Traversable (pfoldMap) import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) @@ -76,7 +71,7 @@ data Stake = Stake } deriving stock ( -- | @since 0.1.0 - GHC.Generic + Generic ) {- | Locks that are stored in the stake datums for various purposes. @@ -133,11 +128,11 @@ data ProposalLock ( -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic ) deriving anyclass ( -- | @since 0.1.0 - Generic + SOP.Generic ) PlutusTx.makeIsDataIndexed @@ -176,7 +171,12 @@ data StakeRedeemer DelegateTo PubKeyHash | -- | Revoke the existing delegation. ClearDelegate - deriving stock (Show, GHC.Generic) + deriving stock + ( -- | @since 0.1.0 + Show + , -- | @since 0.1.0 + Generic + ) PlutusTx.makeIsDataIndexed ''StakeRedeemer @@ -208,8 +208,16 @@ data StakeDatum = StakeDatum -- ^ The current proposals locking this stake. This field must be empty -- for the stake to be usable for deposits and withdrawals. } - deriving stock (Show, GHC.Generic) - deriving anyclass (Generic) + deriving stock + ( -- | @since 0.1.0 + Show + , -- | @since 0.1.0 + Generic + ) + deriving anyclass + ( -- | @since 0.1.0 + SOP.Generic + ) deriving ( -- | @since 0.1.0 PlutusTx.ToData @@ -231,34 +239,28 @@ newtype PStakeDatum (s :: S) = PStakeDatum ( PDataRecord '[ "stakedAmount" ':= PDiscrete GTTag , "owner" ':= PPubKeyHash - , "delegatedTo" ':= PMaybeData PPubKeyHash + , "delegatedTo" ':= PMaybeData (PAsData PPubKeyHash) , "lockedBy" ':= PBuiltinList (PAsData PProposalLock) ] ) } deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData - , -- | @since 0.1.0 - PDataFields , -- | @since 0.1.0 PEq ) - via (DerivePNewtype' PStakeDatum) + +instance DerivePlutusType PStakeDatum where + type DPTStrat _ = PlutusTypeNewtype -- | @since 0.1.0 instance Plutarch.Lift.PUnsafeLiftDecl PStakeDatum where @@ -271,10 +273,7 @@ deriving via (Plutarch.Lift.PConstantDecl StakeDatum) -- | @since 0.1.0 -deriving via - PAsData (DerivePNewtype' PStakeDatum) - instance - PTryFrom PData (PAsData PStakeDatum) +instance PTryFrom PData (PAsData PStakeDatum) {- | Plutarch-level redeemer for Stake scripts. @@ -291,30 +290,23 @@ data PStakeRedeemer (s :: S) | PDelegateTo (Term s (PDataRecord '["pkh" ':= PPubKeyHash])) | PClearDelegate (Term s (PDataRecord '[])) deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData ) - via PIsDataReprInstances PStakeRedeemer + +instance DerivePlutusType PStakeRedeemer where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PStakeRedeemer) - instance - PTryFrom PData (PAsData PStakeRedeemer) +instance PTryFrom PData PStakeRedeemer -- | @since 0.1.0 instance Plutarch.Lift.PUnsafeLiftDecl PStakeRedeemer where @@ -331,7 +323,13 @@ deriving via @since 0.2.0 -} data PProposalLock (s :: S) - = PCreated (Term s (PDataRecord '["created" ':= PProposalId])) + = PCreated + ( Term + s + ( PDataRecord + '["created" ':= PProposalId] + ) + ) | PVoted ( Term s @@ -342,34 +340,30 @@ data PProposalLock (s :: S) ) ) deriving stock - ( -- | @since 0.1.0 - GHC.Generic - ) - deriving anyclass ( -- | @since 0.1.0 Generic - , -- | @since 0.1.0 - HasDatatypeInfo ) deriving anyclass ( -- | @since 0.1.0 - PIsDataRepr - ) - deriving - ( -- | @since 0.1.0 + SOP.Generic + , -- | @since 0.1.0 + SOP.HasDatatypeInfo + , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData , -- | @since 0.1.0 PEq ) - via (PIsDataReprInstances PProposalLock) + +instance DerivePlutusType PProposalLock where + type DPTStrat _ = PlutusTypeData -- | @since 0.1.0 -deriving via - PAsData (PIsDataReprInstances PProposalLock) - instance - PTryFrom PData (PAsData PProposalLock) +instance PTryFrom PData PProposalLock + +-- | @since 0.2.0 +instance PTryFrom PData (PAsData PProposalLock) -- | @since 0.1.0 instance Plutarch.Lift.PUnsafeLiftDecl PProposalLock where @@ -399,9 +393,7 @@ instance PShow PProposalLock where pstakeLocked :: forall (s :: S). Term s (PStakeDatum :--> PBool) pstakeLocked = phoistAcyclic $ plam $ \stakeDatum -> - let locks :: Term _ (PBuiltinList (PAsData PProposalLock)) - locks = pfield @"lockedBy" # stakeDatum - in pnotNull # locks + pnotNull #$ pfield @"lockedBy" @(PBuiltinList _) # pto stakeDatum {- | Get the number of *alive* proposals that were created by the given stake. @@ -439,19 +431,22 @@ data PStakeRole (s :: S) PIrrelevant deriving stock ( -- | @since 0.2.0 - GHC.Generic + Generic ) deriving anyclass ( -- | @since 0.2.0 - Generic + SOP.Generic , -- | @since 0.2.0 PlutusType , -- | @since 0.2.0 - HasDatatypeInfo + SOP.HasDatatypeInfo , -- | @since 0.2.0 PEq ) +instance DerivePlutusType PStakeRole where + type DPTStrat _ = PlutusTypeScott + {- | Retutn true if the stake was used to voted on the proposal. @since 0.2.0 diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index ad57a96f..cc40a7d8 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -19,9 +19,9 @@ import Agora.Utils ( mustFindDatum', pdjust, pdnothing, - pmaybeData, pvalidatorHashToTokenName, ) +import Data.Default (def) import Data.Function (on) import Data.Tagged (Tagged (..), untag) import Plutarch.Api.V1 ( @@ -106,7 +106,11 @@ stakePolicy gtClassRef = pure $ pif (psymbolValueOf # ownSymbol # txOutF.value #== 1) - ( let datum = mustFindDatum' @PStakeDatum # txOutF.datumHash # txInfoF.datums + ( let datum = + pfromData $ + mustFindDatum' @(PAsData PStakeDatum) + # txOutF.datumHash + # txInfoF.datums in pnot # (pstakeLocked # datum) ) (pconstant False) @@ -146,7 +150,9 @@ stakePolicy gtClassRef = pletFieldsC @'["value", "address", "datumHash"] scriptOutputWithStakeST datumF <- pletFieldsC @'["owner", "stakedAmount"] $ - mustFindDatum' @PStakeDatum # outputF.datumHash # txInfoF.datums + pto $ + pfromData $ + mustFindDatum' @(PAsData PStakeDatum) # outputF.datumHash # txInfoF.datums let hasExpectedStake = ptraceIfFalse "Stake ouput has expected amount of stake token" $ @@ -232,12 +238,12 @@ stakeValidator stake = ] txInfo - (pfromData -> stakeRedeemer, _) <- ptryFromC redeemer + stakeRedeemer <- fst <$> ptryFromC redeemer -- TODO: Use PTryFrom let stakeDatum' :: Term _ PStakeDatum stakeDatum' = pfromData $ punsafeCoerce datum - stakeDatum <- pletAllC stakeDatum' + stakeDatum <- pletAllC $ pto stakeDatum' PSpending txOutRef <- pmatchC $ pfromData ctx.purpose @@ -253,16 +259,16 @@ stakeValidator stake = ownerSignsTransaction <- pletC $ signedBy # stakeDatum.owner delegateSignsTransaction <- - pletC $ - pmaybeData # pconstant False - # plam ((signedBy #) . pdata) - # stakeDatum.delegatedTo + pletC $ pconstant False + -- pmaybeData # pconstant False + -- # plam (signedBy #) + -- # stakeDatum.delegatedTo stCurrencySymbol <- pletC $ pconstant $ mintingPolicySymbol $ - mkMintingPolicy (stakePolicy stake.gtClassRef) + mkMintingPolicy def (stakePolicy stake.gtClassRef) mintedST <- pletC $ psymbolValueOf # stCurrencySymbol # txInfoF.mint valueSpent <- pletC $ pvalueSpent # txInfoF.inputs spentST <- pletC $ psymbolValueOf # stCurrencySymbol #$ valueSpent @@ -340,10 +346,10 @@ stakeValidator stake = ) # pfromData txInfoF.inputs - sortTxOuts :: Term _ (PBuiltinList (PAsData PTxOut) :--> PBuiltinList (PAsData PTxOut)) + sortTxOuts :: Term _ (PBuiltinList PTxOut :--> PBuiltinList PTxOut) sortTxOuts = phoistAcyclic $ plam (pmsortBy # plam ((#<) `on` (getDatumHash #)) #) where - getDatumHash :: Term _ (PAsData PTxOut :--> PDatumHash) + getDatumHash :: Term _ (PTxOut :--> PDatumHash) getDatumHash = phoistAcyclic $ plam ((pfromDJust #) . pfromData . (pfield @"datumHash" #)) sortedOwnInputs = sortTxOuts # ownInputs @@ -360,13 +366,14 @@ stakeValidator stake = pguardC "ST at inputs must be 1" $ spentST #== 1 - ownOutput <- pletC $ pfromData $ phead # ownOutputs + ownOutput <- pletC $ phead # ownOutputs stakeOut <- pletC $ - mustFindDatum' @PStakeDatum - # (pfield @"datumHash" # ownOutput) - # txInfoF.datums + pfromData $ + mustFindDatum' @(PAsData PStakeDatum) + # (pfield @"datumHash" # ownOutput) + # txInfoF.datums ownOutputValue <- pletC $ @@ -384,7 +391,7 @@ stakeValidator stake = ( #stakedAmount .= stakeDatum.stakedAmount .& #owner .= stakeDatum.owner .& #delegatedTo .= stakeDatum.delegatedTo - .& #lockedBy .= pfield @"lockedBy" # stakeOut + .& #lockedBy .= pfield @"lockedBy" # pto stakeOut ) in stakeOut #== templateStakeDatum @@ -524,7 +531,7 @@ stakeValidator stake = pguardC "Cannot delegate to the owner" $ pnot #$ stakeDatum.owner #== pkh - pure $ setDelegate #$ pdjust # pkh + pure $ setDelegate #$ pdjust # pdata pkh ------------------------------------------------------------ PClearDelegate _ -> diff --git a/agora/Agora/Treasury.hs b/agora/Agora/Treasury.hs index bc7cc738..6b66b7b8 100644 --- a/agora/Agora/Treasury.hs +++ b/agora/Agora/Treasury.hs @@ -11,14 +11,16 @@ treasury. module Agora.Treasury (module Agora.Treasury) where import Agora.AuthorityToken (singleAuthorityTokenBurned) -import GHC.Generics qualified as GHC -import Generics.SOP (Generic) +import Generics.SOP qualified as SOP import Plutarch.Api.V1 (PValidator) import Plutarch.Api.V1.Contexts (PScriptPurpose (PMinting)) import "plutarch" Plutarch.Api.V1.Value (PValue) import Plutarch.Builtin (pforgetData) -import Plutarch.Extra.IsData (DerivePConstantViaEnum (..), EnumIsData (..)) -import Plutarch.Extra.Other (DerivePNewtype' (..)) +import Plutarch.Extra.IsData ( + DerivePConstantViaEnum (..), + EnumIsData (..), + PlutusTypeEnumData, + ) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC) import Plutarch.Lift (PConstantDecl (..), PLifted (..), PUnsafeLiftDecl) import Plutarch.TryFrom () @@ -38,7 +40,7 @@ data TreasuryRedeemer , -- | @since 0.1.0 Show , -- | @since 0.1.0 - GHC.Generic + Generic , -- | @since 0.2.0 Enum , -- | @since 0.2.0 @@ -46,7 +48,7 @@ data TreasuryRedeemer ) deriving anyclass ( -- | @since 0.2.0 - Generic + SOP.Generic ) deriving ( -- | @since 0.1.0 @@ -63,23 +65,29 @@ data TreasuryRedeemer @since 0.1.0 -} -newtype PTreasuryRedeemer (s :: S) - = PTreasuryRedeemer (Term s PInteger) +data PTreasuryRedeemer (s :: S) + = PSpendTreasuryGAT deriving stock ( -- | @since 0.1.0 - GHC.Generic + Generic + , -- | @since 0.2.0 + Bounded + , -- | @since 0.2.0 + Enum ) deriving anyclass ( -- | @since 0.1.0 - Generic + SOP.Generic ) - deriving + deriving anyclass ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData ) - via (DerivePNewtype' PTreasuryRedeemer) + +instance DerivePlutusType PTreasuryRedeemer where + type DPTStrat _ = PlutusTypeEnumData -- | @since 0.1.0 instance PUnsafeLiftDecl PTreasuryRedeemer where diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 1a6f6f97..6406b0c4 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -1,4 +1,5 @@ {-# LANGUAGE QuantifiedConstraints #-} +{-# OPTIONS_GHC -Wno-unrecognised-pragmas #-} {- | Module : Agora.Utils @@ -30,6 +31,7 @@ module Agora.Utils ( pdnothing, ) where +import Data.Default (Default (def)) import Plutarch.Api.V1 ( AmountGuarantees, KeyGuarantees, @@ -139,7 +141,7 @@ pvalidatorHashToTokenName vh = pcon (PTokenName (pto vh)) @since 0.1.0 -} getMintingPolicySymbol :: ClosedTerm PMintingPolicy -> CurrencySymbol -getMintingPolicySymbol v = mintingPolicySymbol $ mkMintingPolicy v +getMintingPolicySymbol v = mintingPolicySymbol $ mkMintingPolicy def v {- | The entire value only contains one token of the given currency symbol. @@ -159,7 +161,7 @@ hasOnlyOneTokenOfCurrencySymbol = phoistAcyclic $ -} mustFindDatum' :: forall (datum :: PType). - (PIsData datum, PTryFrom PData (PAsData datum)) => + (PIsData datum, PTryFrom PData datum) => forall s. Term s @@ -172,7 +174,7 @@ mustFindDatum' = phoistAcyclic $ let dh = mustBePDJust # "Given TxOut dones't have a datum" # mdh dt = mustBePJust # "Datum not found in the transaction" #$ plookupTuple # dh # datums (d, _) <- ptryFromC $ pforgetData $ pdata dt - pure $ pfromData d + pure d {- | Extract the value stored in a PMaybe container. If there's no value, throw an error with the given message. diff --git a/bench.csv b/bench.csv index b5ca082a..e3511ab5 100644 --- a/bench.csv +++ b/bench.csv @@ -1,582 +1,582 @@ name,cpu,mem,size -Agora/Effects/Treasury Withdrawal Effect/effect/Simple,333137234,829671,3674 -Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 -Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,455817227,1103968,3859 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,93089688,256879,8317 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,112671240,312571,3751 -Agora/Stake/policy/stakeCreation,51392011,150393,2536 -Agora/Stake/validator/stakeDepositWithdraw deposit,186703362,508556,5339 -Agora/Stake/validator/stakeDepositWithdraw withdraw,186703362,508556,5327 -Agora/Stake/validator/set delegate/override existing delegate,113710649,295990,5391 -Agora/Stake/validator/set delegate/remove existing delegate,110917776,287315,5328 -Agora/Stake/validator/set delegate/set delegate to something,110293742,288964,5328 -Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/legal/governor,325452519,864627,8802 -Agora/Proposal/policy (proposal creation)/legal/stake,155649225,408558,5993 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,155649225,408558,5993 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33689644,100286,1980 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,325452519,864627,8771 -Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33689644,100286,2019 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,161082885,423208,6001 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33689644,100286,2031 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,162111717,426666,6023 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,155649225,408558,5993 -Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33689644,100286,2007 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,155649225,408558,5989 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,155649225,408558,5993 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,155649225,408558,5993 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33689644,100286,2011 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,155649225,408558,5993 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,236423139,660573,8414 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,124318976,323958,5801 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,665645490,1853924,11068 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,540258584,1423290,8335 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1353965353,3721747,14387 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1155837179,3072861,11503 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,124318976,323958,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,124318976,323958,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,124318976,323958,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,124318976,323958,5801 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,540258584,1423290,8335 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,540258584,1423290,8335 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,540258584,1423290,8335 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1155837179,3072861,11503 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1155837179,3072861,11503 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1155837179,3072861,11503 -Agora/Proposal/validator/voting/legal/ordinary/proposal,254761960,715291,8396 -Agora/Proposal/validator/voting/legal/ordinary/stake,142726431,376372,5827 -Agora/Proposal/validator/voting/legal/delegate/proposal,254862648,715291,8459 -Agora/Proposal/validator/voting/legal/delegate/stake,146143338,383398,5921 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,249151017,693538,8909 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,134728077,350426,6137 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,293313747,804549,8918 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6144 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7296 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,467588561,1169520,10118 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,244096325,682817,8911 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6139 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,279799305,767410,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6140 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,280930283,769814,8912 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6140 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,134728077,350426,6137 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6144 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7296 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,134728077,350426,6137 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,135450613,352690,6140 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135450613,352690,6148 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,134728077,350426,6139 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6144 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7296 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,467588561,1169520,10118 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,467588561,1169520,10119 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3660 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,316563738,866529,9359 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,177112055,455382,6585 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,348898466,963341,10297 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,7523 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,3886 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,340814784,939138,9892 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7118 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,340814784,939138,10064 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,190212214,480993,7290 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3653 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,340814784,939138,10070 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,190212214,480993,7296 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3659 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,294552365,811630,9498 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,134728077,350426,6530 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,342409981,932629,9507 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6537 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7690 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,487506732,1223965,10512 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,289497673,800909,9500 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6532 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,325200653,885502,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6533 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,326331631,887906,9501 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6533 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,134728077,350426,6530 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6537 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7690 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,134728077,350426,6530 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,135450613,352690,6533 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135450613,352690,6545 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,134728077,350426,6532 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6537 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7690 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,487506732,1223965,10512 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,487506732,1223965,10513 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4054 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,361965086,984621,9948 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,177112055,455382,6978 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,394299814,1081433,10887 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,7917 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4280 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,386216132,1057230,10481 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7511 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,386216132,1057230,10654 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,190212214,480993,7684 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4047 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,386216132,1057230,10660 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,190212214,480993,7690 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4053 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,430756409,1165906,11270 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,134728077,350426,7711 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,489698683,1316869,11279 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,7718 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,8870 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,547261245,1387300,11692 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,425701717,1155185,11272 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,7713 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,461404697,1239778,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,7714 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,462535675,1242182,11273 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,7714 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,134728077,350426,7711 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,7718 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,8870 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,134728077,350426,7711 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,135450613,352690,7714 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135450613,352690,7738 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,134728077,350426,7713 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,7718 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190212214,480993,8870 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,547261245,1387300,11692 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,547261245,1387300,11693 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5234 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,498169130,1338897,11720 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,177112055,455382,8159 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,530503858,1435709,12658 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,9097 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5460 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,522420176,1411506,12253 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190212214,480993,8692 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,522420176,1411506,12425 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,190212214,480993,8864 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5227 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,522420176,1411506,12431 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,190212214,480993,8870 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5233 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,607775528,1728219,11679 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,538035987,1412880,8786 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,315683095,866613,9275 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6380 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7532 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,474776509,1190208,10355 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,266465673,744881,9268 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6375 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,302168653,829474,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,303299631,831878,9269 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,538035987,1412880,8786 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6380 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7532 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,523921701,1371870,8786 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,135450613,352690,6376 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135450613,352690,6384 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,538035987,1412880,8788 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6380 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7532 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,474776509,1190208,10355 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,474776509,1190208,10356 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,3897 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,338933086,928593,9715 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,177112055,455382,6820 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,371267814,1025405,10654 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,7759 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4123 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,363184132,1001202,10249 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7354 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,363184132,1001202,10421 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,190212214,480993,7526 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,3890 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,363184132,1001202,10427 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,190212214,480993,7532 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,3896 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,653176876,1846311,12270 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,538035987,1412880,9180 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,364779329,994693,9865 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6773 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7926 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,494694680,1244653,10749 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,311867021,862973,9858 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6768 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,347570001,947566,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6769 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,348700979,949970,9859 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6769 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,538035987,1412880,9180 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6773 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7926 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,523921701,1371870,9180 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,135450613,352690,6769 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135450613,352690,6781 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,538035987,1412880,9182 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6773 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7926 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,494694680,1244653,10749 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,494694680,1244653,10750 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4291 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,384334434,1046685,10306 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,177112055,455382,7214 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,416669162,1143497,11245 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,8153 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4517 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,408585480,1119294,10839 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7747 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,408585480,1119294,11012 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,190212214,480993,7920 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4284 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,408585480,1119294,11018 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,190212214,480993,7926 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4290 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,789380920,2200587,14040 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,538035987,1412880,10360 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,512068031,1378933,11636 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,7954 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,9106 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,554449193,1407988,11929 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,448071065,1217249,11629 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,7949 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,483774045,1301842,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,7950 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,484905023,1304246,11630 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,7950 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,538035987,1412880,10360 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,7954 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,9106 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,523921701,1371870,10360 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,135450613,352690,7950 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135450613,352690,7974 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,538035987,1412880,10362 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,7954 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190212214,480993,9106 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,554449193,1407988,11929 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,554449193,1407988,11930 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5471 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,520538478,1400961,12077 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,177112055,455382,8395 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,552873206,1497773,13015 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,9333 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5697 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,544789524,1473570,12610 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190212214,480993,8928 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,544789524,1473570,12782 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,190212214,480993,9100 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5464 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,544789524,1473570,12788 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,190212214,480993,9106 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5470 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1143400598,3277042,15148 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1154355876,3064517,12104 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,343644780,944193,9727 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,6681 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,7833 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,483761444,1216068,10656 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,294427358,822461,9720 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,6676 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,330130338,907054,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,6677 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,331261316,909458,9721 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,6677 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1154355876,3064517,12104 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,6681 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,7833 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1168470162,3105527,12104 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,135450613,352690,6677 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,135450613,352690,6685 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1154355876,3064517,12106 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,6681 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190212214,480993,7833 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,483761444,1216068,10656 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,483761444,1216068,10657 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4198 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,366894771,1006173,10168 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,177112055,455382,7122 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,399229499,1102985,11106 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,8060 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4424 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,391145817,1078782,10701 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190212214,480993,7655 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,391145817,1078782,10873 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,190212214,480993,7827 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15806303,48240,4191 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,391145817,1078782,10879 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,190212214,480993,7833 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15806303,48240,4197 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1188801946,3395134,15738 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1154355876,3064517,12498 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,392741014,1072273,10316 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,7074 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,8227 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,503679615,1270513,11050 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,339828706,940553,10309 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,7069 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,375531686,1025146,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,7070 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,376662664,1027550,10310 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,7070 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1154355876,3064517,12498 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,7074 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,8227 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1168470162,3105527,12498 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,135450613,352690,7070 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,135450613,352690,7082 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1154355876,3064517,12500 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,7074 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190212214,480993,8227 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,503679615,1270513,11050 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,503679615,1270513,11051 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,4592 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,412296119,1124265,10757 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,177112055,455382,7515 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444630847,1221077,11696 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,8454 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,4818 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436547165,1196874,11290 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190212214,480993,8048 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436547165,1196874,11463 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,190212214,480993,8221 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15806303,48240,4585 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436547165,1196874,11469 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,190212214,480993,8227 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15806303,48240,4591 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1325005990,3749410,17509 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1154355876,3064517,13678 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,540029716,1456513,12088 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,135450613,352690,8255 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190212214,480993,9408 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,563434128,1433848,12231 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,476032750,1294829,12081 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,135450613,352690,8250 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,511735730,1379422,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,135450613,352690,8251 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,512866708,1381826,12082 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,135450613,352690,8251 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1154355876,3064517,13678 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,135450613,352690,8255 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190212214,480993,9408 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1168470162,3105527,13678 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,135450613,352690,8251 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,135450613,352690,8275 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1154355876,3064517,13680 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,135450613,352690,8255 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190212214,480993,9408 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,563434128,1433848,12231 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15806303,48240,5772 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,563434128,1433848,12232 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15806303,48240,5773 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,548500163,1478541,12529 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,177112055,455382,8696 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,580834891,1575353,13467 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,193760323,488220,9634 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17630300,53302,5998 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,572751209,1551150,13062 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190212214,480993,9229 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,572751209,1551150,13235 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,190212214,480993,9402 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15806303,48240,5765 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,572751209,1551150,13241 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,190212214,480993,9408 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15806303,48240,5772 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,131657472,344523,5807 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,237178475,667478,8377 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,134888718,353577,5823 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,250650682,707420,8388 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,131657472,344523,5805 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,204970610,587333,8374 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,131657472,344523,5821 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,213404867,612237,8386 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,131657472,344523,5811 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,131657472,344523,5811 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,206286762,591217,8381 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,134888718,353577,5827 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,220290545,632551,8392 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,282446716,721159,7900 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,379819723,1080142,10446 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,298602946,766429,7976 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,445348258,1271396,10497 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,282446716,721159,7889 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,313051422,905189,10438 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,282446716,721159,7970 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,351440403,1016941,10491 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,282446716,721159,7920 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,282446716,721159,7920 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,318520682,920265,10466 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,298602946,766429,7996 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,384580793,1112911,10517 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,470933271,1191954,10515 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,558121283,1595972,13031 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,503245731,1282494,10666 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,688720228,1976366,13132 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,470933271,1191954,10495 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,448152437,1302509,13019 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,470933271,1191954,10655 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,523984823,1522821,13121 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,470933271,1191954,10555 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,470933271,1191954,10555 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,458813082,1331575,13071 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,503245731,1282494,10706 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,589943603,1713361,13172 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1677247223,4205042,27345 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1699251267,4897284,29650 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1812959555,4585310,28032 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2246300836,6488174,30108 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1677247223,4205042,27260 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1312798933,3845357,29605 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1677247223,4205042,27971 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1628269111,4760453,30047 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1677247223,4205042,27513 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1677247223,4205042,27513 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1356684442,3963959,29818 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1812959555,4585310,28201 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1904265587,5556241,30277 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",131657472,344523,5807 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",131657472,344523,5807 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",131657472,344523,5807 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",127286886,332673,5809 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",127286886,332673,5809 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",127286886,332673,5809 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",134888718,353577,5823 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",134888718,353577,5823 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",134888718,353577,5823 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",124055640,323619,5789 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",124055640,323619,5789 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,124055640,323619,5789 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,131657472,344523,5805 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,131657472,344523,5805 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,131657472,344523,5805 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,131657472,344523,5803 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",282446716,721159,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",282446716,721159,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",282446716,721159,7900 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",275797450,703717,7906 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",275797450,703717,7906 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",275797450,703717,7906 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",298602946,766429,7976 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",298602946,766429,7976 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",298602946,766429,7976 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",259641220,658447,7817 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",259641220,658447,7817 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,259641220,658447,7817 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,282446716,721159,7889 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,282446716,721159,7889 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,282446716,721159,7889 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,282446716,721159,7879 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",470933271,1191954,10515 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",470933271,1191954,10515 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",470933271,1191954,10515 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",461435655,1167522,10526 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",461435655,1167522,10526 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",461435655,1167522,10526 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",503245731,1282494,10666 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",503245731,1282494,10666 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",503245731,1282494,10666 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",429123195,1076982,10352 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",429123195,1076982,10352 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,429123195,1076982,10352 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,470933271,1191954,10495 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,470933271,1191954,10495 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,470933271,1191954,10495 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,470933271,1191954,10474 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1677247223,4205042,27345 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1677247223,4205042,27345 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1677247223,4205042,27345 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1649520167,4135874,27406 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1649520167,4135874,27406 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1649520167,4135874,27406 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1812959555,4585310,28032 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1812959555,4585310,28032 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1812959555,4585310,28032 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1513807835,3755606,26632 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1513807835,3755606,26632 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1513807835,3755606,26632 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1677247223,4205042,27260 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1677247223,4205042,27260 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1677247223,4205042,27260 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1677247223,4205042,27176 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 -Agora/Treasury/Validator/Positive/Allows for effect changes,31277082,80782,1450 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,20570665,54655,725 -Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 -Agora/Governor/policy/totally legal,60002734,167736,2268 -Agora/Governor/validator/mutate/legal,100216324,268169,8181 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple,12736207,40996,2908 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,12736207,40996,3220 +Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,12736207,40996,3093 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,108270758,296852,6444 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,7973222,20696,3222 +Agora/Stake/policy/stakeCreation,53357294,155623,2050 +Agora/Stake/validator/stakeDepositWithdraw deposit,187795456,518604,3825 +Agora/Stake/validator/stakeDepositWithdraw withdraw,187795456,518604,3813 +Agora/Stake/validator/set delegate/override existing delegate,100639801,266338,3877 +Agora/Stake/validator/set delegate/remove existing delegate,98230359,259005,3814 +Agora/Stake/validator/set delegate/set delegate to something,100539113,266338,3814 +Agora/Proposal/policy (proposal creation)/legal/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/legal/governor,354848880,943893,6928 +Agora/Proposal/policy (proposal creation)/legal/stake,153933633,408520,4479 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153933633,408520,4479 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33873644,101086,1811 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,354848880,943893,6897 +Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33873644,101086,1850 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159367293,423170,4487 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33873644,101086,1862 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160396125,426628,4509 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153933633,408520,4479 +Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33873644,101086,1838 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153933633,408520,4475 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153933633,408520,4479 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153933633,408520,4479 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33873644,101086,1842 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153933633,408520,4479 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,270612694,756318,6994 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,120950501,317982,4287 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,711284625,1983397,9648 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,552610861,1480482,6821 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1413916463,3893380,12967 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1187840396,3209013,9989 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,120950501,317982,4287 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,120950501,317982,4287 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,120950501,317982,4287 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,120950501,317982,4287 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,552610861,1480482,6821 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,552610861,1480482,6821 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,552610861,1480482,6821 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1187840396,3209013,9989 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1187840396,3209013,9989 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1187840396,3209013,9989 +Agora/Proposal/validator/voting/legal/ordinary/proposal,292107030,818192,6976 +Agora/Proposal/validator/voting/legal/ordinary/stake,138776145,368604,4313 +Agora/Proposal/validator/voting/legal/delegate/proposal,293223020,821804,7039 +Agora/Proposal/validator/voting/legal/delegate/stake,135207796,352770,4407 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,278165358,776398,7489 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,132049602,347450,4623 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,323181211,887380,7498 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,4630 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,373749316,1029579,8650 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,5782 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,495323391,1250397,8245 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3342 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,275372622,770485,7491 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,4625 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,311464859,854847,7492 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,4626 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,313726815,859655,7492 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,4626 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132049602,347450,4623 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,4630 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,5782 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3342 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,132049602,347450,4623 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,132772138,349714,4626 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,132772138,349714,4634 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,132049602,347450,4625 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,4630 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190734433,489947,5782 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,495323391,1250397,8245 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3342 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,495323391,1250397,8246 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3343 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,349498270,956970,7939 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,177634274,464336,5071 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,381832998,1053782,8877 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6009 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,3569 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,373749316,1029579,8472 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190734433,489947,5604 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,373749316,1029579,8644 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,190734433,489947,5776 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15783303,48140,3336 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,373749316,1029579,8650 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,190734433,489947,5782 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15783303,48140,3342 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,318054305,881782,8078 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,132049602,347450,5016 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,366765044,1002752,8087 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5023 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,413638263,1134963,9240 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6176 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,513404095,1300606,8639 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3736 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,315261569,875869,8080 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5018 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,351353806,960231,8081 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5019 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,353615762,965039,8081 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5019 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132049602,347450,5016 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5023 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6176 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3736 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,132049602,347450,5016 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,132772138,349714,5019 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,132772138,349714,5031 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,132049602,347450,5018 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5023 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6176 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,513404095,1300606,8639 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3736 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,513404095,1300606,8640 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3737 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,389387217,1062354,8528 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,177634274,464336,5464 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,421721945,1159166,9467 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6403 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,3963 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,413638263,1134963,9061 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190734433,489947,5997 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,413638263,1134963,9234 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,190734433,489947,6170 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15783303,48140,3730 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,413638263,1134963,9240 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,190734433,489947,6176 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15783303,48140,3736 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,437721146,1197934,9850 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,132049602,347450,6197 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,497516543,1348868,9859 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,6204 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,533305104,1451115,11011 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,7356 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,567646207,1451233,9819 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,4916 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,434928410,1192021,9852 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,6199 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,471020647,1276383,9853 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,6200 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,473282603,1281191,9853 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,6200 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132049602,347450,6197 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,6204 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,7356 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,4916 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,132049602,347450,6197 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,132772138,349714,6200 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,132772138,349714,6224 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,132049602,347450,6199 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,6204 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190734433,489947,7356 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,567646207,1451233,9819 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15783303,48140,4916 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,567646207,1451233,9820 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,4917 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,509054058,1378506,10300 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,177634274,464336,6645 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,541388786,1475318,11238 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,7583 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,5143 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,533305104,1451115,10833 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190734433,489947,7178 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,533305104,1451115,11005 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,190734433,489947,7350 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15783303,48140,4910 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,533305104,1451115,11011 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,190734433,489947,7356 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15783303,48140,4916 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,648239449,1844807,10259 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,551078264,1473072,7272 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,345550559,949444,7855 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,4866 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,396118664,1091643,9007 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6018 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,502511339,1271085,8482 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3579 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,297741970,832549,7848 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,4861 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,333834207,916911,7849 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,4862 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,336096163,921719,7849 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,4862 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,551078264,1473072,7272 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,4866 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6018 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3579 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,536963978,1432062,7272 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,132772138,349714,4862 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,132772138,349714,4870 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,551078264,1473072,7274 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,4866 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6018 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,502511339,1271085,8482 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3579 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,502511339,1271085,8483 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3580 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,371867618,1019034,8295 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,177634274,464336,5306 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,404202346,1115846,9234 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6245 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,3806 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,396118664,1091643,8829 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190734433,489947,5840 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,396118664,1091643,9001 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,190734433,489947,6012 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15783303,48140,3573 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,396118664,1091643,9007 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,190734433,489947,6018 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15783303,48140,3579 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,688128396,1950191,10850 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,551078264,1473072,7666 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,389134392,1064816,8445 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5259 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436007611,1197027,9598 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6412 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,520592043,1321294,8876 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3973 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,337630917,937933,8438 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5254 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,373723154,1022295,8439 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5255 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,375985110,1027103,8439 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5255 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,551078264,1473072,7666 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5259 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6412 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3973 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,536963978,1432062,7666 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,132772138,349714,5255 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,132772138,349714,5267 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,551078264,1473072,7668 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5259 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6412 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,520592043,1321294,8876 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3973 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,520592043,1321294,8877 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3974 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,411756565,1124418,8886 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,177634274,464336,5700 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444091293,1221230,9825 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6639 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,4200 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436007611,1197027,9419 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190734433,489947,6233 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436007611,1197027,9592 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,190734433,489947,6406 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15783303,48140,3967 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436007611,1197027,9598 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,190734433,489947,6412 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15783303,48140,3973 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,807795237,2266343,12620 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,551078264,1473072,8846 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,519885891,1410932,10216 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,6440 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,555674452,1513179,11368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,7592 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,574834155,1471921,10056 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,5153 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,457297758,1254085,10209 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,6435 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,493389995,1338447,10210 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,6436 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,495651951,1343255,10210 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,6436 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,551078264,1473072,8846 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,6440 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,7592 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,5153 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,536963978,1432062,8846 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,132772138,349714,6436 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,132772138,349714,6460 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,551078264,1473072,8848 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,6440 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190734433,489947,7592 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,574834155,1471921,10056 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15783303,48140,5153 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,574834155,1471921,10057 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,5154 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,531423406,1440570,10657 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,177634274,464336,6881 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,563758134,1537382,11595 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,7819 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,5380 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,555674452,1513179,11190 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190734433,489947,7414 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,555674452,1513179,11362 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,190734433,489947,7586 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15783303,48140,5147 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,555674452,1513179,11368 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,190734433,489947,7592 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15783303,48140,5153 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1198176494,3435790,13728 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1187049093,3203669,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,373512244,1027024,8307 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5167 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,424080349,1169223,9459 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6319 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,511496274,1296945,8783 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3880 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,325703655,910129,8300 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5162 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,361795892,994491,8301 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5163 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,364057848,999299,8301 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5163 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1187049093,3203669,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5167 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6319 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3880 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1201163379,3244679,10590 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,132772138,349714,5163 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,132772138,349714,5171 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1187049093,3203669,10592 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5167 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6319 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,511496274,1296945,8783 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3880 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,511496274,1296945,8784 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3881 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,399829303,1096614,8748 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,177634274,464336,5608 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,432164031,1193426,9686 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6546 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,4107 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,424080349,1169223,9281 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190734433,489947,6141 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,424080349,1169223,9453 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,190734433,489947,6313 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15783303,48140,3874 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,424080349,1169223,9459 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,190734433,489947,6319 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15783303,48140,3880 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1238065441,3541174,14318 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1187049093,3203669,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,417096077,1142396,8896 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5560 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,463969296,1274607,10049 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6713 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,529576978,1347154,9177 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,4274 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,365592602,1015513,8889 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5555 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,401684839,1099875,8890 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5556 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,403946795,1104683,8890 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5556 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1187049093,3203669,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5560 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6713 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,4274 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1201163379,3244679,10984 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,132772138,349714,5556 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,132772138,349714,5568 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1187049093,3203669,10986 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5560 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6713 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,529576978,1347154,9177 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15783303,48140,4274 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,529576978,1347154,9178 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,4275 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,439718250,1201998,9337 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,177634274,464336,6001 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,472052978,1298810,10276 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6940 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,4501 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,463969296,1274607,9870 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190734433,489947,6534 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,463969296,1274607,10043 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,190734433,489947,6707 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15783303,48140,4268 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,463969296,1274607,10049 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,190734433,489947,6713 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15783303,48140,4274 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1357732282,3857326,16089 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1187049093,3203669,12164 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,547847576,1488512,10668 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,6741 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,583636137,1590759,11821 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,7894 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,583819090,1497781,10358 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,5455 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,485259443,1331665,10661 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,6736 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,521351680,1416027,10662 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,6737 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,523613636,1420835,10662 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,6737 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1187049093,3203669,12164 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,6741 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,7894 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,5455 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1201163379,3244679,12164 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,132772138,349714,6737 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,132772138,349714,6761 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1187049093,3203669,12166 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,6741 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190734433,489947,7894 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,583819090,1497781,10358 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15783303,48140,5455 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,583819090,1497781,10359 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,5456 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,559385091,1518150,11109 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,177634274,464336,7182 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,591719819,1614962,12047 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,8120 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,5681 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,583636137,1590759,11642 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190734433,489947,7715 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,583636137,1590759,11815 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,190734433,489947,7888 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15783303,48140,5448 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,583636137,1590759,11821 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,190734433,489947,7894 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15783303,48140,5455 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,126576208,334351,4293 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,48129948,145642,6957 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,129807454,343405,4309 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,6968 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,126576208,334351,4291 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,48129948,145642,6954 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,126576208,334351,4307 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,6966 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,126576208,334351,4297 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,6961 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,126576208,334351,4297 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,6961 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,129807454,343405,4313 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,6972 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,282885452,734987,6386 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,48129948,145642,9026 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,299041682,780257,6462 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,9077 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,282885452,734987,6375 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,48129948,145642,9018 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,282885452,734987,6456 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,9071 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,282885452,734987,6406 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,9046 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,282885452,734987,6406 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,9046 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,299041682,780257,6482 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,9097 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,478272007,1235782,9001 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,48129948,145642,11611 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,510584467,1326322,9152 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,11712 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,478272007,1235782,8981 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,48129948,145642,11599 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,478272007,1235782,9141 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,11701 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,478272007,1235782,9041 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,11651 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,478272007,1235782,9041 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,11651 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,510584467,1326322,9192 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,11752 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1728745959,4440870,25831 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,48129948,145642,28230 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1864458291,4821138,26518 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,28688 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1728745959,4440870,25746 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,48129948,145642,28185 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1728745959,4440870,26457 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,28627 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1728745959,4440870,25999 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,28398 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1728745959,4440870,25999 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,28398 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1864458291,4821138,26687 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,28857 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",126576208,334351,4293 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",126576208,334351,4293 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",126576208,334351,4293 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",122205622,322501,4295 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",122205622,322501,4295 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",122205622,322501,4295 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",129807454,343405,4309 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",129807454,343405,4309 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",129807454,343405,4309 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",118974376,313447,4275 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",118974376,313447,4275 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,118974376,313447,4275 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,126576208,334351,4291 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,126576208,334351,4291 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,126576208,334351,4291 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,126576208,334351,4289 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",282885452,734987,6386 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",282885452,734987,6386 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",282885452,734987,6386 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",276236186,717545,6392 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",276236186,717545,6392 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",276236186,717545,6392 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",299041682,780257,6462 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",299041682,780257,6462 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",299041682,780257,6462 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",260079956,672275,6303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",260079956,672275,6303 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,260079956,672275,6303 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,282885452,734987,6375 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,282885452,734987,6375 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,282885452,734987,6375 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,282885452,734987,6365 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",478272007,1235782,9001 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",478272007,1235782,9001 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",478272007,1235782,9001 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",468774391,1211350,9012 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",468774391,1211350,9012 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",468774391,1211350,9012 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",510584467,1326322,9152 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",510584467,1326322,9152 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",510584467,1326322,9152 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",436461931,1120810,8838 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",436461931,1120810,8838 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,436461931,1120810,8838 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,478272007,1235782,8981 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,478272007,1235782,8981 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,478272007,1235782,8981 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,478272007,1235782,8960 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1728745959,4440870,25831 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1728745959,4440870,25831 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1728745959,4440870,25831 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1701018903,4371702,25892 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1701018903,4371702,25892 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1701018903,4371702,25892 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1864458291,4821138,26518 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1864458291,4821138,26518 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1864458291,4821138,26518 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1565306571,3991434,25118 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1565306571,3991434,25118 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1565306571,3991434,25118 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1728745959,4440870,25746 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1728745959,4440870,25746 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1728745959,4440870,25746 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1728745959,4440870,25662 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,19822997,52452,427 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32009395,84810,527 +Agora/Treasury/Validator/Positive/Allows for effect changes,30529414,78579,983 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,19822997,52452,427 +Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32009395,84810,527 +Agora/Governor/policy/totally legal,67334379,187470,1867 +Agora/Governor/validator/mutate/legal,115397394,308142,6308 From 91f7118ec3baaa35a87415ed7441a2eed390d42a Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 10 Aug 2022 17:37:59 +0800 Subject: [PATCH 71/78] parameterize scripts over `AgoraScripts` --- agora-purescript-bridge/AgoraTypes.hs | 4 +- agora-scripts/Main.hs | 96 +++++------ agora.cabal | 3 + agora/Agora/Bootstrap.hs | 67 ++++++++ agora/Agora/Effect.hs | 2 +- agora/Agora/Effect/GovernorMutation.hs | 15 +- agora/Agora/Governor/Scripts.hs | 212 +++---------------------- agora/Agora/Plutarch/Orphans.hs | 32 +++- agora/Agora/Proposal.hs | 27 +--- agora/Agora/Proposal/Scripts.hs | 52 +++--- agora/Agora/Proposal/Time.hs | 88 +++++----- agora/Agora/Scripts.hs | 138 ++++++++++++++++ agora/Agora/Stake.hs | 16 -- agora/Agora/Stake/Scripts.hs | 44 +++-- agora/Agora/Utils.hs | 203 +++-------------------- 15 files changed, 425 insertions(+), 574 deletions(-) create mode 100644 agora/Agora/Bootstrap.hs create mode 100644 agora/Agora/Scripts.hs diff --git a/agora-purescript-bridge/AgoraTypes.hs b/agora-purescript-bridge/AgoraTypes.hs index 253f5de7..21a41d9c 100644 --- a/agora-purescript-bridge/AgoraTypes.hs +++ b/agora-purescript-bridge/AgoraTypes.hs @@ -31,14 +31,12 @@ agoraTypes = , mkSumType (Proxy @Proposal.ProposalVotes) , mkSumType (Proxy @Proposal.ProposalDatum) , mkSumType (Proxy @Proposal.ProposalRedeemer) - , mkSumType (Proxy @Proposal.Proposal) , -- Governor mkSumType (Proxy @Governor.GovernorDatum) , mkSumType (Proxy @Governor.GovernorRedeemer) , mkSumType (Proxy @Governor.Governor) , -- Stake - mkSumType (Proxy @Stake.Stake) - , mkSumType (Proxy @Stake.ProposalLock) + mkSumType (Proxy @Stake.ProposalLock) , mkSumType (Proxy @Stake.StakeRedeemer) , mkSumType (Proxy @Stake.StakeDatum) , -- Treasury diff --git a/agora-scripts/Main.hs b/agora-scripts/Main.hs index 5191b85f..64ee8c39 100644 --- a/agora-scripts/Main.hs +++ b/agora-scripts/Main.hs @@ -8,16 +8,11 @@ -} module Main (main) where -import Agora.AuthorityToken (AuthorityToken, authorityTokenPolicy) -import Agora.Governor (Governor (Governor)) -import Agora.Governor qualified as Governor -import Agora.Governor.Scripts (authorityTokenFromGovernor, authorityTokenSymbolFromGovernor, governorPolicy, governorValidator, proposalFromGovernor, stakeFromGovernor) -import Agora.Proposal (Proposal) -import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) +import Agora.Bootstrap qualified as Bootstrap +import Agora.Governor (Governor (..)) import Agora.SafeMoney (GTTag) -import Agora.Stake (Stake) -import Agora.Stake.Scripts (stakePolicy, stakeValidator) -import Agora.Treasury (treasuryValidator) +import Agora.Scripts qualified as Scripts +import Agora.Utils (CompiledMintingPolicy (..), CompiledValidator (..)) import Data.Aeson qualified as Aeson import Data.Default (def) import Data.Function ((&)) @@ -25,13 +20,16 @@ import Data.Tagged (Tagged) import Data.Text (Text) import Development.GitRev (gitBranch, gitHash) import GHC.Generics qualified as GHC -import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) -import PlutusLedgerApi.V1 (TxOutRef) -import PlutusLedgerApi.V1.Value (AssetClass, CurrencySymbol) -import PlutusLedgerApi.V1.Value qualified as Value +import Plutarch (Config (..), TracingMode (DoTracing)) +import PlutusLedgerApi.V1 ( + MintingPolicy (getMintingPolicy), + TxOutRef, + Validator (getValidator), + ) +import PlutusLedgerApi.V1.Value (AssetClass) import ScriptExport.API (runServer) import ScriptExport.Options (parseOptions) -import ScriptExport.ScriptInfo (ScriptInfo, mkPolicyInfo, mkValidatorInfo) +import ScriptExport.ScriptInfo (ScriptInfo (..), mkPolicyInfo, mkScriptInfo, mkValidatorInfo) import ScriptExport.Types (Builders, insertBuilder) main :: IO () @@ -81,44 +79,23 @@ builders = agoraScripts :: ScriptParams -> AgoraScripts agoraScripts params = AgoraScripts - { governorPolicyInfo = mkPolicyInfo (governorPolicy governor) - , governorValidatorInfo = mkValidatorInfo (governorValidator governor) - , stakePolicyInfo = mkPolicyInfo (stakePolicy params.gtClassRef) - , stakeValidatorInfo = mkValidatorInfo (stakeValidator stake) - , proposalPolicyInfo = mkPolicyInfo (proposalPolicy governorSTAssetClass) - , proposalValidatorInfo = mkValidatorInfo (proposalValidator proposal) - , treasuryValidatorInfo = mkValidatorInfo (treasuryValidator authorityTokenSymbol) - , authorityTokenPolicyInfo = mkPolicyInfo (authorityTokenPolicy authorityToken) + { governorPolicyInfo = mkPolicyInfo' scripts.compiledGovernorPolicy + , governorValidatorInfo = mkValidatorInfo' scripts.compiledGovernorValidator + , stakePolicyInfo = mkPolicyInfo' scripts.compiledStakePolicy + , stakeValidatorInfo = mkValidatorInfo' scripts.compiledStakeValidator + , proposalPolicyInfo = mkPolicyInfo' scripts.compiledProposalPolicy + , proposalValidatorInfo = mkValidatorInfo' scripts.compiledProposalValidator + , treasuryValidatorInfo = mkValidatorInfo' scripts.compiledTreasuryValidator + , authorityTokenPolicyInfo = mkPolicyInfo' scripts.compiledAuthorityTokenPolicy } where - governor :: Governor governor = - Governor - { Governor.gstOutRef = params.governorInitialSpend - , Governor.gtClassRef = params.gtClassRef - , Governor.maximumCosigners = params.maximumCosigners - } + Agora.Governor.Governor + params.governorInitialSpend + params.gtClassRef + params.maximumCosigners - authorityToken :: AuthorityToken - authorityToken = authorityTokenFromGovernor governor - - authorityTokenSymbol :: CurrencySymbol - authorityTokenSymbol = authorityTokenSymbolFromGovernor governor - - governorSTAssetClass :: AssetClass - governorSTAssetClass = - Value.assetClass - ( mintingPolicySymbol $ - mkMintingPolicy def $ - governorPolicy governor - ) - "" - - proposal :: Proposal - proposal = proposalFromGovernor governor - - stake :: Stake - stake = stakeFromGovernor governor + scripts = Bootstrap.agoraScripts plutarchConfig governor {- | Params required for creating script export. @@ -162,3 +139,26 @@ data AgoraScripts = AgoraScripts , -- | @since 0.2.0 GHC.Generic ) + +{- | Default plutarch configuration for compiling scripts. + + TODO: we should have an option to control this. + + @since 0.2.0 +-} +plutarchConfig :: Config +plutarchConfig = Config {tracingMode = DoTracing} + +{- | Turn a precompiled minting policy to a 'ScriptInfo'. + + @since 0.2.0 +-} +mkPolicyInfo' :: forall redeemer. CompiledMintingPolicy redeemer -> ScriptInfo +mkPolicyInfo' = mkScriptInfo . getMintingPolicy . getCompiledMintingPolicy + +{- | Turn a precompiled validator to a 'ScriptInfo'. + + @since 0.2.0 +-} +mkValidatorInfo' :: forall redeemer datum. CompiledValidator datum redeemer -> ScriptInfo +mkValidatorInfo' = mkScriptInfo . getValidator . getCompiledValidator diff --git a/agora.cabal b/agora.cabal index 5fb6e634..b2c18f1c 100644 --- a/agora.cabal +++ b/agora.cabal @@ -95,6 +95,7 @@ common deps , bytestring , cardano-binary , cardano-prelude + , composition-prelude , containers , data-default , data-default-class @@ -143,6 +144,7 @@ library exposed-modules: Agora.Aeson.Orphans Agora.AuthorityToken + Agora.Bootstrap Agora.Effect Agora.Effect.GovernorMutation Agora.Effect.NoOp @@ -154,6 +156,7 @@ library Agora.Proposal.Scripts Agora.Proposal.Time Agora.SafeMoney + Agora.Scripts Agora.Stake Agora.Stake.Scripts Agora.Treasury diff --git a/agora/Agora/Bootstrap.hs b/agora/Agora/Bootstrap.hs new file mode 100644 index 00000000..17d97d3c --- /dev/null +++ b/agora/Agora/Bootstrap.hs @@ -0,0 +1,67 @@ +{- | Module : Agora.Bootstrap + Maintainer : connor@mlabs.city + Description: Initialize a governance system + + Initialize a governance system +-} +module Agora.Bootstrap (agoraScripts) where + +import Agora.AuthorityToken (AuthorityToken (..), authorityTokenPolicy) +import Agora.Governor (Governor (..)) +import Agora.Governor.Scripts (governorPolicy, governorValidator) +import Agora.Proposal.Scripts (proposalPolicy, proposalValidator) +import Agora.Scripts (AgoraScripts (AgoraScripts)) +import Agora.Scripts qualified as Scripts +import Agora.Stake.Scripts (stakePolicy, stakeValidator) +import Agora.Treasury (treasuryValidator) +import Agora.Utils ( + CompiledMintingPolicy (..), + CompiledValidator (..), + ) +import Plutarch (Config) +import Plutarch.Api.V1 ( + mintingPolicySymbol, + mkMintingPolicy, + mkValidator, + ) +import PlutusLedgerApi.V1.Value (AssetClass (..)) + +{- | Parameterize and precompiled core scripts, given the + 'Agora.Governor.Governor' parameters and plutarch configurations. + + @since 0.2.0 +-} +agoraScripts :: Config -> Governor -> AgoraScripts +agoraScripts conf gov = scripts + where + mkMintingPolicy' = mkMintingPolicy conf + mkValidator' = mkValidator conf + + compiledGovernorPolicy = mkMintingPolicy' $ governorPolicy gov.gstOutRef + compiledGovernorValidator = mkValidator' $ governorValidator scripts + governorSymbol = mintingPolicySymbol compiledGovernorPolicy + governorAssetClass = AssetClass (governorSymbol, "") + + authority = AuthorityToken governorAssetClass + compiledAuthorityPolicy = mkMintingPolicy' $ authorityTokenPolicy authority + authorityTokenSymbol = mintingPolicySymbol compiledAuthorityPolicy + + compiledProposalPolicy = mkMintingPolicy' $ proposalPolicy governorAssetClass + compiledProposalValidator = mkValidator' $ proposalValidator scripts gov.maximumCosigners + + compiledStakePolicy = mkMintingPolicy' $ stakePolicy gov.gtClassRef + compiledStakeValidator = mkValidator' $ stakeValidator scripts gov.gtClassRef + + compiledTreasuryValidator = mkValidator' $ treasuryValidator authorityTokenSymbol + + scripts = + AgoraScripts + { Scripts.compiledGovernorPolicy = CompiledMintingPolicy compiledGovernorPolicy + , Scripts.compiledGovernorValidator = CompiledValidator compiledGovernorValidator + , Scripts.compiledStakePolicy = CompiledMintingPolicy compiledStakePolicy + , Scripts.compiledStakeValidator = CompiledValidator compiledStakeValidator + , Scripts.compiledProposalPolicy = CompiledMintingPolicy compiledProposalPolicy + , Scripts.compiledProposalValidator = CompiledValidator compiledProposalValidator + , Scripts.compiledTreasuryValidator = CompiledValidator compiledTreasuryValidator + , Scripts.compiledAuthorityTokenPolicy = CompiledMintingPolicy compiledAuthorityPolicy + } diff --git a/agora/Agora/Effect.hs b/agora/Agora/Effect.hs index 84557cdb..96a7b328 100644 --- a/agora/Agora/Effect.hs +++ b/agora/Agora/Effect.hs @@ -23,7 +23,7 @@ import PlutusLedgerApi.V1.Value (CurrencySymbol) -} makeEffect :: forall (datum :: PType). - (PTryFrom PData datum) => + (PTryFrom PData datum, PIsData datum) => CurrencySymbol -> (forall (s :: S). Term s PCurrencySymbol -> Term s datum -> Term s PTxOutRef -> Term s (PAsData PTxInfo) -> Term s POpaque) -> ClosedTerm PValidator diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index 8e3383a0..ce26a404 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -20,16 +20,12 @@ module Agora.Effect.GovernorMutation ( import Agora.Effect (makeEffect) import Agora.Governor ( - Governor, GovernorDatum, PGovernorDatum, pisGovernorDatumValid, ) -import Agora.Governor.Scripts ( - authorityTokenSymbolFromGovernor, - governorSTAssetClassFromGovernor, - ) import Agora.Plutarch.Orphans () +import Agora.Scripts (AgoraScripts, authorityTokenSymbol, governorSTAssetClass) import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PTxOutRef, @@ -149,8 +145,11 @@ deriving anyclass instance PTryFrom PData PMutateGovernorDatum @since 0.1.0 -} -mutateGovernorValidator :: Governor -> ClosedTerm PValidator -mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) $ +mutateGovernorValidator :: + -- | Lazy precompiled scripts. This is beacuse we need the symbol of GST. + AgoraScripts -> + ClosedTerm PValidator +mutateGovernorValidator as = makeEffect (authorityTokenSymbol as) $ \_gatCs (datum :: Term _ PMutateGovernorDatum) _ txInfo -> unTermCont $ do datumF <- pletFieldsC @'["newDatum", "governorRef"] datum txInfoF <- pletFieldsC @'["mint", "inputs", "outputs", "datums"] txInfo @@ -223,4 +222,4 @@ mutateGovernorValidator gov = makeEffect (authorityTokenSymbolFromGovernor gov) gstValueOf :: Term s (PValue _ _ :--> PInteger) gstValueOf = phoistAcyclic $ plam $ \v -> pvalueOf # v # pconstant cs # pconstant tn where - AssetClass (cs, tn) = governorSTAssetClassFromGovernor gov + AssetClass (cs, tn) = governorSTAssetClass as diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index db659118..683815eb 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -12,33 +12,15 @@ module Agora.Governor.Scripts ( -- * Scripts governorPolicy, governorValidator, - - -- * Bridges - governorSTSymbolFromGovernor, - governorSTAssetClassFromGovernor, - proposalSTAssetClassFromGovernor, - stakeSTSymbolFromGovernor, - stakeFromGovernor, - stakeValidatorHashFromGovernor, - proposalFromGovernor, - proposalValidatorHashFromGovernor, - proposalSTSymbolFromGovernor, - stakeSTAssetClassFromGovernor, - governorValidatorHash, - authorityTokenFromGovernor, - authorityTokenSymbolFromGovernor, ) where -------------------------------------------------------------------------------- import Agora.AuthorityToken ( - AuthorityToken (..), - authorityTokenPolicy, authorityTokensValidIn, singleAuthorityTokenBurned, ) import Agora.Governor ( - Governor (gstOutRef, gtClassRef, maximumCosigners), GovernorRedeemer (..), PGovernorDatum (PGovernorDatum), pgetNextProposalId, @@ -46,7 +28,6 @@ import Agora.Governor ( ) import Agora.Proposal ( PProposalDatum (..), - Proposal (..), ProposalStatus (Draft, Locked), phasNeutralEffect, pisEffectsVotesCompatible, @@ -54,27 +35,17 @@ import Agora.Proposal ( pneutralOption, pwinner, ) -import Agora.Proposal.Scripts ( - proposalPolicy, - proposalValidator, - ) import Agora.Proposal.Time (createProposalStartingTime) +import Agora.Scripts (AgoraScripts, authorityTokenSymbol, governorSTSymbol, proposalSTSymbol, proposalValidatoHash, stakeSTSymbol) import Agora.Stake ( PProposalLock (..), PStakeDatum (..), - Stake (..), pnumCreatedProposals, ) -import Agora.Stake.Scripts ( - stakePolicy, - stakeValidator, - ) import Agora.Utils ( mustFindDatum', validatorHashToAddress, - validatorHashToTokenName, ) -import Data.Default (def) import Plutarch.Api.V1 ( PAddress, PCurrencySymbol, @@ -85,10 +56,6 @@ import Plutarch.Api.V1 ( PTxOut, PValidator, PValidatorHash, - mintingPolicySymbol, - mkMintingPolicy, - mkValidator, - validatorHash, ) import Plutarch.Api.V1.AssetClass ( passetClass, @@ -110,17 +77,10 @@ import Plutarch.Extra.Map ( plookup, plookup', ) -import Plutarch.Extra.Maybe (passertPDJust, passertPJust, pisDJust) +import Plutarch.Extra.Maybe (passertPDJust, passertPJust, pfromJust, pisDJust) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) -import PlutusLedgerApi.V1 ( - CurrencySymbol (..), - MintingPolicy, - ) -import PlutusLedgerApi.V1.Scripts (ValidatorHash (..)) -import PlutusLedgerApi.V1.Value ( - AssetClass (..), - ) +import PlutusLedgerApi.V1 (TxOutRef) -------------------------------------------------------------------------------- @@ -151,10 +111,10 @@ import PlutusLedgerApi.V1.Value ( @since 0.1.0 -} -governorPolicy :: Governor -> ClosedTerm PMintingPolicy -governorPolicy gov = +governorPolicy :: TxOutRef -> ClosedTerm PMintingPolicy +governorPolicy initialSpend = plam $ \_ ctx' -> unTermCont $ do - let oref = pconstant gov.gstOutRef + let oref = pconstant initialSpend PMinting ((pfield @"_0" #) -> ownSymbol) <- pmatchC (pfromData $ pfield @"purpose" # ctx') let ownAssetClass = passetClass # ownSymbol # pconstant "" @@ -273,8 +233,11 @@ governorPolicy gov = @since 0.1.0 -} -governorValidator :: Governor -> ClosedTerm PValidator -governorValidator gov = +governorValidator :: + -- | Lazy precompiled scripts. + AgoraScripts -> + ClosedTerm PValidator +governorValidator as = plam $ \datum' redeemer' ctx' -> unTermCont $ do ctxF <- pletAllC ctx' @@ -404,7 +367,7 @@ governorValidator gov = proposalOutputDatum <- pletAllC $ pto $ pfromData proposalOutputDatum' let expectedStartingTime = - createProposalStartingTime + pfromJust #$ createProposalStartingTime # oldGovernorDatumF.createProposalTimeRangeMaxWidth # txInfoF.validRange @@ -604,160 +567,23 @@ governorValidator gov = where -- The currency symbol of authority token. patSymbol :: Term s PCurrencySymbol - patSymbol = phoistAcyclic $ pconstant $ authorityTokenSymbolFromGovernor gov + patSymbol = pconstant $ authorityTokenSymbol as -- The currency symbol of the proposal state token. ppstSymbol :: Term s PCurrencySymbol - ppstSymbol = - let AssetClass (sym, _) = proposalSTAssetClassFromGovernor gov - in phoistAcyclic $ pconstant sym + ppstSymbol = pconstant $ proposalSTSymbol as -- The address of the proposal validator. pproposalValidatorAddress :: Term s PAddress pproposalValidatorAddress = - let vh = proposalValidatorHashFromGovernor gov - in phoistAcyclic $ pconstant $ validatorHashToAddress vh + pconstant $ + validatorHashToAddress $ + proposalValidatoHash as -- The currency symbol of the stake state token. psstSymbol :: Term s PCurrencySymbol - psstSymbol = - let sym = stakeSTSymbolFromGovernor gov - in phoistAcyclic $ pconstant sym + psstSymbol = pconstant $ stakeSTSymbol as -- The currency symbol of the governor state token. pgstSymbol :: Term s PCurrencySymbol - pgstSymbol = - let sym = governorSTSymbolFromGovernor gov - in phoistAcyclic $ pconstant sym - --------------------------------------------------------------------------------- - -{- | Get the 'CurrencySymbol' of GST. - - @since 0.1.0 --} -governorSTSymbolFromGovernor :: Governor -> CurrencySymbol -governorSTSymbolFromGovernor gov = mintingPolicySymbol policy - where - policy :: MintingPolicy - policy = mkMintingPolicy def $ governorPolicy gov - -{- | Get the 'AssetClass' of GST. - - @since 0.1.0 --} -governorSTAssetClassFromGovernor :: Governor -> AssetClass -governorSTAssetClassFromGovernor gov = AssetClass (symbol, "") - where - symbol :: CurrencySymbol - symbol = governorSTSymbolFromGovernor gov - -{- | Get the 'CurrencySymbol' of the proposal state token. - - @since 0.1.0 --} -proposalSTSymbolFromGovernor :: Governor -> CurrencySymbol -proposalSTSymbolFromGovernor gov = symbol - where - gstAC = governorSTAssetClassFromGovernor gov - policy = mkMintingPolicy def $ proposalPolicy gstAC - symbol = mintingPolicySymbol policy - -{- | Get the 'AssetClass' of the proposal state token. - - @since 0.1.0 --} -proposalSTAssetClassFromGovernor :: Governor -> AssetClass -proposalSTAssetClassFromGovernor gov = AssetClass (symbol, "") - where - symbol = proposalSTSymbolFromGovernor gov - -{- | Get the 'CurrencySymbol' of the stake token/ - - @since 0.1.0 --} -stakeSTSymbolFromGovernor :: Governor -> CurrencySymbol -stakeSTSymbolFromGovernor gov = mintingPolicySymbol policy - where - policy = mkMintingPolicy def $ stakePolicy gov.gtClassRef - -{- | Get the 'AssetClass' of the stake token. - - Note that the token is tagged with the hash of the stake validator. - See 'Agora.Stake.Script.stakePolicy'. - - @since 0.1.0 --} -stakeSTAssetClassFromGovernor :: Governor -> AssetClass -stakeSTAssetClassFromGovernor gov = AssetClass (symbol, tokenName) - where - symbol = stakeSTSymbolFromGovernor gov - - -- Tag with the address where the token is being sent to. - tokenName = validatorHashToTokenName $ stakeValidatorHashFromGovernor gov - -{- | Get the 'Stake' parameter, given the 'Governor' parameter. - - @since 0.1.0 --} -stakeFromGovernor :: Governor -> Stake -stakeFromGovernor gov = - Stake gov.gtClassRef $ - proposalSTAssetClassFromGovernor gov - -{- | Get the hash of 'Agora.Stake.Script.stakePolicy'. - - @since 0.1.0 --} -stakeValidatorHashFromGovernor :: Governor -> ValidatorHash -stakeValidatorHashFromGovernor gov = validatorHash validator - where - params = stakeFromGovernor gov - validator = mkValidator def $ stakeValidator params - -{- | Get the 'Proposal' parameter, given the 'Governor' parameter. - - @since 0.1.0 --} -proposalFromGovernor :: Governor -> Proposal -proposalFromGovernor gov = Proposal gstAC sstAC mc - where - gstAC = governorSTAssetClassFromGovernor gov - mc = gov.maximumCosigners - sstAC = stakeSTAssetClassFromGovernor gov - -{- | Get the hash of 'Agora.Proposal.proposalPolicy'. - - @since 0.1.0 --} -proposalValidatorHashFromGovernor :: Governor -> ValidatorHash -proposalValidatorHashFromGovernor gov = validatorHash validator - where - params = proposalFromGovernor gov - validator = mkValidator def $ proposalValidator params - -{- | Get the hash of 'Agora.Proposal.proposalValidator'. - - @since 0.1.0 --} -governorValidatorHash :: Governor -> ValidatorHash -governorValidatorHash gov = validatorHash validator - where - validator = mkValidator def $ governorValidator gov - -{- | Get the 'AuthorityToken' parameter given the 'Governor' parameter. - - @since 0.1.0 --} -authorityTokenFromGovernor :: Governor -> AuthorityToken -authorityTokenFromGovernor gov = AuthorityToken $ governorSTAssetClassFromGovernor gov - -{- | Get the 'CurrencySymbol' of the authority token. - - @since 0.1.0 --} -authorityTokenSymbolFromGovernor :: Governor -> CurrencySymbol -authorityTokenSymbolFromGovernor gov = mintingPolicySymbol policy - where - policy = mkMintingPolicy def $ authorityTokenPolicy params - params = authorityTokenFromGovernor gov + pgstSymbol = pconstant $ governorSTSymbol as diff --git a/agora/Agora/Plutarch/Orphans.hs b/agora/Agora/Plutarch/Orphans.hs index a1ccae37..57778e67 100644 --- a/agora/Agora/Plutarch/Orphans.hs +++ b/agora/Agora/Plutarch/Orphans.hs @@ -1,15 +1,39 @@ {-# OPTIONS_GHC -Wno-orphans #-} +{- FIXME: All of the following instances and + types ought to belong in either plutarch or + plutarch-extra. +-} + module Agora.Plutarch.Orphans () where -import Plutarch.Api.V1 (PDatumHash) +import Plutarch.Api.V1 (PDatumHash (..)) import Plutarch.Builtin (PIsData (..)) +import Plutarch.Extra.TermCont (ptryFromC) +import Plutarch.TryFrom (PTryFrom (..)) +import Plutarch.Unsafe (punsafeCoerce) + +newtype Flip f a b = Flip (f b a) deriving stock (Generic) + +-- | @since 0.1.0 +instance PTryFrom PData (PAsData PDatumHash) where + type PTryFromExcess PData (PAsData PDatumHash) = Flip Term PDatumHash + ptryFrom' opq = runTermCont $ do + (pfromData -> unwrapped, _) <- ptryFromC @(PAsData PByteString) opq + + tcont $ \f -> + pif + -- Blake2b_256 hash: 256 bits/32 bytes. + (plengthBS # unwrapped #== 32) + (f ()) + (ptraceError "ptryFrom(PDatumHash): must be 32 bytes long") --- TODO: add checks -instance PTryFrom PData (PAsData PDatumHash) + pure (punsafeCoerce opq, pcon $ PDatumHash unwrapped) +-- | @since 0.2.0 instance PTryFrom PData (PAsData PUnit) +-- | @since 0.2.0 instance (PIsData a) => PIsData (PAsData a) where - pfromDataImpl = pfromData + pfromDataImpl = punsafeCoerce pdataImpl = pdataImpl . pfromData diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index 917d581a..eee62f8d 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -9,7 +9,8 @@ Proposal scripts encoding effects that operate on the system. -} module Agora.Proposal ( -- * Haskell-land - Proposal (..), + + -- Proposal (..), ProposalDatum (..), ProposalRedeemer (..), ProposalStatus (..), @@ -76,7 +77,6 @@ import Plutarch.Lift ( import Plutarch.SafeMoney (PDiscrete (..)) import Plutarch.Show (PShow (..)) import PlutusLedgerApi.V1 (DatumHash, PubKeyHash, ValidatorHash) -import PlutusLedgerApi.V1.Value (AssetClass) import PlutusTx qualified import PlutusTx.AssocMap qualified as AssocMap @@ -398,29 +398,6 @@ PlutusTx.makeIsDataIndexed , ('AdvanceProposal, 3) ] -{- | Parameters that identify the Proposal validator script. - - @since 0.1.0 --} -data Proposal = Proposal - { governorSTAssetClass :: AssetClass - , stakeSTAssetClass :: AssetClass - , maximumCosigners :: Integer - -- ^ Arbitrary limit for maximum amount of cosigners on a proposal. - } - deriving stock - ( -- | @since 0.1.0 - Show - , -- | @since 0.1.0 - Eq - , -- | @since 0.1.0 - Generic - ) - deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - ) - -------------------------------------------------------------------------------- -- Plutarch-land diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 7e897e54..1da4178a 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -14,7 +14,6 @@ import Agora.Proposal ( PProposalDatum (PProposalDatum), PProposalRedeemer (..), PProposalVotes (PProposalVotes), - Proposal (..), ProposalStatus (..), pretractVotes, pwinner', @@ -26,6 +25,7 @@ import Agora.Proposal.Time ( isLockingPeriod, isVotingPeriod, ) +import Agora.Scripts (AgoraScripts, governorSTSymbol, proposalSTSymbol, stakeSTAssetClass) import Agora.Stake ( PProposalLock (..), PStakeDatum (..), @@ -37,7 +37,6 @@ import Agora.Stake ( pisVoter, ) import Agora.Utils ( - getMintingPolicySymbol, mustFindDatum', pltAsData, ) @@ -75,7 +74,7 @@ import Plutarch.Extra.TermCont ( ) import Plutarch.SafeMoney (PDiscrete (..)) import Plutarch.Unsafe (punsafeCoerce) -import PlutusLedgerApi.V1.Value (AssetClass (AssetClass, unAssetClass)) +import PlutusLedgerApi.V1.Value (AssetClass (AssetClass)) {- | Policy for Proposals. @@ -152,8 +151,13 @@ proposalPolicy (AssetClass (govCs, govTn)) = @since 0.1.0 -} -proposalValidator :: Proposal -> ClosedTerm PValidator -proposalValidator proposal = +proposalValidator :: + -- | Lazy precompiled scripts. + AgoraScripts -> + -- | See 'Agora.Governor.Governor.maximumCosigners'. + Integer -> + ClosedTerm PValidator +proposalValidator as maximumCosigners = plam $ \datum redeemer ctx' -> unTermCont $ do PScriptContext ctx' <- pmatchC ctx' ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' @@ -185,8 +189,7 @@ proposalValidator proposal = currentStatus <- pletC $ pfromData $ proposalF.status - let stCurrencySymbol = - pconstant $ getMintingPolicySymbol (proposalPolicy proposal.governorSTAssetClass) + let stCurrencySymbol = pconstant $ proposalSTSymbol as signedBy <- pletC $ ptxSignedBy # txInfoF.signatories @@ -239,20 +242,6 @@ proposalValidator proposal = onlyStatusChanged <- pletC $ - -- Only the status of proposals is updated. - - -- Only the status of proposals is updated. - - -- Only the status of proposals is updated. - - -- Only the status of proposals is updated. - - -- Only the status of proposals is updated. - - -- Only the status of proposals is updated. - - -- Only the status of proposals is updated. - -- Only the status of proposals is updated. proposalOut #== mkRecordConstr @@ -271,7 +260,7 @@ proposalValidator proposal = -- Find the stake inputs/outputs by SST. - let AssetClass (stakeSym, stakeTn) = proposal.stakeSTAssetClass + let AssetClass (stakeSym, stakeTn) = stakeSTAssetClass as stakeSTAssetClass <- pletC $ passetClass # pconstant stakeSym # pconstant stakeTn @@ -421,7 +410,7 @@ proposalValidator proposal = # proposalF.cosigners pguardC "Less cosigners than maximum limit" $ - plength # updatedSigs #< pconstant proposal.maximumCosigners + plength # updatedSigs #< pconstant maximumCosigners pguardC "Cosigners are unique" $ pisUniq' # updatedSigs @@ -456,6 +445,7 @@ proposalValidator proposal = pguardC "Proposal time should be wthin the voting period" $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime + #$ pfromJust # currentTime -- Ensure the transaction is voting to a valid 'ResultTag'(outcome). @@ -610,8 +600,9 @@ proposalValidator proposal = ---------------------------------------------------------------------- PAdvanceProposal _ -> - let fromDraft = withMultipleStakes $ \totalStakedAmount sortedStakeOwners -> - pmatchC (isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime) >>= \case + let currentTime' = pfromJust # currentTime + fromDraft = withMultipleStakes $ \totalStakedAmount sortedStakeOwners -> + pmatchC (isDraftPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime') >>= \case PTrue -> do pguardC "More cosigns than minimum amount" $ punsafeCoerce (pfromData thresholdsF.vote) #< totalStakedAmount @@ -636,9 +627,9 @@ proposalValidator proposal = "Only status changes in the output proposal" onlyStatusChanged - inVotingPeriod <- pletC $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime - inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime + inVotingPeriod <- pletC $ isVotingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime' + inLockedPeriod <- pletC $ isLockingPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime' + inExecutionPeriod <- pletC $ isExecutionPeriod # proposalF.timingConfig # proposalF.startingTime # currentTime' proposalStatus <- pletC $ pto $ pfromData proposalF.status @@ -659,10 +650,7 @@ proposalValidator proposal = pguardC "Cannot advance ahead of time" notTooEarly pguardC "Finished proposals cannot be advanced" $ pnot # isFinished - let gstSymbol = - pconstant $ - fst $ - unAssetClass proposal.governorSTAssetClass + let gstSymbol = pconstant $ governorSTSymbol as gstMoved <- pletC $ diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index c6da780e..f50c3a33 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -30,6 +30,7 @@ module Agora.Proposal.Time ( pisMaxTimeRangeWidthValid, ) where +import Control.Composition ((.*)) import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PExtended (PFinite), @@ -43,14 +44,16 @@ import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, ) -import Plutarch.Extra.Field (pletAllC) -import Plutarch.Extra.TermCont (pguardC, pmatchC) +import Plutarch.Extra.Applicative (PApply (pliftA2)) +import Plutarch.Extra.Field (pletAll, pletAllC) +import Plutarch.Extra.Maybe (pjust, pmaybe, pnothing) +import Plutarch.Extra.TermCont (pmatchC) import Plutarch.Lift ( DerivePConstantViaNewtype (..), PConstantDecl, PUnsafeLiftDecl (..), ) -import PlutusLedgerApi.V1.Time (POSIXTime) +import PlutusLedgerApi.V1 (POSIXTime) import PlutusTx qualified import Prelude @@ -344,23 +347,33 @@ pisMaxTimeRangeWidthValid = @since 0.1.0 -} -createProposalStartingTime :: forall (s :: S). Term s (PMaxTimeRangeWidth :--> PPOSIXTimeRange :--> PProposalStartingTime) +createProposalStartingTime :: + forall (s :: S). + Term + s + ( PMaxTimeRangeWidth + :--> PPOSIXTimeRange + :--> PMaybe PProposalStartingTime + ) createProposalStartingTime = phoistAcyclic $ - plam $ \(pto -> maxDuration) iv -> unTermCont $ do - currentTimeF <- pmatchC $ currentProposalTime # iv - - -- Use the middle of the current time range as the starting time. - let duration = currentTimeF.upperBound - currentTimeF.lowerBound - - startingTime = - pdiv - # (currentTimeF.lowerBound + currentTimeF.upperBound) - # 2 - - pguardC "createProposalStartingTime: given time range should be tight enough" $ - duration #<= maxDuration - - pure $ pcon $ PProposalStartingTime startingTime + plam $ \(pto -> maxDuration) iv -> + let ct = currentProposalTime # iv + + f :: Term _ (PProposalTime :--> PMaybe PProposalStartingTime) + f = plam $ + flip pmatch $ \(PProposalTime lb ub) -> + let duration = ub - lb + + startingTime = pdiv # (lb + ub) # 2 + in pif + (duration #<= maxDuration) + (pjust #$ pcon $ PProposalStartingTime startingTime) + ( ptrace + "createProposalStartingTime: given time range should be tight enough" + pnothing + ) + in -- TODO: PMonad when? + pmaybe # pnothing # f # ct {- | Get the current proposal time, from the 'PlutusLedgerApi.V1.txInfoValidPeriod' field. @@ -369,33 +382,30 @@ createProposalStartingTime = phoistAcyclic $ @since 0.1.0 -} -currentProposalTime :: forall (s :: S). Term s (PPOSIXTimeRange :--> PProposalTime) +currentProposalTime :: forall (s :: S). Term s (PPOSIXTimeRange :--> PMaybe PProposalTime) currentProposalTime = phoistAcyclic $ plam $ \iv -> unTermCont $ do PInterval iv' <- pmatchC iv ivf <- pletAllC iv' PLowerBound lb <- pmatchC ivf.from PUpperBound ub <- pmatchC ivf.to - lbf <- pletAllC lb - ubf <- pletAllC ub - pure $ - pcon $ - PProposalTime - { lowerBound = - pmatch - lbf._0 - ( \case - PFinite ((pfield @"_0" #) -> d) -> d - _ -> ptraceError "currentProposalTime: Can't get fully-bounded proposal time." - ) - , upperBound = - pmatch - ubf._0 - ( \case - PFinite ((pfield @"_0" #) -> d) -> d - _ -> ptraceError "currentProposalTime: Can't get fully-bounded proposal time." + + let getBound = phoistAcyclic $ + plam $ + flip pletAll $ \f -> + pif + f._1 + ( pmatch f._0 $ \case + PFinite (pfromData . (pfield @"_0" #) -> d) -> pjust # d + _ -> ptrace "currentProposalTime: time range should be bounded" pnothing ) - } + (ptrace "currentProposalTime: time range should be inclusive" pnothing) + + lowerBound = getBound # lb + upperBound = getBound # ub + + mkTime = phoistAcyclic $ plam $ pcon .* PProposalTime + pure $ pliftA2 # mkTime # lowerBound # upperBound {- | Check if 'PProposalTime' is within two 'PPOSIXTime'. Inclusive. diff --git a/agora/Agora/Scripts.hs b/agora/Agora/Scripts.hs new file mode 100644 index 00000000..9a76167e --- /dev/null +++ b/agora/Agora/Scripts.hs @@ -0,0 +1,138 @@ +{- | Module : Agora.Scripts + Maintainer : connor@mlabs.city + Description: Precompiled core scripts and utilities + + Precompiled core scripts and utilities +-} +module Agora.Scripts ( + AgoraScripts (..), + governorSTSymbol, + governorSTAssetClass, + governorValidatorHash, + proposalSTSymbol, + proposalSTAssetClass, + proposalValidatoHash, + stakeSTSymbol, + stakeSTAssetClass, + stakeValidatorHash, + authorityTokenSymbol, + treasuryValidatorHash, +) where + +import Agora.Governor (GovernorDatum, GovernorRedeemer) +import Agora.Proposal (ProposalDatum, ProposalRedeemer) +import Agora.Stake (StakeDatum, StakeRedeemer) +import Agora.Treasury (TreasuryRedeemer) +import Agora.Utils (CompiledMintingPolicy (..), CompiledValidator (..), validatorHashToTokenName) +import Plutarch.Api.V1 (mintingPolicySymbol, validatorHash) +import PlutusLedgerApi.V1 (CurrencySymbol) +import PlutusLedgerApi.V1.Scripts (ValidatorHash) +import PlutusLedgerApi.V1.Value (AssetClass (..)) + +{- | Precompiled core scripts. + + Including: + + - Governor policy + - Governor validator + - Proposal policy + - Proposal validator + - Stake policy + - Stake validator + - Treasury validator + - Authority token policy + + @since 0.2.0 +-} +data AgoraScripts = AgoraScripts + { compiledGovernorPolicy :: CompiledMintingPolicy () + , compiledGovernorValidator :: CompiledValidator GovernorDatum GovernorRedeemer + , compiledStakePolicy :: CompiledMintingPolicy () + , compiledStakeValidator :: CompiledValidator StakeDatum StakeRedeemer + , compiledProposalPolicy :: CompiledMintingPolicy () + , compiledProposalValidator :: CompiledValidator ProposalDatum ProposalRedeemer + , compiledTreasuryValidator :: CompiledValidator () TreasuryRedeemer + , compiledAuthorityTokenPolicy :: CompiledMintingPolicy () + } + +{- | Get the currency symbol of the governor state token. + + @since 0.2.0 +-} +governorSTSymbol :: AgoraScripts -> CurrencySymbol +governorSTSymbol = mintingPolicySymbol . getCompiledMintingPolicy . compiledGovernorPolicy + +{- | Get the asset class of the governor state token. + + @since 0.2.0 +-} +governorSTAssetClass :: AgoraScripts -> AssetClass +governorSTAssetClass as = AssetClass (governorSTSymbol as, "") + +{- | Get the script hash of the governor validator. + + @since 0.2.0 +-} +governorValidatorHash :: AgoraScripts -> ValidatorHash +governorValidatorHash = validatorHash . getCompiledValidator . compiledGovernorValidator + +{- | Get the currency symbol of the propsoal state token. + + @since 0.2.0 +-} +proposalSTSymbol :: AgoraScripts -> CurrencySymbol +proposalSTSymbol as = mintingPolicySymbol $ getCompiledMintingPolicy as.compiledProposalPolicy + +{- | Get the asset class of the governor state token. + + @since 0.2.0 +-} +proposalSTAssetClass :: AgoraScripts -> AssetClass +proposalSTAssetClass as = AssetClass (proposalSTSymbol as, "") + +{- | Get the script hash of the proposal validator. + + @since 0.2.0 +-} +proposalValidatoHash :: AgoraScripts -> ValidatorHash +proposalValidatoHash = validatorHash . getCompiledValidator . compiledProposalValidator + +{- | Get the script hash of the governor validator. + + @since 0.2.0 +-} +stakeSTSymbol :: AgoraScripts -> CurrencySymbol +stakeSTSymbol = mintingPolicySymbol . getCompiledMintingPolicy . compiledStakePolicy + +{- | Get the asset class of the stake state token. + + Note that this token is tagged with the hash of the stake validator. + See 'Agora.Stake.Script.stakePolicy'. + + @since 0.2.0 +-} +stakeSTAssetClass :: AgoraScripts -> AssetClass +stakeSTAssetClass as = + let tn = validatorHashToTokenName $ stakeValidatorHash as + in AssetClass (stakeSTSymbol as, tn) + +{- | Get the script hash of the stake validator. + + @since 0.2.0 +-} +stakeValidatorHash :: AgoraScripts -> ValidatorHash +stakeValidatorHash = validatorHash . getCompiledValidator . compiledStakeValidator + +{- | Get the currency symbol of the authority token. + + @since 0.2.0 +-} +authorityTokenSymbol :: AgoraScripts -> CurrencySymbol +authorityTokenSymbol = mintingPolicySymbol . getCompiledMintingPolicy . compiledAuthorityTokenPolicy + +{- | Get the script hash of the treasury validator. + + @since 0.2.0 +-} +treasuryValidatorHash :: AgoraScripts -> ValidatorHash +treasuryValidatorHash = validatorHash . getCompiledValidator . compiledTreasuryValidator diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 70a5f2cb..094fc54c 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -11,7 +11,6 @@ module Agora.Stake ( -- * Haskell-land StakeDatum (..), StakeRedeemer (..), - Stake (..), ProposalLock (..), -- * Plutarch-land @@ -54,26 +53,11 @@ import Plutarch.Lift (PConstantDecl, PUnsafeLiftDecl (..)) import Plutarch.SafeMoney (PDiscrete) import Plutarch.Show (PShow (..)) import PlutusLedgerApi.V1 (PubKeyHash) -import PlutusLedgerApi.V1.Value (AssetClass) import PlutusTx qualified import Prelude hiding (Num (..)) -------------------------------------------------------------------------------- -{- | Parameters for creating Stake scripts. - - @since 0.1.0 --} -data Stake = Stake - { gtClassRef :: Tagged GTTag AssetClass - -- ^ Used when inlining the AssetClass of a 'PDiscrete' in the script code. - , proposalSTClass :: AssetClass - } - deriving stock - ( -- | @since 0.1.0 - Generic - ) - {- | Locks that are stored in the stake datums for various purposes. NOTE: Due to retracting votes always being possible, diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index cc40a7d8..1dc9a194 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -8,20 +8,17 @@ Plutus Scripts for Stakes. module Agora.Stake.Scripts (stakePolicy, stakeValidator) where import Agora.SafeMoney (GTTag) +import Agora.Scripts (AgoraScripts, proposalSTAssetClass, stakeSTSymbol) import Agora.Stake ( PStakeDatum (PStakeDatum), PStakeRedeemer (..), - Stake (gtClassRef, proposalSTClass), StakeRedeemer (WitnessStake), pstakeLocked, ) import Agora.Utils ( mustFindDatum', - pdjust, - pdnothing, pvalidatorHashToTokenName, ) -import Data.Default (def) import Data.Function (on) import Data.Tagged (Tagged (..), untag) import Plutarch.Api.V1 ( @@ -35,18 +32,15 @@ import Plutarch.Api.V1 ( PTxOut, PValidator, PValue, - mintingPolicySymbol, - mkMintingPolicy, ) import Plutarch.Api.V1.AssetClass (passetClass, passetClassValueOf, pvalueOf) import Plutarch.Api.V1.ScriptContext (pfindTxInByTxOutRef, ptxSignedBy, pvalueSpent) import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (pgeqByClass', pgeqBySymbol, psymbolValueOf) import Plutarch.Extra.Field (pletAllC) import Plutarch.Extra.List (pmapMaybe, pmsortBy) -import Plutarch.Extra.Maybe (passertPJust, pfromDJust) +import Plutarch.Extra.Maybe (passertPJust, pdjust, pdnothing, pfromDJust, pmaybeData) import Plutarch.Extra.Record (mkRecordConstr, (.&), (.=)) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) -import Plutarch.Internal (punsafeCoerce) import Plutarch.Numeric.Additive (AdditiveMonoid (zero), AdditiveSemigroup ((+))) import Plutarch.SafeMoney ( pdiscreteValue', @@ -223,8 +217,13 @@ stakePolicy gtClassRef = @since 0.1.0 -} -stakeValidator :: Stake -> ClosedTerm PValidator -stakeValidator stake = +stakeValidator :: + -- | Lazy precompiled scripts. + AgoraScripts -> + -- | See 'Agora.Governor.Governor.gtClassRef'. + Tagged GTTag AssetClass -> + ClosedTerm PValidator +stakeValidator as gtClassRef = plam $ \datum redeemer ctx' -> unTermCont $ do ctx <- pletFieldsC @'["txInfo", "purpose"] ctx' txInfo <- pletC $ pfromData ctx.txInfo @@ -240,9 +239,7 @@ stakeValidator stake = stakeRedeemer <- fst <$> ptryFromC redeemer - -- TODO: Use PTryFrom - let stakeDatum' :: Term _ PStakeDatum - stakeDatum' = pfromData $ punsafeCoerce datum + stakeDatum' <- pfromData . fst <$> ptryFromC datum stakeDatum <- pletAllC $ pto stakeDatum' PSpending txOutRef <- pmatchC $ pfromData ctx.purpose @@ -258,17 +255,14 @@ stakeValidator stake = signedBy <- pletC $ ptxSignedBy # txInfoF.signatories ownerSignsTransaction <- pletC $ signedBy # stakeDatum.owner - delegateSignsTransaction <- - pletC $ pconstant False - -- pmaybeData # pconstant False - -- # plam (signedBy #) - -- # stakeDatum.delegatedTo - stCurrencySymbol <- + delegateSignsTransaction <- pletC $ - pconstant $ - mintingPolicySymbol $ - mkMintingPolicy def (stakePolicy stake.gtClassRef) + pmaybeData # pconstant False + # signedBy + # stakeDatum.delegatedTo + + stCurrencySymbol <- pletC $ pconstant $ stakeSTSymbol as mintedST <- pletC $ psymbolValueOf # stCurrencySymbol # txInfoF.mint valueSpent <- pletC $ pvalueSpent # txInfoF.inputs spentST <- pletC $ psymbolValueOf # stCurrencySymbol #$ valueSpent @@ -294,7 +288,7 @@ stakeValidator stake = -- Handle redeemers that require own stake output. _ -> unTermCont $ do - let AssetClass (propCs, propTn) = stake.proposalSTClass + let AssetClass (propCs, propTn) = proposalSTAssetClass as proposalSTClass = passetClass # pconstant propCs # pconstant propTn spentProposalST = passetClassValueOf # valueSpent # proposalSTClass @@ -496,7 +490,7 @@ stakeValidator stake = datumCorrect = stakeOut #== expectedDatum let valueDelta :: Term _ (PValue _ 'Positive) - valueDelta = pdiscreteValue' stake.gtClassRef # delta + valueDelta = pdiscreteValue' gtClassRef # delta expectedValue = resolvedF.value <> valueDelta @@ -507,7 +501,7 @@ stakeValidator stake = [ pgeqByClass' (AssetClass ("", "")) # ownOutputValue # expectedValue - , pgeqByClass' (untag stake.gtClassRef) + , pgeqByClass' (untag gtClassRef) # ownOutputValue # expectedValue , pgeqBySymbol diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 6406b0c4..8b7ffb61 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -9,57 +9,35 @@ 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 ( - scriptHashFromAddress, - findOutputsToAddress, - findTxOutDatum, validatorHashToTokenName, pvalidatorHashToTokenName, - getMintingPolicySymbol, - hasOnlyOneTokenOfCurrencySymbol, mustFindDatum', - mustBePJust, - mustBePDJust, validatorHashToAddress, - isScriptAddress, - isPubKey, pltAsData, - pon, withBuiltinPairAsData, - pmaybeData, - pmaybe, - pdjust, - pdnothing, + CompiledValidator (..), + CompiledMintingPolicy (..), + CompiledEffect (..), ) where -import Data.Default (Default (def)) import Plutarch.Api.V1 ( - AmountGuarantees, - KeyGuarantees, - PAddress, - PCredential (PScriptCredential), - PCurrencySymbol, PDatum, PDatumHash, - PMaybeData (PDJust, PDNothing), - PMintingPolicy, + PMaybeData, PTokenName (PTokenName), PTuple, - PTxOut, PValidatorHash, - PValue, - mintingPolicySymbol, - mkMintingPolicy, ) -import Plutarch.Api.V1.ScriptContext (pfindDatum) -import "liqwid-plutarch-extra" Plutarch.Api.V1.Value (psymbolValueOf) import Plutarch.Builtin (pforgetData) import Plutarch.Extra.List (plookupTuple) -import Plutarch.Extra.TermCont (pletC, pmatchC, ptryFromC) +import Plutarch.Extra.Maybe (passertPDJust, passertPJust) +import Plutarch.Extra.TermCont (ptryFromC) import PlutusLedgerApi.V1 ( Address (..), Credential (..), - CurrencySymbol, + MintingPolicy, TokenName (..), + Validator, ValidatorHash (..), ) @@ -67,60 +45,6 @@ import PlutusLedgerApi.V1 ( All of these functions are quite inefficient. -} -{- | Get script hash from an Address. - - @since 0.1.0 --} -scriptHashFromAddress :: Term s (PAddress :--> PMaybe PValidatorHash) -scriptHashFromAddress = phoistAcyclic $ - plam $ \addr -> - pmatch (pfromData $ pfield @"credential" # addr) $ \case - PScriptCredential ((pfield @"_0" #) -> h) -> pcon $ PJust h - _ -> pcon PNothing - -{- | Return true if the given address is a script address. - - @since 0.1.0 --} -isScriptAddress :: Term s (PAddress :--> PBool) -isScriptAddress = phoistAcyclic $ - plam $ \addr -> pnot #$ isPubKey #$ pfromData $ pfield @"credential" # addr - -{- | Return true if the given credential is a pub-key-hash. - - @since 0.1.0 --} -isPubKey :: Term s (PCredential :--> PBool) -isPubKey = phoistAcyclic $ - plam $ \cred -> - pmatch cred $ \case - PScriptCredential _ -> pconstant False - _ -> pconstant True - -{- | Find all TxOuts sent to an Address - - @since 0.1.0 --} -findOutputsToAddress :: Term s (PBuiltinList (PAsData PTxOut) :--> PAddress :--> PBuiltinList (PAsData PTxOut)) -findOutputsToAddress = phoistAcyclic $ - plam $ \outputs address' -> unTermCont $ do - address <- pletC $ pdata address' - pure $ - pfilter # plam (\(pfromData -> txOut) -> pfield @"address" # txOut #== address) - # outputs - -{- | Find the data corresponding to a TxOut, if there is one - - @since 0.1.0 --} -findTxOutDatum :: Term s (PBuiltinList (PAsData (PTuple PDatumHash PDatum)) :--> PTxOut :--> PMaybe PDatum) -findTxOutDatum = phoistAcyclic $ - plam $ \datums out -> unTermCont $ do - datumHash' <- pmatchC $ pfromData $ pfield @"datumHash" # out - pure $ case datumHash' of - PDJust ((pfield @"_0" #) -> datumHash) -> pfindDatum # datumHash # datums - _ -> pcon PNothing - {- | Safely convert a 'PValidatorHash' into a 'PTokenName'. This can be useful for tagging tokens for extra safety. @@ -136,25 +60,6 @@ validatorHashToTokenName (ValidatorHash hash) = TokenName hash pvalidatorHashToTokenName :: forall (s :: S). Term s PValidatorHash -> Term s PTokenName pvalidatorHashToTokenName vh = pcon (PTokenName (pto vh)) -{- | Get the CurrencySymbol of a PMintingPolicy. - - @since 0.1.0 --} -getMintingPolicySymbol :: ClosedTerm PMintingPolicy -> CurrencySymbol -getMintingPolicySymbol v = mintingPolicySymbol $ mkMintingPolicy def v - -{- | The entire value only contains one token of the given currency symbol. - - @since 0.1.0 --} -hasOnlyOneTokenOfCurrencySymbol :: - forall (keys :: KeyGuarantees) (amounts :: AmountGuarantees) (s :: S). - Term s (PCurrencySymbol :--> PValue keys amounts :--> PBool) -hasOnlyOneTokenOfCurrencySymbol = phoistAcyclic $ - plam $ \cs vs -> P.do - psymbolValueOf # cs # vs #== 1 - #&& (plength #$ pto $ pto $ pto vs) #== 1 - {- | Find datum given a maybe datum hash @since 0.1.0 @@ -171,33 +76,11 @@ mustFindDatum' :: ) mustFindDatum' = phoistAcyclic $ plam $ \mdh datums -> unTermCont $ do - let dh = mustBePDJust # "Given TxOut dones't have a datum" # mdh - dt = mustBePJust # "Datum not found in the transaction" #$ plookupTuple # dh # datums + let dh = passertPDJust # "Given TxOut dones't have a datum" # mdh + dt = passertPJust # "Datum not found in the transaction" #$ plookupTuple # dh # datums (d, _) <- ptryFromC $ pforgetData $ pdata dt pure d -{- | Extract the value stored in a PMaybe container. - If there's no value, throw an error with the given message. - - @since 0.1.0 --} -mustBePJust :: forall a s. Term s (PString :--> PMaybe a :--> a) -mustBePJust = phoistAcyclic $ - plam $ \emsg mv' -> pmatch mv' $ \case - PJust v -> v - _ -> ptraceError emsg - -{- | Extract the value stored in a PMaybeData container. - If there's no value, throw an error with the given message. - - @since 0.1.0 --} -mustBePDJust :: forall a s. (PIsData a) => Term s (PString :--> PMaybeData a :--> a) -mustBePDJust = phoistAcyclic $ - plam $ \emsg mv' -> pmatch mv' $ \case - PDJust ((pfield @"_0" #) -> v) -> v - _ -> ptraceError emsg - {- | Create an 'Address' from a given 'ValidatorHash' with no 'PlutusLedgerApi.V1.Credential.StakingCredential'. @since 0.1.0 @@ -217,19 +100,6 @@ pltAsData = phoistAcyclic $ plam $ \(pfromData -> l) (pfromData -> r) -> l #< r -{- | Plutarch level 'Data.Function.on'. - - @since 0.2.0 --} -pon :: - forall (a :: PType) (b :: PType) (c :: PType) (s :: S). - Term s ((b :--> b :--> c) :--> (a :--> b) :--> a :--> a :--> c) -pon = phoistAcyclic $ - plam $ \f g x y -> - let a = g # x - b = g # y - in f # a # b - {- | Extract data stored in a 'PBuiltinPair' and call a function to process it. @since 0.2.0 @@ -247,53 +117,26 @@ withBuiltinPairAsData f p = b = pfromData $ psndBuiltin # p in f a b -{- | Plutarch version of 'Data.Maybe.maybe'. Take a default value and a function - @f@. If the given 'PMaybe' value is @'PJust' x@, apply the function @f@ to - @x@, otherewise the default value will be retuned. +{- | Type-safe wrapper for compiled plutus validator. @since 0.2.0 -} -pmaybe :: - forall (a :: PType) (b :: PType) (s :: S). - Term s (b :--> (a :--> b) :--> PMaybe a :--> b) -pmaybe = phoistAcyclic $ - plam $ \n f m -> pmatch m $ \case - PJust x -> f # x - _ -> n +newtype CompiledValidator (datum :: Type) (redeemer :: Type) = CompiledValidator + { getCompiledValidator :: Validator + } -{- | Special version of 'pmaybe' that works with 'PMaybedata'. +{- | Type-safe wrapper for compiled plutus miting policy. @since 0.2.0 -} -pmaybeData :: - forall (a :: PType) (b :: PType) (s :: S). - PIsData a => - Term s (b :--> (a :--> b) :--> PMaybeData a :--> b) -pmaybeData = phoistAcyclic $ - plam $ \n f m -> pmatch m $ \case - PDJust ((pfield @"_0" #) -> x) -> f # x - _ -> n +newtype CompiledMintingPolicy (redeemer :: Type) = CompiledMintingPolicy + { getCompiledMintingPolicy :: MintingPolicy + } -{- Construct a 'PDJust' value. +{- | Type-safe wrapper for compiled plutus effect. - @since 0.2.0 --} -pdjust :: - forall (a :: PType) (s :: S). - (PIsData a) => - Term s (a :--> PMaybeData a) -pdjust = phoistAcyclic $ - plam $ \x -> - pcon $ - PDJust $ - pdcons @"_0" # pdata x #$ pdnil - -{- Construct a 'PDNothing' value. - - @since 0.2.0 + @since 0.2.0 -} -pdnothing :: - forall (a :: PType) (s :: S). - (PIsData a) => - Term s (PMaybeData a) -pdnothing = phoistAcyclic $ pcon $ PDNothing pdnil +newtype CompiledEffect (datum :: Type) = CompiledEffect + { getCompiledEffect :: Validator + } From 638dc2d0c6cb7e44bbf0e94e2b2fe001626083a7 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Wed, 10 Aug 2022 17:38:21 +0800 Subject: [PATCH 72/78] speed up test execution by precompiling scripts x250 faster! --- agora-specs/Property/Governor.hs | 4 +- agora-specs/Sample/Effect/GovernorMutation.hs | 17 +- .../Sample/Effect/TreasuryWithdrawal.hs | 4 +- agora-specs/Sample/Governor/Initialize.hs | 31 +-- agora-specs/Sample/Governor/Mutate.hs | 6 +- agora-specs/Sample/Proposal/Advance.hs | 24 +-- agora-specs/Sample/Proposal/Cosign.hs | 15 +- agora-specs/Sample/Proposal/Create.hs | 24 ++- agora-specs/Sample/Proposal/UnlockStake.hs | 16 +- agora-specs/Sample/Proposal/Vote.hs | 15 +- agora-specs/Sample/Shared.hs | 101 +++++----- agora-specs/Sample/Stake.hs | 31 ++- agora-specs/Sample/Stake/SetDelegate.hs | 11 +- agora-specs/Spec/Effect/GovernorMutation.hs | 12 +- agora-specs/Spec/Effect/TreasuryWithdrawal.hs | 30 +-- agora-specs/Spec/Stake.hs | 30 ++- agora-specs/Spec/Treasury.hs | 24 ++- agora-testlib/Test/Specification.hs | 184 ++++++++++-------- 18 files changed, 298 insertions(+), 281 deletions(-) diff --git a/agora-specs/Property/Governor.hs b/agora-specs/Property/Governor.hs index a75cf555..1da91d8e 100644 --- a/agora-specs/Property/Governor.hs +++ b/agora-specs/Property/Governor.hs @@ -7,7 +7,7 @@ Property model and tests for 'Governor' related functions -} module Property.Governor (props) where -import Agora.Governor (GovernorDatum (..), pisGovernorDatumValid) +import Agora.Governor (Governor (gstOutRef), GovernorDatum (..), pisGovernorDatumValid) import Agora.Governor.Scripts (governorPolicy) import Agora.Proposal ( ProposalId (ProposalId), @@ -201,7 +201,7 @@ governorMintingProperty = opaqueToUnit = plam $ \_ -> pconstant () actual :: Term s (PScriptContext :--> PUnit) - actual = plam $ \sc -> opaqueToUnit #$ governorPolicy governor # pforgetData (pconstantData ()) # sc + actual = plam $ \sc -> opaqueToUnit #$ governorPolicy governor.gstOutRef # pforgetData (pconstantData ()) # sc classifier :: ScriptContext -> GovernorPolicyCases classifier sc diff --git a/agora-specs/Sample/Effect/GovernorMutation.hs b/agora-specs/Sample/Effect/GovernorMutation.hs index 35640915..75a7a56a 100644 --- a/agora-specs/Sample/Effect/GovernorMutation.hs +++ b/agora-specs/Sample/Effect/GovernorMutation.hs @@ -17,6 +17,7 @@ import Agora.Effect.GovernorMutation ( ) import Agora.Governor (GovernorDatum (..)) import Agora.Proposal (ProposalId (..), ProposalThresholds (..)) +import Agora.Utils (validatorHashToTokenName) import Data.Default.Class (Default (def)) import Data.Tagged (Tagged (..)) import Plutarch.Api.V1 (mkValidator, validatorHash) @@ -24,7 +25,6 @@ import PlutusLedgerApi.V1 ( Address, Datum (..), ToData (..), - TokenName (..), TxInInfo (..), TxInfo (..), TxOut (..), @@ -40,10 +40,11 @@ import PlutusLedgerApi.V1.Value qualified as Value ( singleton, ) import Sample.Shared ( + agoraScripts, authorityTokenSymbol, + deterministicTracingConfing, govAssetClass, govValidatorAddress, - governor, minAda, signer, ) @@ -51,7 +52,7 @@ import Test.Util (datumPair, toDatumHash) -- | The effect validator instance. effectValidator :: Validator -effectValidator = mkValidator def $ mutateGovernorValidator governor +effectValidator = mkValidator deterministicTracingConfing $ mutateGovernorValidator agoraScripts -- | The hash of the validator instance. effectValidatorHash :: ValidatorHash @@ -65,17 +66,15 @@ effectValidatorAddress = scriptHashAddress effectValidatorHash atAssetClass :: AssetClass atAssetClass = assetClass authorityTokenSymbol tokenName where - -- TODO: use 'validatorHashToTokenName' - ValidatorHash bs = effectValidatorHash - tokenName = TokenName bs + tokenName = validatorHashToTokenName effectValidatorHash -- | The mock reference of the governor state UTXO. govRef :: TxOutRef -govRef = TxOutRef "614481d2159bfb72350222d61fce17e548e0fc00e5a1f841ff1837c431346ce7" 1 +govRef = TxOutRef "1475e1ee22330dfc55430980e5a6b100ec9d9249bb4b462256a79559" 1 -- | The mock reference of the effect UTXO. effectRef :: TxOutRef -effectRef = TxOutRef "c31164dc11835de7eb6187f67d0e1a19c1dfc0786a456923eef5043189cdb578" 1 +effectRef = TxOutRef "a302d327d8e5553d50b9d017475369753f723d7e999ac1b68da8ad52" 1 -- | The input effect datum in 'mkEffectTransaction'. mkEffectDatum :: GovernorDatum -> MutateGovernorDatum @@ -159,7 +158,7 @@ mkEffectTxInfo newGovDatum = , txInfoValidRange = Interval.always , txInfoSignatories = [signer] , txInfoData = datumPair <$> [governorInputDatum, governorOutputDatum, effectInputDatum] - , txInfoId = "4dae3806cc69615b721d52ed09b758f43f25a8f39b7934d6b28514caf71f5f7b" + , txInfoId = "74c75505691e7baa981fa80e50b9b7e88dbe1eda67d4f062d89d203b" } validNewGovernorDatum :: GovernorDatum diff --git a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs index 5cb2db22..3070e79f 100644 --- a/agora-specs/Sample/Effect/TreasuryWithdrawal.hs +++ b/agora-specs/Sample/Effect/TreasuryWithdrawal.hs @@ -28,7 +28,7 @@ import Plutarch.Api.V1 (mkValidator, validatorHash) import PlutusLedgerApi.V1 ( Address (Address), Credential (..), - CurrencySymbol (CurrencySymbol), + CurrencySymbol, DatumHash (DatumHash), PubKeyHash, ScriptContext (..), @@ -60,7 +60,7 @@ import Test.Util (scriptCredentials, userCredentials) -- | A sample Currency Symbol. currSymbol :: CurrencySymbol -currSymbol = CurrencySymbol "12312099" +currSymbol = "9c04a69c7133e26061fe5a15adaf4f79cd51e47ef22a2e3c91a36f04" -- | A sample 'PubKeyHash'. signer :: PubKeyHash diff --git a/agora-specs/Sample/Governor/Initialize.hs b/agora-specs/Sample/Governor/Initialize.hs index 38283738..167cb5ab 100644 --- a/agora-specs/Sample/Governor/Initialize.hs +++ b/agora-specs/Sample/Governor/Initialize.hs @@ -19,16 +19,20 @@ module Sample.Governor.Initialize ( mkTestCase, ) where +import Agora.Bootstrap (agoraScripts) import Agora.Governor (Governor (..), GovernorDatum (..)) -import Agora.Governor.Scripts ( - governorPolicy, - governorSTAssetClassFromGovernor, +import Agora.Proposal (ProposalId (..), ProposalThresholds (..)) +import Agora.Proposal.Time ( + MaxTimeRangeWidth (MaxTimeRangeWidth), + ProposalTimingConfig (ProposalTimingConfig), + ) +import Agora.Scripts ( + AgoraScripts (compiledGovernorPolicy), + governorSTAssetClass, + governorSTSymbol, governorValidatorHash, ) -import Agora.Proposal (ProposalId (..), ProposalThresholds (..)) -import Agora.Proposal.Time (MaxTimeRangeWidth (MaxTimeRangeWidth), ProposalTimingConfig (ProposalTimingConfig)) import Data.Default (Default (..)) -import Plutarch.Api.V1 (mintingPolicySymbol, mkMintingPolicy) import Plutarch.Context ( input, mint, @@ -43,7 +47,6 @@ import Plutarch.Context ( ) import PlutusLedgerApi.V1 ( CurrencySymbol, - MintingPolicy, TxOutRef (TxOutRef), ValidatorHash, ) @@ -107,17 +110,17 @@ governor = { gstOutRef = witnessRef } +scripts :: AgoraScripts +scripts = agoraScripts Shared.deterministicTracingConfing governor + govAssetClass :: AssetClass -govAssetClass = governorSTAssetClassFromGovernor governor +govAssetClass = governorSTAssetClass scripts govValidatorHash :: ValidatorHash -govValidatorHash = governorValidatorHash governor - -govPolicy :: MintingPolicy -govPolicy = mkMintingPolicy def (governorPolicy governor) +govValidatorHash = governorValidatorHash scripts govSymbol :: CurrencySymbol -govSymbol = mintingPolicySymbol govPolicy +govSymbol = governorSTSymbol scripts -------------------------------------------------------------------------------- @@ -271,6 +274,6 @@ mkTestCase name ps valid = testPolicy valid name - (governorPolicy governor) + scripts.compiledGovernorPolicy () (mkMinting mintGST ps govSymbol) diff --git a/agora-specs/Sample/Governor/Mutate.hs b/agora-specs/Sample/Governor/Mutate.hs index c5026b3d..df8a70c4 100644 --- a/agora-specs/Sample/Governor/Mutate.hs +++ b/agora-specs/Sample/Governor/Mutate.hs @@ -18,8 +18,8 @@ module Sample.Governor.Mutate ( import Agora.Effect.NoOp (noOpValidator) import Agora.Governor (GovernorDatum (..), GovernorRedeemer (MutateGovernor)) -import Agora.Governor.Scripts (governorValidator) import Agora.Proposal (ProposalId (ProposalId), ProposalThresholds (..)) +import Agora.Scripts (AgoraScripts (..)) import Agora.Utils (validatorHashToTokenName) import Data.Default (def) import Plutarch.Api.V1 (PValidator, mkValidator, validatorHash) @@ -42,10 +42,10 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import Sample.Shared ( + agoraScripts, authorityTokenSymbol, govAssetClass, govValidatorHash, - governor, minAda, ) import Test.Specification (SpecificationTree, testValidator) @@ -219,7 +219,7 @@ mkTestCase name pb (Validity forGov) = testValidator forGov name - (governorValidator governor) + agoraScripts.compiledGovernorValidator governorInputDatum governorRedeemer (mkSpending mutate pb governorRef) diff --git a/agora-specs/Sample/Proposal/Advance.hs b/agora-specs/Sample/Proposal/Advance.hs index 2ef3ff72..6e7a3f10 100644 --- a/agora-specs/Sample/Proposal/Advance.hs +++ b/agora-specs/Sample/Proposal/Advance.hs @@ -37,15 +37,11 @@ module Sample.Proposal.Advance ( mkBadGovernorOutputDatumBundle, ) where -import Agora.AuthorityToken ( - AuthorityToken (AuthorityToken), - authorityTokenPolicy, - ) import Agora.Governor ( + Governor (..), GovernorDatum (..), GovernorRedeemer (MintGATs), ) -import Agora.Governor.Scripts (governorValidator) import Agora.Proposal ( ProposalDatum (..), ProposalId (ProposalId), @@ -56,7 +52,6 @@ import Agora.Proposal ( ResultTag (ResultTag), emptyVotesFor, ) -import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time ( ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig ( @@ -66,12 +61,11 @@ import Agora.Proposal.Time ( votingTime ), ) +import Agora.Scripts (AgoraScripts (..)) import Agora.Stake ( - Stake (gtClassRef), StakeDatum (..), StakeRedeemer (WitnessStake), ) -import Agora.Stake.Scripts (stakeValidator) import Agora.Utils (validatorHashToTokenName) import Control.Monad.State (execState, modify, when) import Data.Default (def) @@ -107,18 +101,18 @@ import Sample.Proposal.Shared ( stakeTxRef, ) import Sample.Shared ( + agoraScripts, authorityTokenSymbol, govAssetClass, govValidatorHash, + governor, minAda, proposalPolicySymbol, proposalValidatorHash, signer, - stake, stakeAssetClass, stakeValidatorHash, ) -import Sample.Shared qualified as Shared import Test.Specification ( SpecificationTree, group, @@ -394,7 +388,7 @@ mkStakeBuilder ps = minAda <> Value.assetClassValue stakeAssetClass 1 <> Value.assetClassValue - (untag stake.gtClassRef) + (untag governor.gtClassRef) ps.perStakeGTs perStake idx i o = let withSig = @@ -565,7 +559,7 @@ mkTestTree name pb val = testValidator val.forProposalValidator "proposal" - (proposalValidator Shared.proposal) + agoraScripts.compiledProposalValidator proposalInputDatum proposalRedeemer (spend proposalRef) @@ -576,7 +570,7 @@ mkTestTree name pb val = testValidator val.forStakeValidator "stake" - (stakeValidator Shared.stake) + agoraScripts.compiledStakeValidator (getStakeInputDatumAt pb.stakeParameters idx) stakeRedeemer ( spend (mkStakeRef idx) @@ -586,7 +580,7 @@ mkTestTree name pb val = testValidator (fromJust val.forGovernorValidator) "governor" - (governorValidator Shared.governor) + agoraScripts.compiledGovernorValidator governorInputDatum governorRedeemer (spend governorRef) @@ -596,7 +590,7 @@ mkTestTree name pb val = testPolicy (fromJust val.forAuthorityTokenPolicy) "authority" - (authorityTokenPolicy $ AuthorityToken Shared.govAssetClass) + agoraScripts.compiledAuthorityTokenPolicy authorityTokenRedeemer (mint authorityTokenSymbol) <$ (pb.authorityTokenParameters) diff --git a/agora-specs/Sample/Proposal/Cosign.hs b/agora-specs/Sample/Proposal/Cosign.hs index 69704973..09f0b67f 100644 --- a/agora-specs/Sample/Proposal/Cosign.hs +++ b/agora-specs/Sample/Proposal/Cosign.hs @@ -14,6 +14,7 @@ module Sample.Proposal.Cosign ( mkTestTree, ) where +import Agora.Governor (Governor (..)) import Agora.Proposal ( ProposalDatum (..), ProposalId (ProposalId), @@ -22,19 +23,17 @@ import Agora.Proposal ( ResultTag (ResultTag), emptyVotesFor, ) -import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time ( ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig (draftTime), ) import Agora.SafeMoney (GTTag) +import Agora.Scripts (AgoraScripts (..)) import Agora.Stake ( - Stake (gtClassRef), StakeDatum (StakeDatum, owner), StakeRedeemer (WitnessStake), stakedAmount, ) -import Agora.Stake.Scripts (stakeValidator) import Data.Coerce (coerce) import Data.Default (def) import Data.List (sort) @@ -61,15 +60,15 @@ import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap import Sample.Proposal.Shared (proposalTxRef, stakeTxRef) import Sample.Shared ( + agoraScripts, + governor, minAda, proposalPolicySymbol, proposalValidatorHash, signer, - stake, stakeAssetClass, stakeValidatorHash, ) -import Sample.Shared qualified as Shared import Test.Specification ( SpecificationTree, group, @@ -149,7 +148,7 @@ cosign ps = builder sortValue $ minAda <> Value.assetClassValue - (untag stake.gtClassRef) + (untag governor.gtClassRef) (untag perStakedGTs) <> sst @@ -322,7 +321,7 @@ mkTestTree name ps isValid = group name [proposal, stake] in testValidator isValid "proposal" - (proposalValidator Shared.proposal) + agoraScripts.compiledProposalValidator proposalInputDatum (mkProposalRedeemer ps) (spend proposalRef) @@ -334,7 +333,7 @@ mkTestTree name ps isValid = group name [proposal, stake] in testValidator isValid "stake" - (stakeValidator Shared.stake) + agoraScripts.compiledStakeValidator stakeInputDatum stakeRedeemer (spend $ mkStakeRef idx) diff --git a/agora-specs/Sample/Proposal/Create.hs b/agora-specs/Sample/Proposal/Create.hs index e962f005..af356fb9 100644 --- a/agora-specs/Sample/Proposal/Create.hs +++ b/agora-specs/Sample/Proposal/Create.hs @@ -20,27 +20,24 @@ module Sample.Proposal.Create ( ) where import Agora.Governor ( + Governor (..), GovernorDatum (..), GovernorRedeemer (CreateProposal), ) -import Agora.Governor.Scripts (governorValidator) import Agora.Proposal ( - Proposal (governorSTAssetClass), ProposalDatum (..), ProposalId (ProposalId), ProposalStatus (..), ResultTag (ResultTag), emptyVotesFor, ) -import Agora.Proposal.Scripts (proposalPolicy) import Agora.Proposal.Time (MaxTimeRangeWidth (MaxTimeRangeWidth), ProposalStartingTime (..)) +import Agora.Scripts (AgoraScripts (..)) import Agora.Stake ( ProposalLock (..), - Stake (gtClassRef), StakeDatum (..), StakeRedeemer (PermitVote), ) -import Agora.Stake.Scripts (stakeValidator) import Data.Coerce (coerce) import Data.Default (Default (def)) import Data.Tagged (Tagged, untag) @@ -69,19 +66,19 @@ import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap import Sample.Proposal.Shared (stakeTxRef) import Sample.Shared ( + agoraScripts, + govAssetClass, govValidatorHash, + governor, minAda, - proposal, proposalPolicySymbol, proposalStartingTimeFromTimeRange, proposalValidatorHash, signer, signer2, - stake, stakeAssetClass, stakeValidatorHash, ) -import Sample.Shared qualified as Shared import Test.Specification (SpecificationTree, group, testPolicy, testValidator) import Test.Util (CombinableBuilder, closedBoundedInterval, mkMinting, mkSpending, sortValue) @@ -270,7 +267,7 @@ createProposal ps = builder where pst = Value.singleton proposalPolicySymbol "" 1 sst = Value.assetClassValue stakeAssetClass 1 - gst = Value.assetClassValue proposal.governorSTAssetClass 1 + gst = Value.assetClassValue govAssetClass 1 --- @@ -279,7 +276,7 @@ createProposal ps = builder sortValue $ sortValue $ sst - <> Value.assetClassValue (untag stake.gtClassRef) (untag stakedGTs) + <> Value.assetClassValue (untag governor.gtClassRef) (untag stakedGTs) <> minAda proposalValue = sortValue $ pst <> minAda @@ -438,7 +435,7 @@ mkTestTree testPolicy validForProposalPolicy "proposal" - (proposalPolicy Shared.proposal.governorSTAssetClass) + agoraScripts.compiledProposalPolicy proposalPolicyRedeemer (mint proposalPolicySymbol) @@ -446,15 +443,16 @@ mkTestTree testValidator validForGovernorValidator "governor" - (governorValidator Shared.governor) + agoraScripts.compiledGovernorValidator governorInputDatum governorRedeemer (spend governorRef) + stakeTest = testValidator validForStakeValidator "stake" - (stakeValidator Shared.stake) + agoraScripts.compiledStakeValidator (mkStakeInputDatum ps) stakeRedeemer (spend stakeRef) diff --git a/agora-specs/Sample/Proposal/UnlockStake.hs b/agora-specs/Sample/Proposal/UnlockStake.hs index 09c1db0a..5e72125a 100644 --- a/agora-specs/Sample/Proposal/UnlockStake.hs +++ b/agora-specs/Sample/Proposal/UnlockStake.hs @@ -25,6 +25,7 @@ module Sample.Proposal.UnlockStake ( -------------------------------------------------------------------------------- +import Agora.Governor (Governor (..)) import Agora.Proposal ( ProposalDatum (..), ProposalId (..), @@ -33,10 +34,9 @@ import Agora.Proposal ( ProposalVotes (..), ResultTag (..), ) -import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime)) -import Agora.Stake (ProposalLock (..), Stake (..), StakeDatum (..), StakeRedeemer (RetractVotes)) -import Agora.Stake.Scripts (stakeValidator) +import Agora.Scripts (AgoraScripts (..)) +import Agora.Stake (ProposalLock (..), StakeDatum (..), StakeRedeemer (RetractVotes)) import Data.Default.Class (Default (def)) import Data.Tagged (Tagged (..), untag) import Plutarch.Context ( @@ -59,15 +59,15 @@ import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap import Sample.Proposal.Shared (stakeTxRef) import Sample.Shared ( + agoraScripts, + governor, minAda, proposalPolicySymbol, proposalValidatorHash, signer, - stake, stakeAssetClass, stakeValidatorHash, ) -import Sample.Shared qualified as Shared import Test.Specification (SpecificationTree, group, testValidator) import Test.Util (CombinableBuilder, mkSpending, sortValue, updateMap) @@ -277,7 +277,7 @@ unlockStake ps = sortValue $ mconcat [ Value.assetClassValue - (untag stake.gtClassRef) + (untag governor.gtClassRef) (untag defStakedGTs) , sst , minAda @@ -532,7 +532,7 @@ mkTestTree name ps isValid = group name [stake, proposal] testValidator (not ps.alterOutputStake) "stake" - (stakeValidator Shared.stake) + agoraScripts.compiledStakeValidator (mkStakeInputDatum ps) stakeRedeemer (spend stakeRef) @@ -544,7 +544,7 @@ mkTestTree name ps isValid = group name [stake, proposal] in testValidator isValid "proposal" - (proposalValidator Shared.proposal) + agoraScripts.compiledProposalValidator (mkProposalInputDatum ps pid) proposalRedeemer (spend ref) diff --git a/agora-specs/Sample/Proposal/Vote.hs b/agora-specs/Sample/Proposal/Vote.hs index b1b1835c..937a152b 100644 --- a/agora-specs/Sample/Proposal/Vote.hs +++ b/agora-specs/Sample/Proposal/Vote.hs @@ -11,6 +11,7 @@ module Sample.Proposal.Vote ( validVoteAsDelegateParameters, ) where +import Agora.Governor (Governor (..)) import Agora.Proposal ( ProposalDatum (..), ProposalId (ProposalId), @@ -19,18 +20,16 @@ import Agora.Proposal ( ProposalVotes (ProposalVotes), ResultTag (ResultTag), ) -import Agora.Proposal.Scripts (proposalValidator) import Agora.Proposal.Time ( ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig (draftTime, votingTime), ) +import Agora.Scripts (AgoraScripts (..)) import Agora.Stake ( ProposalLock (..), - Stake (gtClassRef), StakeDatum (..), StakeRedeemer (PermitVote), ) -import Agora.Stake.Scripts (stakeValidator) import Data.Default (Default (def)) import Data.Tagged (Tagged (Tagged), untag) import Plutarch.Context ( @@ -52,15 +51,15 @@ import PlutusLedgerApi.V1.Value qualified as Value import PlutusTx.AssocMap qualified as AssocMap import Sample.Proposal.Shared (proposalTxRef, stakeTxRef) import Sample.Shared ( + agoraScripts, + governor, minAda, proposalPolicySymbol, proposalValidatorHash, signer, - stake, stakeAssetClass, stakeValidatorHash, ) -import Sample.Shared qualified as Shared import Test.Specification ( SpecificationTree, group, @@ -205,7 +204,7 @@ vote params = stakeValue = sortValue $ sst - <> Value.assetClassValue (untag stake.gtClassRef) params.voteCount + <> Value.assetClassValue (untag governor.gtClassRef) params.voteCount <> minAda signer = @@ -278,7 +277,7 @@ mkTestTree name ps isValid = group name [proposal, stake] testValidator isValid "proposal" - (proposalValidator Shared.proposal) + agoraScripts.compiledProposalValidator proposalInputDatum (mkProposalRedeemer ps) (spend proposalRef) @@ -287,7 +286,7 @@ mkTestTree name ps isValid = group name [proposal, stake] let stakeInputDatum = mkStakeInputDatum ps in validatorSucceedsWith "stake" - (stakeValidator Shared.stake) + agoraScripts.compiledStakeValidator stakeInputDatum stakeRedeemer (spend stakeRef) diff --git a/agora-specs/Sample/Shared.hs b/agora-specs/Sample/Shared.hs index a08891a5..01039db8 100644 --- a/agora-specs/Sample/Shared.hs +++ b/agora-specs/Sample/Shared.hs @@ -12,11 +12,15 @@ module Sample.Shared ( signer, signer2, minAda, + deterministicTracingConfing, + mkEffect, + + -- * Agora Scripts + agoraScripts, -- * Components -- ** Stake - stake, stakeAssetClass, stakeValidatorHash, stakeAddress, @@ -33,14 +37,12 @@ module Sample.Shared ( gstUTXORef, -- ** Proposal - proposal, proposalPolicySymbol, proposalValidatorHash, proposalValidatorAddress, proposalStartingTimeFromTimeRange, -- ** Authority - authorityToken, authorityTokenSymbol, -- ** Treasury @@ -53,38 +55,29 @@ module Sample.Shared ( wrongEffHash, ) where -import Agora.AuthorityToken (AuthorityToken) +import Agora.Bootstrap qualified as Bootstrap import Agora.Effect.NoOp (noOpValidator) import Agora.Governor (Governor (Governor)) -import Agora.Governor.Scripts ( - authorityTokenFromGovernor, - authorityTokenSymbolFromGovernor, - governorPolicy, - governorSTAssetClassFromGovernor, - governorValidator, - governorValidatorHash, - proposalFromGovernor, - proposalSTSymbolFromGovernor, - proposalValidatorHashFromGovernor, - stakeFromGovernor, - stakeSTAssetClassFromGovernor, - stakeSTSymbolFromGovernor, - stakeValidatorHashFromGovernor, - ) -import Agora.Proposal (Proposal (..), ProposalThresholds (..)) +import Agora.Proposal (ProposalThresholds (..)) import Agora.Proposal.Time ( MaxTimeRangeWidth (..), ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig (..), ) -import Agora.Stake (Stake (..)) +import Agora.Scripts qualified as Scripts import Agora.Treasury (treasuryValidator) -import Agora.Utils (validatorHashToTokenName) +import Agora.Utils ( + CompiledEffect (CompiledEffect), + CompiledMintingPolicy (getCompiledMintingPolicy), + CompiledValidator (getCompiledValidator), + validatorHashToTokenName, + ) import Data.Default.Class (Default (..)) import Data.Tagged (Tagged (..)) +import Plutarch (Config (..), TracingMode (DetTracing)) import Plutarch.Api.V1 ( + PValidator, mintingPolicySymbol, - mkMintingPolicy, mkValidator, validatorHash, ) @@ -110,18 +103,36 @@ import PlutusLedgerApi.V1.Value qualified as Value ( assetClass, singleton, ) +import PlutusTx qualified + +-- Plutarch compiler configauration. +-- TODO: add the ability to change this value. Maybe wrap everything in a +-- Reader monad? +deterministicTracingConfing :: Config +deterministicTracingConfing = Config DetTracing + +governor :: Governor +governor = Governor oref gt mc + where + oref = gstUTXORef + gt = + Tagged $ + Value.assetClass + "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" + "LQ" + mc = 20 -stake :: Stake -stake = stakeFromGovernor governor +agoraScripts :: Scripts.AgoraScripts +agoraScripts = Bootstrap.agoraScripts deterministicTracingConfing governor stakeSymbol :: CurrencySymbol -stakeSymbol = stakeSTSymbolFromGovernor governor +stakeSymbol = Scripts.stakeSTSymbol agoraScripts stakeAssetClass :: AssetClass -stakeAssetClass = stakeSTAssetClassFromGovernor governor +stakeAssetClass = Scripts.stakeSTAssetClass agoraScripts stakeValidatorHash :: ValidatorHash -stakeValidatorHash = stakeValidatorHashFromGovernor governor +stakeValidatorHash = Scripts.stakeValidatorHash agoraScripts stakeAddress :: Address stakeAddress = Address (ScriptCredential stakeValidatorHash) Nothing @@ -129,40 +140,26 @@ stakeAddress = Address (ScriptCredential stakeValidatorHash) Nothing gstUTXORef :: TxOutRef gstUTXORef = TxOutRef "f28cd7145c24e66fd5bcd2796837aeb19a48a2656e7833c88c62a2d0450bd00d" 0 -governor :: Governor -governor = Governor oref gt mc - where - oref = gstUTXORef - gt = - Tagged $ - Value.assetClass - "da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24" - "LQ" - mc = 20 - govPolicy :: MintingPolicy -govPolicy = mkMintingPolicy def (governorPolicy governor) +govPolicy = getCompiledMintingPolicy $ agoraScripts.compiledGovernorPolicy govValidator :: Validator -govValidator = mkValidator def (governorValidator governor) +govValidator = getCompiledValidator $ agoraScripts.compiledGovernorValidator govSymbol :: CurrencySymbol govSymbol = mintingPolicySymbol govPolicy govAssetClass :: AssetClass -govAssetClass = governorSTAssetClassFromGovernor governor +govAssetClass = Scripts.governorSTAssetClass agoraScripts govValidatorHash :: ValidatorHash -govValidatorHash = governorValidatorHash governor +govValidatorHash = Scripts.governorValidatorHash agoraScripts govValidatorAddress :: Address govValidatorAddress = scriptHashAddress govValidatorHash -proposal :: Proposal -proposal = proposalFromGovernor governor - proposalPolicySymbol :: CurrencySymbol -proposalPolicySymbol = proposalSTSymbolFromGovernor governor +proposalPolicySymbol = Scripts.proposalSTSymbol agoraScripts -- | A sample 'PubKeyHash'. signer :: PubKeyHash @@ -173,7 +170,7 @@ signer2 :: PubKeyHash signer2 = "8a30896c4fd5e79843e4ca1bd2cdbaa36f8c0bc3be74012141420192" proposalValidatorHash :: ValidatorHash -proposalValidatorHash = proposalValidatorHashFromGovernor governor +proposalValidatorHash = Scripts.proposalValidatoHash agoraScripts proposalValidatorAddress :: Address proposalValidatorAddress = scriptHashAddress proposalValidatorHash @@ -189,11 +186,8 @@ instance Default ProposalThresholds where , vote = Tagged 100 } -authorityToken :: AuthorityToken -authorityToken = authorityTokenFromGovernor governor - authorityTokenSymbol :: CurrencySymbol -authorityTokenSymbol = authorityTokenSymbolFromGovernor governor +authorityTokenSymbol = Scripts.authorityTokenSymbol agoraScripts {- | Default value of 'Agora.Governor.GovernorDatum.proposalTimings'. For testing purpose only. @@ -222,6 +216,9 @@ proposalStartingTimeFromTimeRange ProposalStartingTime $ (l + u) `div` 2 proposalStartingTimeFromTimeRange _ = error "Given time range should be finite and closed" +mkEffect :: (PlutusTx.ToData datum) => ClosedTerm PValidator -> CompiledEffect datum +mkEffect v = CompiledEffect $ mkValidator deterministicTracingConfing v + ------------------------------------------------------------------ treasuryOut :: TxOut diff --git a/agora-specs/Sample/Stake.hs b/agora-specs/Sample/Stake.hs index 9348260e..1d0f2c1e 100644 --- a/agora-specs/Sample/Stake.hs +++ b/agora-specs/Sample/Stake.hs @@ -6,10 +6,8 @@ Description: Sample based testing for Stake utxos This module tests primarily the happy path for Stake creation -} module Sample.Stake ( - stake, stakeAssetClass, stakeSymbol, - validatorHashTN, signer, -- * Script contexts @@ -20,15 +18,12 @@ module Sample.Stake ( DepositWithdrawExample (..), ) where +import Agora.Governor (Governor (gtClassRef)) import Agora.SafeMoney (GTTag) import Agora.Stake ( - Stake (gtClassRef), StakeDatum (StakeDatum, stakedAmount), ) -import Agora.Stake.Scripts (stakeValidator) -import Data.Default (def) import Data.Tagged (Tagged, untag) -import Plutarch.Api.V1 (mkValidator, validatorHash) import Plutarch.Context ( MintingBuilder, SpendingBuilder, @@ -51,9 +46,7 @@ import PlutusLedgerApi.V1 ( ScriptContext (..), ScriptPurpose (Minting), ToData (toBuiltinData), - TokenName (TokenName), TxInfo (txInfoData, txInfoSignatories), - ValidatorHash (ValidatorHash), ) import PlutusLedgerApi.V1.Contexts (TxOutRef (..)) import PlutusLedgerApi.V1.Value qualified as Value ( @@ -61,19 +54,13 @@ import PlutusLedgerApi.V1.Value qualified as Value ( singleton, ) import Sample.Shared ( + governor, signer, - stake, stakeAssetClass, stakeSymbol, stakeValidatorHash, ) - --- | 'TokenName' that represents the hash of the 'Stake' validator. -validatorHashTN :: TokenName -validatorHashTN = - let validator = mkValidator def $ stakeValidator stake - ValidatorHash vh = validatorHash validator - in TokenName vh +import Test.Util (sortValue) -- | This script context should be a valid transaction. stakeCreation :: ScriptContext @@ -151,14 +138,22 @@ stakeDepositWithdraw config = , input $ mconcat [ script stakeValidatorHash - , withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeBefore.stakedAmount)) + , withValue + ( sortValue $ + st + <> Value.assetClassValue (untag governor.gtClassRef) (untag stakeBefore.stakedAmount) + ) , withDatum stakeAfter , withOutRef stakeRef ] , output $ mconcat [ script stakeValidatorHash - , withValue (st <> Value.assetClassValue (untag stake.gtClassRef) (untag stakeAfter.stakedAmount)) + , withValue + ( sortValue $ + st + <> Value.assetClassValue (untag governor.gtClassRef) (untag stakeAfter.stakedAmount) + ) , withDatum stakeAfter ] , withSpendingOutRef stakeRef diff --git a/agora-specs/Sample/Stake/SetDelegate.hs b/agora-specs/Sample/Stake/SetDelegate.hs index 4549600d..9f9f25e0 100644 --- a/agora-specs/Sample/Stake/SetDelegate.hs +++ b/agora-specs/Sample/Stake/SetDelegate.hs @@ -19,12 +19,12 @@ module Sample.Stake.SetDelegate ( delegateToOwnerParameters, ) where +import Agora.Governor (Governor (gtClassRef)) +import Agora.Scripts (AgoraScripts (..)) import Agora.Stake ( - Stake (gtClassRef), StakeDatum (..), StakeRedeemer (ClearDelegate, DelegateTo), ) -import Agora.Stake.Scripts (stakeValidator) import Data.Tagged (untag) import Plutarch.Context ( SpendingBuilder, @@ -46,10 +46,11 @@ import PlutusLedgerApi.V1 ( ) import PlutusLedgerApi.V1.Value qualified as Value import Sample.Shared ( + agoraScripts, + governor, minAda, signer, signer2, - stake, stakeAssetClass, stakeValidatorHash, ) @@ -118,7 +119,7 @@ setDelegate ps = buildSpendingUnsafe builder mconcat [ st , Value.assetClassValue - (untag stake.gtClassRef) + (untag governor.gtClassRef) (untag stakeInput.stakedAmount) , minAda ] @@ -154,7 +155,7 @@ mkTestCase name ps valid = testValidator valid name - (stakeValidator stake) + agoraScripts.compiledStakeValidator (mkStakeInputDatum ps) (mkStakeRedeemer ps) (setDelegate ps) diff --git a/agora-specs/Spec/Effect/GovernorMutation.hs b/agora-specs/Spec/Effect/GovernorMutation.hs index ebcf1206..72a17e69 100644 --- a/agora-specs/Spec/Effect/GovernorMutation.hs +++ b/agora-specs/Spec/Effect/GovernorMutation.hs @@ -2,8 +2,8 @@ module Spec.Effect.GovernorMutation (specs) where import Agora.Effect.GovernorMutation (mutateGovernorValidator) import Agora.Governor (GovernorDatum (..), GovernorRedeemer (MutateGovernor)) -import Agora.Governor.Scripts (governorValidator) import Agora.Proposal (ProposalId (..)) +import Agora.Scripts (AgoraScripts (..)) import Data.Default.Class (Default (def)) import PlutusLedgerApi.V1 (ScriptContext (ScriptContext), ScriptPurpose (Spending)) import Sample.Effect.GovernorMutation ( @@ -14,7 +14,7 @@ import Sample.Effect.GovernorMutation ( mkEffectTxInfo, validNewGovernorDatum, ) -import Sample.Shared qualified as Shared +import Sample.Shared (agoraScripts, mkEffect) import Test.Specification ( SpecificationTree, effectFailsWith, @@ -32,7 +32,7 @@ specs = "valid new governor datum" [ validatorSucceedsWith "governor validator should pass" - (governorValidator Shared.governor) + agoraScripts.compiledGovernorValidator ( GovernorDatum def (ProposalId 0) @@ -47,7 +47,7 @@ specs = ) , effectSucceedsWith "effect validator should pass" - (mutateGovernorValidator Shared.governor) + (mkEffect $ mutateGovernorValidator agoraScripts) (mkEffectDatum validNewGovernorDatum) (ScriptContext (mkEffectTxInfo validNewGovernorDatum) (Spending effectRef)) ] @@ -55,7 +55,7 @@ specs = "invalid new governor datum" [ validatorFailsWith "governor validator should fail" - (governorValidator Shared.governor) + agoraScripts.compiledGovernorValidator ( GovernorDatum def (ProposalId 0) @@ -70,7 +70,7 @@ specs = ) , effectFailsWith "effect validator should fail" - (mutateGovernorValidator Shared.governor) + (mkEffect $ mutateGovernorValidator agoraScripts) (mkEffectDatum validNewGovernorDatum) (ScriptContext (mkEffectTxInfo invalidNewGovernorDatum) (Spending effectRef)) ] diff --git a/agora-specs/Spec/Effect/TreasuryWithdrawal.hs b/agora-specs/Spec/Effect/TreasuryWithdrawal.hs index ea0f67a2..984a49cd 100644 --- a/agora-specs/Spec/Effect/TreasuryWithdrawal.hs +++ b/agora-specs/Spec/Effect/TreasuryWithdrawal.hs @@ -25,12 +25,14 @@ import Sample.Effect.TreasuryWithdrawal ( treasuries, users, ) +import Sample.Shared (mkEffect) import Test.Specification ( SpecificationTree, effectFailsWith, effectSucceedsWith, group, ) +import Test.Util (sortValue) specs :: [SpecificationTree] specs = @@ -38,7 +40,7 @@ specs = "effect" [ effectSucceedsWith "Simple" - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum1 ( buildScriptContext [ inputGAT @@ -50,7 +52,7 @@ specs = ) , effectSucceedsWith "Simple with multiple treasuries " - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum1 ( buildScriptContext [ inputGAT @@ -67,7 +69,7 @@ specs = ) , effectSucceedsWith "Mixed Assets" - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum2 ( buildScriptContext [ inputGAT @@ -82,7 +84,7 @@ specs = ) , effectFailsWith "Pay to uknown 3rd party" - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum2 ( buildScriptContext [ inputGAT @@ -98,7 +100,7 @@ specs = ) , effectFailsWith "Missing receiver" - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum2 ( buildScriptContext [ inputGAT @@ -113,7 +115,7 @@ specs = ) , effectFailsWith "Unauthorized treasury" - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum3 ( buildScriptContext [ inputGAT @@ -125,7 +127,7 @@ specs = ) , effectFailsWith "Prevent transactions besides the withdrawal" - (treasuryWithdrawalValidator currSymbol) + (mkEffect $ treasuryWithdrawalValidator currSymbol) datum3 ( buildScriptContext [ inputGAT @@ -141,8 +143,14 @@ specs = ] ] where - asset1 = Value.singleton "abbc12" "OrangeBottle" - asset2 = Value.singleton "abbc12" "19721121" + asset1 = + Value.singleton + "0d586e057e76238f8c56c0752507bfa45ae13b04f8497a311d4aaa48" + "OrangeBottle" + asset2 = + Value.singleton + "7e6aa764bceeba1f7acf47d20f1a2a85440afa2928f8ae96376f4d85" + "19721121" datum1 = TreasuryWithdrawalDatum [ (head users, asset1 1) @@ -155,8 +163,8 @@ specs = ] datum2 = TreasuryWithdrawalDatum - [ (head users, asset2 5 <> asset1 4) - , (users !! 1, asset2 1 <> asset1 2) + [ (head users, sortValue $ asset2 5 <> asset1 4) + , (users !! 1, sortValue $ asset2 1 <> asset1 2) , (users !! 2, asset1 1) ] [ head treasuries diff --git a/agora-specs/Spec/Stake.hs b/agora-specs/Spec/Stake.hs index 686e4416..b9e781f6 100644 --- a/agora-specs/Spec/Stake.hs +++ b/agora-specs/Spec/Stake.hs @@ -9,14 +9,14 @@ Tests for Stake policy and validator -} module Spec.Stake (specs) where +import Agora.Scripts (AgoraScripts (..)) import Agora.Stake ( - Stake (..), StakeDatum (StakeDatum), StakeRedeemer (DepositWithdraw), ) -import Agora.Stake.Scripts (stakePolicy, stakeValidator) import Data.Bool (Bool (..)) import Data.Maybe (Maybe (..)) +import Sample.Shared (agoraScripts) import Sample.Stake ( DepositWithdrawExample ( DepositWithdrawExample, @@ -26,7 +26,6 @@ import Sample.Stake ( signer, ) import Sample.Stake qualified as Stake ( - stake, stakeCreation, stakeCreationUnsigned, stakeCreationWrongDatum, @@ -41,7 +40,6 @@ import Test.Specification ( validatorFailsWith, validatorSucceedsWith, ) -import Test.Util (toDatum) import Prelude (Num (negate), ($)) -- | The SpecificationTree exported by this module. @@ -51,17 +49,17 @@ specs = "policy" [ policySucceedsWith "stakeCreation" - (stakePolicy Stake.stake.gtClassRef) + agoraScripts.compiledStakePolicy () Stake.stakeCreation , policyFailsWith "stakeCreationWrongDatum" - (stakePolicy Stake.stake.gtClassRef) + agoraScripts.compiledStakePolicy () Stake.stakeCreationWrongDatum , policyFailsWith "stakeCreationUnsigned" - (stakePolicy Stake.stake.gtClassRef) + agoraScripts.compiledStakePolicy () Stake.stakeCreationUnsigned ] @@ -69,21 +67,21 @@ specs = "validator" [ validatorSucceedsWith "stakeDepositWithdraw deposit" - (stakeValidator Stake.stake) - (toDatum $ StakeDatum 100_000 signer Nothing []) - (toDatum $ DepositWithdraw 100_000) + agoraScripts.compiledStakeValidator + (StakeDatum 100_000 signer Nothing []) + (DepositWithdraw 100_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = 100_000}) , validatorSucceedsWith "stakeDepositWithdraw withdraw" - (stakeValidator Stake.stake) - (toDatum $ StakeDatum 100_000 signer Nothing []) - (toDatum $ DepositWithdraw $ negate 100_000) + agoraScripts.compiledStakeValidator + (StakeDatum 100_000 signer Nothing []) + (DepositWithdraw $ negate 100_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = negate 100_000}) , validatorFailsWith "stakeDepositWithdraw negative GT" - (stakeValidator Stake.stake) - (toDatum $ StakeDatum 100_000 signer Nothing []) - (toDatum $ DepositWithdraw 1_000_000) + agoraScripts.compiledStakeValidator + (StakeDatum 100_000 signer Nothing []) + (DepositWithdraw 1_000_000) (Stake.stakeDepositWithdraw $ DepositWithdrawExample {startAmount = 100_000, delta = negate 1_000_000}) , group "set delegate" diff --git a/agora-specs/Spec/Treasury.hs b/agora-specs/Spec/Treasury.hs index 6d29bc65..03d60fbd 100644 --- a/agora-specs/Spec/Treasury.hs +++ b/agora-specs/Spec/Treasury.hs @@ -25,6 +25,8 @@ import Agora.Treasury ( TreasuryRedeemer (SpendTreasuryGAT), treasuryValidator, ) +import Agora.Utils (CompiledValidator (CompiledValidator)) +import Plutarch.Api.V1 (mkValidator) import PlutusLedgerApi.V1 (DCert (DCertDelegRegKey)) import PlutusLedgerApi.V1.Contexts ( ScriptContext (scriptContextPurpose, scriptContextTxInfo), @@ -35,7 +37,7 @@ import PlutusLedgerApi.V1.Credential ( StakingCredential (StakingHash), ) import PlutusLedgerApi.V1.Value qualified as Value (singleton) -import Sample.Shared (trCredential) +import Sample.Shared (deterministicTracingConfing, trCredential) import Sample.Treasury ( gatCs, gatTn, @@ -51,6 +53,12 @@ import Test.Specification ( validatorSucceedsWith, ) +compiledTreasuryValidator :: CompiledValidator () TreasuryRedeemer +compiledTreasuryValidator = + CompiledValidator $ + mkValidator deterministicTracingConfing $ + treasuryValidator gatCs + specs :: [SpecificationTree] specs = [ group @@ -59,7 +67,7 @@ specs = "Positive" [ validatorSucceedsWith "Allows for effect changes" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT validCtx @@ -70,7 +78,7 @@ specs = "Fails with ScriptPurpose not Minting" [ validatorFailsWith "Spending" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT validCtx @@ -78,7 +86,7 @@ specs = } , validatorFailsWith "Rewarding" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT validCtx @@ -88,7 +96,7 @@ specs = } , validatorFailsWith "Certifying" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT validCtx @@ -100,7 +108,7 @@ specs = ] , validatorFailsWith -- TODO: Use QuickCheck. "Fails when multiple GATs burned" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT validCtx @@ -115,13 +123,13 @@ specs = } , validatorFailsWith "Fails when GAT token name is not script address" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT trCtxGATNameNotAddress , validatorFailsWith "Fails with wallet as input" - (treasuryValidator gatCs) + compiledTreasuryValidator () SpendTreasuryGAT ( let txInfo = validCtx.scriptContextTxInfo diff --git a/agora-testlib/Test/Specification.hs b/agora-testlib/Test/Specification.hs index 34a03351..2280af96 100644 --- a/agora-testlib/Test/Specification.hs +++ b/agora-testlib/Test/Specification.hs @@ -49,12 +49,18 @@ module Test.Specification ( toTestTree, ) where -import Plutarch.Api.V1 (PMintingPolicy, PValidator) -import Plutarch.Builtin (pforgetData) +import Agora.Utils (CompiledEffect (..), CompiledMintingPolicy (..), CompiledValidator (..)) +import Control.Composition ((.**), (.***)) +import Data.Coerce (coerce) import Plutarch.Evaluate (evalScript) -import Plutarch.Extra.Compile (mustCompile) -import Plutarch.Lift (PUnsafeLiftDecl (PLifted)) -import PlutusLedgerApi.V1 (Script, ScriptContext) +import PlutusLedgerApi.V1 ( + Datum (..), + Redeemer (Redeemer), + Script, + ScriptContext, + ToData (toBuiltinData), + ) +import PlutusLedgerApi.V1.Scripts (Context (..), applyMintingPolicyScript, applyValidator) import PlutusTx.IsData qualified as PlutusTx (ToData) import Test.Tasty (TestTree, testGroup) import Test.Tasty.HUnit (assertFailure, testCase) @@ -153,122 +159,133 @@ scriptSucceeds name script = Terminal $ Specification name Success script scriptFails :: String -> Script -> SpecificationTree scriptFails name script = Terminal $ Specification name Failure script +mkContext :: ScriptContext -> Context +mkContext = Context . toBuiltinData + +mkRedeemer :: + forall redeemer. + (PlutusTx.ToData redeemer) => + redeemer -> + Redeemer +mkRedeemer = Redeemer . toBuiltinData + +mkDatum :: + forall datum. + (PlutusTx.ToData datum) => + datum -> + Datum +mkDatum = Datum . toBuiltinData + +applyMintingPolicy' :: + (PlutusTx.ToData redeemer) => + CompiledMintingPolicy redeemer -> + redeemer -> + ScriptContext -> + Script +applyMintingPolicy' policy redeemer scriptContext = + applyMintingPolicyScript + (mkContext scriptContext) + (getCompiledMintingPolicy policy) + (mkRedeemer redeemer) + +applyValidator' :: + ( PlutusTx.ToData datum + , PlutusTx.ToData redeemer + ) => + CompiledValidator datum redeemer -> + datum -> + redeemer -> + ScriptContext -> + Script +applyValidator' validator datum redeemer scriptContext = + applyValidator + (mkContext scriptContext) + (getCompiledValidator validator) + (mkDatum datum) + (mkRedeemer redeemer) + -- | Check that a policy script succeeds, given a name and arguments. policySucceedsWith :: - ( PLift redeemer - , PlutusTx.ToData (PLifted redeemer) - ) => + (PlutusTx.ToData redeemer) => String -> - ClosedTerm PMintingPolicy -> - PLifted redeemer -> + CompiledMintingPolicy redeemer -> + redeemer -> ScriptContext -> SpecificationTree -policySucceedsWith tag policy redeemer scriptContext = - scriptSucceeds tag $ - mustCompile - ( policy - # pforgetData (pconstantData redeemer) - # pconstant scriptContext - ) +policySucceedsWith tag = + scriptSucceeds tag .** applyMintingPolicy' -- | Check that a policy script fails, given a name and arguments. policyFailsWith :: - ( PLift redeemer - , PlutusTx.ToData (PLifted redeemer) - ) => + (PlutusTx.ToData redeemer) => String -> - ClosedTerm PMintingPolicy -> - PLifted redeemer -> + CompiledMintingPolicy redeemer -> + redeemer -> ScriptContext -> SpecificationTree -policyFailsWith tag policy redeemer scriptContext = - scriptFails tag $ - mustCompile - ( policy - # pforgetData (pconstantData redeemer) - # pconstant scriptContext - ) +policyFailsWith tag = + scriptFails tag .** applyMintingPolicy' -- | Check that a validator script succeeds, given a name and arguments. validatorSucceedsWith :: - ( PLift datum - , PlutusTx.ToData (PLifted datum) - , PLift redeemer - , PlutusTx.ToData (PLifted redeemer) + ( PlutusTx.ToData datum + , PlutusTx.ToData redeemer ) => String -> - ClosedTerm PValidator -> - PLifted datum -> - PLifted redeemer -> + CompiledValidator datum redeemer -> + datum -> + redeemer -> ScriptContext -> SpecificationTree -validatorSucceedsWith tag validator datum redeemer scriptContext = - scriptSucceeds tag $ - mustCompile - ( validator - # pforgetData (pconstantData datum) - # pforgetData (pconstantData redeemer) - # pconstant scriptContext - ) +validatorSucceedsWith tag = + scriptSucceeds tag .*** applyValidator' -- | Check that a validator script fails, given a name and arguments. validatorFailsWith :: - ( PLift datum - , PlutusTx.ToData (PLifted datum) - , PLift redeemer - , PlutusTx.ToData (PLifted redeemer) + ( PlutusTx.ToData datum + , PlutusTx.ToData redeemer ) => String -> - ClosedTerm PValidator -> - PLifted datum -> - PLifted redeemer -> + CompiledValidator datum redeemer -> + datum -> + redeemer -> ScriptContext -> SpecificationTree -validatorFailsWith tag validator datum redeemer scriptContext = - scriptFails tag $ - mustCompile - ( validator - # pforgetData (pconstantData datum) - # pforgetData (pconstantData redeemer) - # pconstant scriptContext - ) +validatorFailsWith tag = + scriptFails tag .*** applyValidator' -- | Check that an effect succeeds, given a name and argument. effectSucceedsWith :: - ( PLift datum - , PlutusTx.ToData (PLifted datum) + ( PlutusTx.ToData datum ) => String -> - ClosedTerm PValidator -> - PLifted datum -> + CompiledEffect datum -> + datum -> ScriptContext -> SpecificationTree -effectSucceedsWith tag eff datum = validatorSucceedsWith tag eff datum () +effectSucceedsWith tag eff datum = validatorSucceedsWith tag (coerce eff) datum () -- | Check that an effect fails, given a name and argument. effectFailsWith :: - ( PLift datum - , PlutusTx.ToData (PLifted datum) + ( PlutusTx.ToData datum ) => String -> - ClosedTerm PValidator -> - PLifted datum -> + CompiledEffect datum -> + datum -> ScriptContext -> SpecificationTree -effectFailsWith tag eff datum = validatorFailsWith tag eff datum () +effectFailsWith tag eff datum = validatorFailsWith tag (coerce eff) datum () +-- | Test a validator, given the expectation as a boolean value. testValidator :: - ( PLift datum - , PlutusTx.ToData (PLifted datum) - , PLift redeemer - , PlutusTx.ToData (PLifted redeemer) - ) => - -- | Should the validator pass? + forall datum redeemer. + (PlutusTx.ToData datum, PlutusTx.ToData redeemer) => + -- | Is this test case expected to succeed? Bool -> String -> - ClosedTerm PValidator -> - PLifted datum -> - PLifted redeemer -> + CompiledValidator datum redeemer -> + datum -> + redeemer -> ScriptContext -> SpecificationTree testValidator isValid = @@ -276,14 +293,15 @@ testValidator isValid = then validatorSucceedsWith else validatorFailsWith +-- | Test a policy, given the expectation as a boolean value. testPolicy :: - ( PLift redeemer - , PlutusTx.ToData (PLifted redeemer) - ) => + forall redeemer. + (PlutusTx.ToData redeemer) => + -- | Is this test case expected to succeed? Bool -> String -> - ClosedTerm PMintingPolicy -> - PLifted redeemer -> + CompiledMintingPolicy redeemer -> + redeemer -> ScriptContext -> SpecificationTree testPolicy isValid = From 651b7ef6310ec8bac4504a4909459d873d5b9b6f Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 11 Aug 2022 06:09:44 +0800 Subject: [PATCH 73/78] remove unused `SOP.Generic` derivations --- agora/Agora/Effect.hs | 9 +++++- agora/Agora/Effect/GovernorMutation.hs | 7 ----- agora/Agora/Effect/TreasuryWithdrawal.hs | 7 ----- agora/Agora/Governor.hs | 11 ------- agora/Agora/Proposal.hs | 37 ++---------------------- agora/Agora/Proposal/Time.hs | 17 +---------- agora/Agora/Stake.hs | 14 --------- agora/Agora/Treasury.hs | 4 --- 8 files changed, 12 insertions(+), 94 deletions(-) diff --git a/agora/Agora/Effect.hs b/agora/Agora/Effect.hs index 96a7b328..4f94426a 100644 --- a/agora/Agora/Effect.hs +++ b/agora/Agora/Effect.hs @@ -8,7 +8,14 @@ Helpers for constructing effects. module Agora.Effect (makeEffect) where import Agora.AuthorityToken (singleAuthorityTokenBurned) -import Plutarch.Api.V1 (PCurrencySymbol, PScriptPurpose (PSpending), PTxInfo, PTxOutRef, PValidator, PValue) +import Plutarch.Api.V1 ( + PCurrencySymbol, + PScriptPurpose (PSpending), + PTxInfo, + PTxOutRef, + PValidator, + PValue, + ) import Plutarch.Extra.TermCont (pguardC, pletC, pletFieldsC, pmatchC, ptryFromC) import Plutarch.TryFrom () import PlutusLedgerApi.V1.Value (CurrencySymbol) diff --git a/agora/Agora/Effect/GovernorMutation.hs b/agora/Agora/Effect/GovernorMutation.hs index ce26a404..22f539c8 100644 --- a/agora/Agora/Effect/GovernorMutation.hs +++ b/agora/Agora/Effect/GovernorMutation.hs @@ -26,7 +26,6 @@ import Agora.Governor ( ) import Agora.Plutarch.Orphans () import Agora.Scripts (AgoraScripts, authorityTokenSymbol, governorSTAssetClass) -import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PTxOutRef, PValidator, @@ -66,10 +65,6 @@ data MutateGovernorDatum = MutateGovernorDatum , -- | @since 0.1.ç Generic ) - deriving anyclass - ( -- | @since 0.1.ç - SOP.Generic - ) PlutusTx.makeIsDataIndexed ''MutateGovernorDatum [('MutateGovernorDatum, 0)] @@ -95,8 +90,6 @@ newtype PMutateGovernorDatum (s :: S) ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData diff --git a/agora/Agora/Effect/TreasuryWithdrawal.hs b/agora/Agora/Effect/TreasuryWithdrawal.hs index 53e13361..3bb058b2 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 Generics.SOP qualified as SOP import Plutarch.Api.V1 ( AmountGuarantees (Positive), KeyGuarantees (Sorted), @@ -57,10 +56,6 @@ data TreasuryWithdrawalDatum = TreasuryWithdrawalDatum , -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.1.0 - SOP.Generic - ) -- | @since 0.1.0 PlutusTx.makeLift ''TreasuryWithdrawalDatum @@ -88,8 +83,6 @@ newtype PTreasuryWithdrawalDatum (s :: S) ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData diff --git a/agora/Agora/Governor.hs b/agora/Agora/Governor.hs index 9f53b7fe..6d594ed2 100644 --- a/agora/Agora/Governor.hs +++ b/agora/Agora/Governor.hs @@ -40,7 +40,6 @@ import Agora.Proposal.Time ( ) import Agora.SafeMoney (GTTag) import Data.Tagged (Tagged (..)) -import Generics.SOP qualified as SOP import Plutarch.DataRepr ( DerivePConstantViaData (..), PDataFields, @@ -114,10 +113,6 @@ data GovernorRedeemer , -- | @since 0.2.0 Bounded ) - deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - ) deriving ( -- | @since 0.1.0 PlutusTx.ToData @@ -169,10 +164,6 @@ newtype PGovernorDatum (s :: S) = PGovernorDatum ( -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.1.0 - SOP.Generic - ) deriving anyclass ( -- | @since 0.1.0 PlutusType @@ -215,8 +206,6 @@ data PGovernorRedeemer (s :: S) ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData diff --git a/agora/Agora/Proposal.hs b/agora/Agora/Proposal.hs index eee62f8d..8bc70af9 100644 --- a/agora/Agora/Proposal.hs +++ b/agora/Agora/Proposal.hs @@ -108,10 +108,6 @@ newtype ProposalId = ProposalId {proposalTag :: Integer} , -- | @since 0.1.0 PlutusTx.UnsafeFromData ) - deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - ) {- | Encodes a result. Typically, for a Yes/No proposal, we encode it like this: @@ -141,10 +137,6 @@ newtype ResultTag = ResultTag {getResultTag :: Integer} , -- | @since 0.1.0 PlutusTx.UnsafeFromData ) - deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - ) {- | The "status" of the proposal. This is only useful for state transitions that need to happen as a result of a transaction as opposed to time-based "periods". @@ -240,7 +232,6 @@ data ProposalThresholds = ProposalThresholds , -- | @since 0.1.0 Generic ) - deriving anyclass (SOP.Generic) PlutusTx.makeIsDataIndexed 'ProposalThresholds [('ProposalThresholds, 0)] @@ -274,10 +265,6 @@ newtype ProposalVotes = ProposalVotes , -- | @since 0.1.0 PlutusTx.FromData ) - deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - ) {- | Create a 'ProposalVotes' that has the same shape as the 'effects' field. @@ -384,10 +371,6 @@ data ProposalRedeemer , -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - ) -- | @since 0.1.0 PlutusTx.makeIsDataIndexed @@ -411,9 +394,7 @@ newtype PResultTag (s :: S) = PResultTag (Term s PInteger) Generic ) deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - , -- @since 0.1.0 + ( -- @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -453,9 +434,7 @@ newtype PProposalId (s :: S) = PProposalId (Term s PInteger) Generic ) deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - , -- | @since 0.1.0 + ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -508,8 +487,6 @@ data PProposalStatus (s :: S) ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -551,8 +528,6 @@ newtype PProposalThresholds (s :: S) = PProposalThresholds ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -587,9 +562,7 @@ newtype PProposalVotes (s :: S) Generic ) deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - , -- | @since 0.1.0 + ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -637,8 +610,6 @@ newtype PProposalDatum (s :: S) = PProposalDatum ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -673,8 +644,6 @@ data PProposalRedeemer (s :: S) ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData diff --git a/agora/Agora/Proposal/Time.hs b/agora/Agora/Proposal/Time.hs index f50c3a33..97d61964 100644 --- a/agora/Agora/Proposal/Time.hs +++ b/agora/Agora/Proposal/Time.hs @@ -31,7 +31,6 @@ module Agora.Proposal.Time ( ) where import Control.Composition ((.*)) -import Generics.SOP qualified as SOP import Plutarch.Api.V1 ( PExtended (PFinite), PInterval (PInterval), @@ -107,10 +106,6 @@ data ProposalTimingConfig = ProposalTimingConfig , -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.1.0 - SOP.Generic - ) PlutusTx.makeIsDataIndexed 'ProposalTimingConfig [('ProposalTimingConfig, 0)] @@ -174,10 +169,6 @@ data PProposalTime (s :: S) = PProposalTime ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 - SOP.HasDatatypeInfo - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PEq @@ -194,8 +185,6 @@ newtype PProposalStartingTime (s :: S) = PProposalStartingTime (Term s PPOSIXTim ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -240,8 +229,6 @@ newtype PProposalTimingConfig (s :: S) = PProposalTimingConfig ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -273,9 +260,7 @@ newtype PMaxTimeRangeWidth (s :: S) Generic ) deriving anyclass - ( -- | @since 0.2.0 - SOP.Generic - , -- | @since 0.1.0 + ( -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData diff --git a/agora/Agora/Stake.hs b/agora/Agora/Stake.hs index 094fc54c..423f3479 100644 --- a/agora/Agora/Stake.hs +++ b/agora/Agora/Stake.hs @@ -114,10 +114,6 @@ data ProposalLock , -- | @since 0.1.0 Generic ) - deriving anyclass - ( -- | @since 0.1.0 - SOP.Generic - ) PlutusTx.makeIsDataIndexed ''ProposalLock @@ -234,8 +230,6 @@ newtype PStakeDatum (s :: S) = PStakeDatum ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -329,10 +323,6 @@ data PProposalLock (s :: S) ) deriving anyclass ( -- | @since 0.1.0 - SOP.Generic - , -- | @since 0.1.0 - SOP.HasDatatypeInfo - , -- | @since 0.1.0 PlutusType , -- | @since 0.1.0 PIsData @@ -419,11 +409,7 @@ data PStakeRole (s :: S) ) deriving anyclass ( -- | @since 0.2.0 - SOP.Generic - , -- | @since 0.2.0 PlutusType - , -- | @since 0.2.0 - SOP.HasDatatypeInfo , -- | @since 0.2.0 PEq ) diff --git a/agora/Agora/Treasury.hs b/agora/Agora/Treasury.hs index 6b66b7b8..e5b37336 100644 --- a/agora/Agora/Treasury.hs +++ b/agora/Agora/Treasury.hs @@ -75,10 +75,6 @@ data PTreasuryRedeemer (s :: S) , -- | @since 0.2.0 Enum ) - deriving anyclass - ( -- | @since 0.1.0 - SOP.Generic - ) deriving anyclass ( -- | @since 0.1.0 PlutusType From 7424a96a2d63b8002493aefea3525350cd118004 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 11 Aug 2022 06:43:33 +0800 Subject: [PATCH 74/78] remove `pvalidatorHashToTokenName` --- agora/Agora/Stake/Scripts.hs | 4 ++-- agora/Agora/Utils.hs | 10 ---------- 2 files changed, 2 insertions(+), 12 deletions(-) diff --git a/agora/Agora/Stake/Scripts.hs b/agora/Agora/Stake/Scripts.hs index 1dc9a194..f76deb44 100644 --- a/agora/Agora/Stake/Scripts.hs +++ b/agora/Agora/Stake/Scripts.hs @@ -17,7 +17,6 @@ import Agora.Stake ( ) import Agora.Utils ( mustFindDatum', - pvalidatorHashToTokenName, ) import Data.Function (on) import Data.Tagged (Tagged (..), untag) @@ -46,6 +45,7 @@ import Plutarch.SafeMoney ( pdiscreteValue', pvalueDiscrete', ) +import Plutarch.Unsafe (punsafeCoerce) import PlutusLedgerApi.V1.Value (AssetClass (AssetClass)) import Prelude hiding (Num (..)) @@ -135,7 +135,7 @@ stakePolicy gtClassRef = PPubKeyCredential _ -> pcon PFalse PScriptCredential ((pfield @"_0" #) -> validatorHash) -> let tn :: Term _ PTokenName - tn = pvalidatorHashToTokenName validatorHash + tn = punsafeCoerce $ pfromData validatorHash in pvalueOf # outputF.value # ownSymbol # tn #== 1 ) # pfromData txInfoF.outputs diff --git a/agora/Agora/Utils.hs b/agora/Agora/Utils.hs index 8b7ffb61..97a7cd0f 100644 --- a/agora/Agora/Utils.hs +++ b/agora/Agora/Utils.hs @@ -10,7 +10,6 @@ Plutarch utility functions that should be upstreamed or don't belong anywhere el -} module Agora.Utils ( validatorHashToTokenName, - pvalidatorHashToTokenName, mustFindDatum', validatorHashToAddress, pltAsData, @@ -24,9 +23,7 @@ import Plutarch.Api.V1 ( PDatum, PDatumHash, PMaybeData, - PTokenName (PTokenName), PTuple, - PValidatorHash, ) import Plutarch.Builtin (pforgetData) import Plutarch.Extra.List (plookupTuple) @@ -53,13 +50,6 @@ import PlutusLedgerApi.V1 ( validatorHashToTokenName :: ValidatorHash -> TokenName validatorHashToTokenName (ValidatorHash hash) = TokenName hash -{- | Plutarch level 'validatorHashToTokenName'. - - @since 0.1.0 --} -pvalidatorHashToTokenName :: forall (s :: S). Term s PValidatorHash -> Term s PTokenName -pvalidatorHashToTokenName vh = pcon (PTokenName (pto vh)) - {- | Find datum given a maybe datum hash @since 0.1.0 From 47d9e69298b11895c62ec848114f65e8a47330d1 Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Thu, 11 Aug 2022 06:12:59 +0800 Subject: [PATCH 75/78] update benchmark --- bench.csv | 1154 ++++++++++++++++++++++++++--------------------------- 1 file changed, 577 insertions(+), 577 deletions(-) diff --git a/bench.csv b/bench.csv index e3511ab5..bc75af40 100644 --- a/bench.csv +++ b/bench.csv @@ -1,582 +1,582 @@ name,cpu,mem,size -Agora/Effects/Treasury Withdrawal Effect/effect/Simple,12736207,40996,2908 -Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,12736207,40996,3220 -Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,12736207,40996,3093 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,108270758,296852,6444 -Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,7973222,20696,3222 -Agora/Stake/policy/stakeCreation,53357294,155623,2050 -Agora/Stake/validator/stakeDepositWithdraw deposit,187795456,518604,3825 -Agora/Stake/validator/stakeDepositWithdraw withdraw,187795456,518604,3813 -Agora/Stake/validator/set delegate/override existing delegate,100639801,266338,3877 -Agora/Stake/validator/set delegate/remove existing delegate,98230359,259005,3814 -Agora/Stake/validator/set delegate/set delegate to something,100539113,266338,3814 -Agora/Proposal/policy (proposal creation)/legal/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/legal/governor,354848880,943893,6928 -Agora/Proposal/policy (proposal creation)/legal/stake,153933633,408520,4479 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153933633,408520,4479 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33873644,101086,1811 -Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,354848880,943893,6897 -Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33873644,101086,1850 -Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159367293,423170,4487 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33873644,101086,1862 -Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,160396125,426628,4509 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,153933633,408520,4479 -Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33873644,101086,1838 -Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,153933633,408520,4475 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,153933633,408520,4479 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,153933633,408520,4479 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33873644,101086,1842 -Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,153933633,408520,4479 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,270612694,756318,6994 -Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,120950501,317982,4287 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,711284625,1983397,9648 -Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,552610861,1480482,6821 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1413916463,3893380,12967 -Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1187840396,3209013,9989 -Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,120950501,317982,4287 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,120950501,317982,4287 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,120950501,317982,4287 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,120950501,317982,4287 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,552610861,1480482,6821 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,552610861,1480482,6821 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,552610861,1480482,6821 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1187840396,3209013,9989 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1187840396,3209013,9989 -Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1187840396,3209013,9989 -Agora/Proposal/validator/voting/legal/ordinary/proposal,292107030,818192,6976 -Agora/Proposal/validator/voting/legal/ordinary/stake,138776145,368604,4313 -Agora/Proposal/validator/voting/legal/delegate/proposal,293223020,821804,7039 -Agora/Proposal/validator/voting/legal/delegate/stake,135207796,352770,4407 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,278165358,776398,7489 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,132049602,347450,4623 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,323181211,887380,7498 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,4630 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,373749316,1029579,8650 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,5782 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,495323391,1250397,8245 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3342 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,275372622,770485,7491 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,4625 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,311464859,854847,7492 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,4626 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,313726815,859655,7492 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,4626 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132049602,347450,4623 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,4630 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,5782 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3342 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,132049602,347450,4623 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,132772138,349714,4626 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,132772138,349714,4634 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,132049602,347450,4625 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,4630 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190734433,489947,5782 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,495323391,1250397,8245 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3342 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,495323391,1250397,8246 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3343 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,349498270,956970,7939 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,177634274,464336,5071 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,381832998,1053782,8877 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6009 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,3569 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,373749316,1029579,8472 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190734433,489947,5604 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,373749316,1029579,8644 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,190734433,489947,5776 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15783303,48140,3336 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,373749316,1029579,8650 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,190734433,489947,5782 -Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15783303,48140,3342 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,318054305,881782,8078 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,132049602,347450,5016 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,366765044,1002752,8087 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5023 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,413638263,1134963,9240 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6176 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,513404095,1300606,8639 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3736 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,315261569,875869,8080 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5018 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,351353806,960231,8081 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5019 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,353615762,965039,8081 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5019 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132049602,347450,5016 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5023 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6176 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3736 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,132049602,347450,5016 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,132772138,349714,5019 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,132772138,349714,5031 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,132049602,347450,5018 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5023 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6176 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,513404095,1300606,8639 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3736 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,513404095,1300606,8640 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3737 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,389387217,1062354,8528 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,177634274,464336,5464 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,421721945,1159166,9467 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6403 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,3963 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,413638263,1134963,9061 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190734433,489947,5997 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,413638263,1134963,9234 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,190734433,489947,6170 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15783303,48140,3730 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,413638263,1134963,9240 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,190734433,489947,6176 -Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15783303,48140,3736 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,437721146,1197934,9850 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,132049602,347450,6197 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,497516543,1348868,9859 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,6204 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,533305104,1451115,11011 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,7356 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,567646207,1451233,9819 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,4916 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,434928410,1192021,9852 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,6199 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,471020647,1276383,9853 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,6200 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,473282603,1281191,9853 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,6200 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132049602,347450,6197 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,6204 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,7356 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,4916 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,132049602,347450,6197 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,132772138,349714,6200 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,132772138,349714,6224 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,132049602,347450,6199 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,6204 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190734433,489947,7356 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,567646207,1451233,9819 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15783303,48140,4916 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,567646207,1451233,9820 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,4917 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,509054058,1378506,10300 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,177634274,464336,6645 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,541388786,1475318,11238 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,7583 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,5143 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,533305104,1451115,10833 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190734433,489947,7178 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,533305104,1451115,11005 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,190734433,489947,7350 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15783303,48140,4910 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,533305104,1451115,11011 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,190734433,489947,7356 -Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15783303,48140,4916 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,648239449,1844807,10259 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,551078264,1473072,7272 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,345550559,949444,7855 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,4866 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,396118664,1091643,9007 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6018 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,502511339,1271085,8482 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3579 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,297741970,832549,7848 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,4861 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,333834207,916911,7849 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,4862 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,336096163,921719,7849 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,4862 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,551078264,1473072,7272 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,4866 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6018 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3579 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,536963978,1432062,7272 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,132772138,349714,4862 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,132772138,349714,4870 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,551078264,1473072,7274 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,4866 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6018 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,502511339,1271085,8482 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3579 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,502511339,1271085,8483 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3580 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,371867618,1019034,8295 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,177634274,464336,5306 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,404202346,1115846,9234 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6245 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,3806 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,396118664,1091643,8829 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190734433,489947,5840 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,396118664,1091643,9001 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,190734433,489947,6012 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15783303,48140,3573 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,396118664,1091643,9007 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,190734433,489947,6018 -Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15783303,48140,3579 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,688128396,1950191,10850 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,551078264,1473072,7666 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,389134392,1064816,8445 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5259 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436007611,1197027,9598 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6412 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,520592043,1321294,8876 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3973 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,337630917,937933,8438 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5254 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,373723154,1022295,8439 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5255 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,375985110,1027103,8439 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5255 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,551078264,1473072,7666 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5259 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6412 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3973 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,536963978,1432062,7666 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,132772138,349714,5255 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,132772138,349714,5267 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,551078264,1473072,7668 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5259 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6412 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,520592043,1321294,8876 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3973 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,520592043,1321294,8877 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3974 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,411756565,1124418,8886 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,177634274,464336,5700 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,444091293,1221230,9825 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6639 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,4200 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436007611,1197027,9419 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190734433,489947,6233 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436007611,1197027,9592 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,190734433,489947,6406 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15783303,48140,3967 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436007611,1197027,9598 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,190734433,489947,6412 -Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15783303,48140,3973 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,807795237,2266343,12620 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,551078264,1473072,8846 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,519885891,1410932,10216 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,6440 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,555674452,1513179,11368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,7592 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,574834155,1471921,10056 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,5153 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,457297758,1254085,10209 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,6435 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,493389995,1338447,10210 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,6436 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,495651951,1343255,10210 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,6436 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,551078264,1473072,8846 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,6440 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,7592 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,5153 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,536963978,1432062,8846 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,132772138,349714,6436 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,132772138,349714,6460 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,551078264,1473072,8848 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,6440 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190734433,489947,7592 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,574834155,1471921,10056 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15783303,48140,5153 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,574834155,1471921,10057 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,5154 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,531423406,1440570,10657 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,177634274,464336,6881 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,563758134,1537382,11595 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,7819 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,5380 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,555674452,1513179,11190 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190734433,489947,7414 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,555674452,1513179,11362 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,190734433,489947,7586 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15783303,48140,5147 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,555674452,1513179,11368 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,190734433,489947,7592 -Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15783303,48140,5153 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1198176494,3435790,13728 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1187049093,3203669,10590 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,373512244,1027024,8307 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5167 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,424080349,1169223,9459 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6319 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,511496274,1296945,8783 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,3880 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,325703655,910129,8300 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5162 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,361795892,994491,8301 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5163 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,364057848,999299,8301 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5163 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1187049093,3203669,10590 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5167 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6319 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,3880 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1201163379,3244679,10590 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,132772138,349714,5163 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,132772138,349714,5171 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1187049093,3203669,10592 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5167 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6319 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,511496274,1296945,8783 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15783303,48140,3880 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,511496274,1296945,8784 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,3881 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,399829303,1096614,8748 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,177634274,464336,5608 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,432164031,1193426,9686 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6546 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,4107 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,424080349,1169223,9281 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,190734433,489947,6141 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,424080349,1169223,9453 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,190734433,489947,6313 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15783303,48140,3874 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,424080349,1169223,9459 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,190734433,489947,6319 -Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15783303,48140,3880 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1238065441,3541174,14318 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1187049093,3203669,10984 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,417096077,1142396,8896 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,5560 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,463969296,1274607,10049 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,6713 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,529576978,1347154,9177 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,4274 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,365592602,1015513,8889 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,5555 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,401684839,1099875,8890 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,5556 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,403946795,1104683,8890 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,5556 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1187049093,3203669,10984 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,5560 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,6713 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,4274 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1201163379,3244679,10984 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,132772138,349714,5556 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,132772138,349714,5568 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1187049093,3203669,10986 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,5560 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,190734433,489947,6713 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,529576978,1347154,9177 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15783303,48140,4274 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,529576978,1347154,9178 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,4275 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,439718250,1201998,9337 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,177634274,464336,6001 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,472052978,1298810,10276 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,6940 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,4501 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,463969296,1274607,9870 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,190734433,489947,6534 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,463969296,1274607,10043 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,190734433,489947,6707 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15783303,48140,4268 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,463969296,1274607,10049 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,190734433,489947,6713 -Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15783303,48140,4274 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1357732282,3857326,16089 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1187049093,3203669,12164 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,547847576,1488512,10668 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,132772138,349714,6741 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,583636137,1590759,11821 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,190734433,489947,7894 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,583819090,1497781,10358 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15783303,48140,5455 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,485259443,1331665,10661 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,132772138,349714,6736 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,521351680,1416027,10662 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,132772138,349714,6737 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,523613636,1420835,10662 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,132772138,349714,6737 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1187049093,3203669,12164 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,132772138,349714,6741 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,190734433,489947,7894 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15783303,48140,5455 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1201163379,3244679,12164 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,132772138,349714,6737 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,132772138,349714,6761 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1187049093,3203669,12166 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,132772138,349714,6741 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,190734433,489947,7894 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,583819090,1497781,10358 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15783303,48140,5455 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,583819090,1497781,10359 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15783303,48140,5456 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,559385091,1518150,11109 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,177634274,464336,7182 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,591719819,1614962,12047 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,194282542,497174,8120 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17607300,53202,5681 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,583636137,1590759,11642 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,190734433,489947,7715 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,583636137,1590759,11815 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,190734433,489947,7888 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15783303,48140,5448 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,583636137,1590759,11821 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,190734433,489947,7894 -Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15783303,48140,5455 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,126576208,334351,4293 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,48129948,145642,6957 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,129807454,343405,4309 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,6968 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,126576208,334351,4291 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,48129948,145642,6954 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,126576208,334351,4307 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,6966 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,126576208,334351,4297 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,6961 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,126576208,334351,4297 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,6961 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,129807454,343405,4313 -Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,6972 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,282885452,734987,6386 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,48129948,145642,9026 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,299041682,780257,6462 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,9077 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,282885452,734987,6375 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,48129948,145642,9018 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,282885452,734987,6456 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,9071 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,282885452,734987,6406 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,9046 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,282885452,734987,6406 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,9046 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,299041682,780257,6482 -Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,9097 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,478272007,1235782,9001 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,48129948,145642,11611 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,510584467,1326322,9152 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,11712 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,478272007,1235782,8981 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,48129948,145642,11599 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,478272007,1235782,9141 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,11701 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,478272007,1235782,9041 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,11651 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,478272007,1235782,9041 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,11651 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,510584467,1326322,9192 -Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,11752 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1728745959,4440870,25831 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,48129948,145642,28230 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,1864458291,4821138,26518 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,48129948,145642,28688 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1728745959,4440870,25746 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,48129948,145642,28185 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1728745959,4440870,26457 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,48129948,145642,28627 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1728745959,4440870,25999 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,48129948,145642,28398 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1728745959,4440870,25999 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,48129948,145642,28398 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,1864458291,4821138,26687 -Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,48129948,145642,28857 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",126576208,334351,4293 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",126576208,334351,4293 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",126576208,334351,4293 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",122205622,322501,4295 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",122205622,322501,4295 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",122205622,322501,4295 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",129807454,343405,4309 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",129807454,343405,4309 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",129807454,343405,4309 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",118974376,313447,4275 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",118974376,313447,4275 -"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,118974376,313447,4275 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,126576208,334351,4291 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,126576208,334351,4291 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,126576208,334351,4291 -Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,126576208,334351,4289 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",282885452,734987,6386 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",282885452,734987,6386 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",282885452,734987,6386 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",276236186,717545,6392 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",276236186,717545,6392 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",276236186,717545,6392 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",299041682,780257,6462 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",299041682,780257,6462 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",299041682,780257,6462 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",260079956,672275,6303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",260079956,672275,6303 -"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,260079956,672275,6303 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,282885452,734987,6375 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,282885452,734987,6375 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,282885452,734987,6375 -Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,282885452,734987,6365 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",478272007,1235782,9001 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",478272007,1235782,9001 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",478272007,1235782,9001 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",468774391,1211350,9012 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",468774391,1211350,9012 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",468774391,1211350,9012 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",510584467,1326322,9152 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",510584467,1326322,9152 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",510584467,1326322,9152 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",436461931,1120810,8838 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",436461931,1120810,8838 -"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,436461931,1120810,8838 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,478272007,1235782,8981 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,478272007,1235782,8981 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,478272007,1235782,8981 -Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,478272007,1235782,8960 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1728745959,4440870,25831 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1728745959,4440870,25831 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1728745959,4440870,25831 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1701018903,4371702,25892 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1701018903,4371702,25892 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1701018903,4371702,25892 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",1864458291,4821138,26518 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",1864458291,4821138,26518 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",1864458291,4821138,26518 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1565306571,3991434,25118 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1565306571,3991434,25118 -"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1565306571,3991434,25118 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1728745959,4440870,25746 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1728745959,4440870,25746 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1728745959,4440870,25746 -Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1728745959,4440870,25662 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple,380214695,980182,4275 +Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,544143721,1366494,4691 +Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets,545045362,1387355,4636 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass,112721874,312363,9413 +Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass,152563857,422397,4692 +Agora/Stake/policy/stakeCreation,54323406,159125,2646 +Agora/Stake/validator/stakeDepositWithdraw deposit,194804304,538628,5315 +Agora/Stake/validator/stakeDepositWithdraw withdraw,194804304,538628,5303 +Agora/Stake/validator/set delegate/override existing delegate,117949415,309090,5367 +Agora/Stake/validator/set delegate/remove existing delegate,115539973,301757,5304 +Agora/Stake/validator/set delegate/set delegate to something,114218077,301022,5304 +Agora/Proposal/policy (proposal creation)/legal/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/legal/governor,369498544,984529,9918 +Agora/Proposal/policy (proposal creation)/legal/stake,168978875,446628,5969 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,168978875,446628,5969 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal,33965644,101486,1940 +Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor,369498544,984529,9887 +Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal,33965644,101486,1979 +Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,174412535,461278,5977 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/proposal,33965644,101486,1991 +Agora/Proposal/policy (proposal creation)/illegal/has reached maximum proposals limit/stake,181677311,482844,5999 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/illegal/loose time range/stake,168978875,446628,5969 +Agora/Proposal/policy (proposal creation)/illegal/open time range/proposal,33965644,101486,1967 +Agora/Proposal/policy (proposal creation)/illegal/open time range/stake,168978875,446628,5965 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/VotingReady/stake,168978875,446628,5969 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Locked/stake,168978875,446628,5969 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/proposal,33965644,101486,1971 +Agora/Proposal/policy (proposal creation)/illegal/invalid proposal status/Finished/stake,168978875,446628,5969 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/proposal,278329834,780402,9534 +Agora/Proposal/validator/cosignature/legal/with 1 cosigners/stake,132939473,344002,5780 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/proposal,733369909,2047977,12188 +Agora/Proposal/validator/cosignature/legal/with 5 cosigners/stake,584246489,1537942,8314 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/proposal,1453961927,4008580,15507 +Agora/Proposal/validator/cosignature/legal/with 10 cosigners/stake,1244034344,3305773,11482 +Agora/Proposal/validator/cosignature/illegal/duplicate cosigners/stake,132939473,344002,5780 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: VotingReady/stake,132939473,344002,5780 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Locked/stake,132939473,344002,5780 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 1 cosigners/status: Finished/stake,132939473,344002,5780 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: VotingReady/stake,584246489,1537942,8314 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Locked/stake,584246489,1537942,8314 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 5 cosigners/status: Finished/stake,584246489,1537942,8314 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: VotingReady/stake,1244034344,3305773,11482 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Locked/stake,1244034344,3305773,11482 +Agora/Proposal/validator/cosignature/illegal/proposal status not Draft/with 10 cosigners/status: Finished/stake,1244034344,3305773,11482 +Agora/Proposal/validator/voting/legal/ordinary/proposal,300100170,843476,9516 +Agora/Proposal/validator/voting/legal/ordinary/stake,157219895,416300,5803 +Agora/Proposal/validator/voting/legal/delegate/proposal,301216160,847088,9579 +Agora/Proposal/validator/voting/legal/delegate/stake,161458884,426174,5897 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,293553258,818566,10029 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,144038574,373470,6116 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,339788223,934150,10038 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,6123 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,389689216,1074147,11190 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,7275 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,494243991,1258194,11233 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,3625 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,290760522,812653,10031 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,6118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,327404759,899415,10032 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,6119 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,329666715,904223,10032 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,6119 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,144038574,373470,6116 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,6123 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,7275 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,3625 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient cosigns/stake,144038574,373470,6116 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/insufficient votes/stake,144761110,375734,6119 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/ambiguous winning effect/stake,144761110,375734,6127 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,144038574,373470,6118 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,6123 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,201040711,510637,7275 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,494243991,1258194,11233 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15875303,48540,3625 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,494243991,1258194,11234 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,3626 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/proposal,365438170,1001538,10479 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/forget to mint GATs/stake,187940552,485026,6564 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,397772898,1098350,11417 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,7502 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,3852 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,389689216,1074147,11012 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,201040711,510637,7097 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/proposal,389689216,1074147,11184 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/stake,201040711,510637,7269 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/wrong GAT datum/authority,15875303,48540,3619 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/proposal,389689216,1074147,11190 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/stake,201040711,510637,7275 +Agora/Proposal/validator/advancing/with 1 cosigners and 1 effects/illegal/invalid governor output datum/authority,15875303,48540,3625 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,340836965,940834,10618 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,144038574,373470,6509 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,390766816,1066406,10627 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,6516 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,436972923,1196415,11780 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,7669 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,514789615,1314031,11627 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,4019 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,338044229,934921,10620 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,6511 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,374688466,1021683,10621 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,6512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,376950422,1026491,10621 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,6512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,144038574,373470,6509 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,6516 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,7669 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,4019 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient cosigns/stake,144038574,373470,6509 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/insufficient votes/stake,144761110,375734,6512 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/ambiguous winning effect/stake,144761110,375734,6524 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,144038574,373470,6511 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,6516 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,201040711,510637,7669 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,514789615,1314031,11627 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15875303,48540,4019 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,514789615,1314031,11628 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,4020 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/proposal,412721877,1123806,11068 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/forget to mint GATs/stake,187940552,485026,6957 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,445056605,1220618,12007 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,7896 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,4246 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,436972923,1196415,11601 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,201040711,510637,7490 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/proposal,436972923,1196415,11774 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/stake,201040711,510637,7663 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/wrong GAT datum/authority,15875303,48540,4013 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/proposal,436972923,1196415,11780 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/stake,201040711,510637,7669 +Agora/Proposal/validator/advancing/with 1 cosigners and 2 effects/illegal/invalid governor output datum/authority,15875303,48540,4019 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,482688086,1307638,12390 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,144038574,373470,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,543702595,1463174,12399 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,7697 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,578824044,1563219,13551 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,8849 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,576426487,1481542,12807 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,5199 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,479895350,1301725,12392 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,7692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,516539587,1388487,12393 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,7693 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,518801543,1393295,12393 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,7693 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,144038574,373470,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,7697 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,8849 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,5199 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient cosigns/stake,144038574,373470,7690 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/insufficient votes/stake,144761110,375734,7693 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/ambiguous winning effect/stake,144761110,375734,7717 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,144038574,373470,7692 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,7697 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,201040711,510637,8849 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,576426487,1481542,12807 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15875303,48540,5199 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,576426487,1481542,12808 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,5200 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/proposal,554572998,1490610,12840 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/forget to mint GATs/stake,187940552,485026,8138 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,586907726,1587422,13778 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,9076 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,5426 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,578824044,1563219,13373 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,201040711,510637,8671 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/proposal,578824044,1563219,13545 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/stake,201040711,510637,8843 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/wrong GAT datum/authority,15875303,48540,5193 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/proposal,578824044,1563219,13551 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/stake,201040711,510637,8849 +Agora/Proposal/validator/advancing/with 1 cosigners and 5 effects/illegal/invalid governor output datum/authority,15875303,48540,5199 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,677995493,1927471,12799 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,582713892,1530532,8765 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,362157571,996214,10395 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,6359 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,412058564,1136211,11547 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,7511 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,501431939,1278882,11470 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,3862 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,313129870,874717,10388 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,6354 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,349774107,961479,10389 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,6355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,352036063,966287,10389 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,6355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,582713892,1530532,8765 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,6359 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,7511 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,3862 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient cosigns/stake,568599606,1489522,8765 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/insufficient votes/stake,144761110,375734,6355 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/ambiguous winning effect/stake,144761110,375734,6363 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,582713892,1530532,8767 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,6359 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,201040711,510637,7511 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,501431939,1278882,11470 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15875303,48540,3862 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,501431939,1278882,11471 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,3863 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/proposal,387807518,1063602,10835 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/forget to mint GATs/stake,187940552,485026,6799 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,420142246,1160414,11774 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,7738 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,4089 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,412058564,1136211,11369 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,201040711,510637,7333 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/proposal,412058564,1136211,11541 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/stake,201040711,510637,7505 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/wrong GAT datum/authority,15875303,48540,3856 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/proposal,412058564,1136211,11547 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/stake,201040711,510637,7511 +Agora/Proposal/validator/advancing/with 5 cosigners and 1 effects/illegal/invalid governor output datum/authority,15875303,48540,3862 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,725279200,2049739,13390 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,582713892,1530532,9159 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,413136164,1128470,10985 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,6752 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,459342271,1258479,12138 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,7905 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,521977563,1334719,11864 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,4256 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,360413577,996985,10978 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,6747 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,397057814,1083747,10979 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,6748 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,399319770,1088555,10979 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,6748 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,582713892,1530532,9159 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,6752 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,7905 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,4256 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient cosigns/stake,568599606,1489522,9159 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/insufficient votes/stake,144761110,375734,6748 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/ambiguous winning effect/stake,144761110,375734,6760 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,582713892,1530532,9161 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,6752 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,201040711,510637,7905 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,521977563,1334719,11864 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15875303,48540,4256 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,521977563,1334719,11865 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,4257 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/proposal,435091225,1185870,11426 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/forget to mint GATs/stake,187940552,485026,7193 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,467425953,1282682,12365 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,8132 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,4483 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,459342271,1258479,11959 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,201040711,510637,7726 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/proposal,459342271,1258479,12132 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/stake,201040711,510637,7899 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/wrong GAT datum/authority,15875303,48540,4250 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/proposal,459342271,1258479,12138 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/stake,201040711,510637,7905 +Agora/Proposal/validator/advancing/with 5 cosigners and 2 effects/illegal/invalid governor output datum/authority,15875303,48540,4256 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,867130321,2416543,15160 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,582713892,1530532,10339 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,566071943,1525238,12756 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,7933 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,601193392,1625283,13908 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,9085 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,583614435,1502230,13044 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,5436 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,502264698,1363789,12749 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,7928 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,538908935,1450551,12750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,7929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,541170891,1455359,12750 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,7929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,582713892,1530532,10339 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,7933 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,9085 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,5436 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient cosigns/stake,568599606,1489522,10339 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/insufficient votes/stake,144761110,375734,7929 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/ambiguous winning effect/stake,144761110,375734,7953 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,582713892,1530532,10341 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,7933 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,201040711,510637,9085 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,583614435,1502230,13044 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15875303,48540,5436 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,583614435,1502230,13045 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,5437 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/proposal,576942346,1552674,13197 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/forget to mint GATs/stake,187940552,485026,8374 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,609277074,1649486,14135 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,9312 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,5663 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,601193392,1625283,13730 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,201040711,510637,8907 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/proposal,601193392,1625283,13902 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/stake,201040711,510637,9079 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/wrong GAT datum/authority,15875303,48540,5430 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/proposal,601193392,1625283,13908 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/stake,201040711,510637,9085 +Agora/Proposal/validator/advancing/with 5 cosigners and 5 effects/illegal/invalid governor output datum/authority,15875303,48540,5436 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/proposal,1245892718,3569074,16268 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Draft to VotingReady/stake,1243243041,3300429,12083 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/proposal,390119256,1073794,10847 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,6660 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/proposal,440020249,1213791,11999 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,7812 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/governor,510416874,1304742,11771 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,4163 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/proposal,341091555,952297,10840 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,6655 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/proposal,377735792,1039059,10841 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,6656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/proposal,379997748,1043867,10841 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,6656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,1243243041,3300429,12083 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,6660 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,7812 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,4163 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient cosigns/stake,1257357327,3341439,12083 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/insufficient votes/stake,144761110,375734,6656 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/ambiguous winning effect/stake,144761110,375734,6664 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Draft/stake,1243243041,3300429,12085 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,6660 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/stake,201040711,510637,7812 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/governor,510416874,1304742,11771 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/to next state too late/from Locked/authority,15875303,48540,4163 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/governor,510416874,1304742,11772 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,4164 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/proposal,415769203,1141182,11288 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/forget to mint GATs/stake,187940552,485026,7101 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/proposal,448103931,1237994,12226 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,8039 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,4390 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/proposal,440020249,1213791,11821 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/mint GATs with bad token name/stake,201040711,510637,7634 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/proposal,440020249,1213791,11993 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/stake,201040711,510637,7806 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/wrong GAT datum/authority,15875303,48540,4157 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/proposal,440020249,1213791,11999 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/stake,201040711,510637,7812 +Agora/Proposal/validator/advancing/with 10 cosigners and 1 effects/illegal/invalid governor output datum/authority,15875303,48540,4163 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/proposal,1293176425,3691342,16858 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Draft to VotingReady/stake,1243243041,3300429,12477 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/proposal,441097849,1206050,11436 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,7053 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/proposal,487303956,1336059,12589 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,8206 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/governor,530962498,1360579,12165 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,4557 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/proposal,388375262,1074565,11429 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,7048 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/proposal,425019499,1161327,11430 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,7049 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/proposal,427281455,1166135,11430 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,7049 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,1243243041,3300429,12477 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,7053 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,8206 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,4557 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient cosigns/stake,1257357327,3341439,12477 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/insufficient votes/stake,144761110,375734,7049 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/ambiguous winning effect/stake,144761110,375734,7061 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Draft/stake,1243243041,3300429,12479 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,7053 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/stake,201040711,510637,8206 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/governor,530962498,1360579,12165 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/to next state too late/from Locked/authority,15875303,48540,4557 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/governor,530962498,1360579,12166 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,4558 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/proposal,463052910,1263450,11877 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/forget to mint GATs/stake,187940552,485026,7494 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/proposal,495387638,1360262,12816 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,8433 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,4784 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/proposal,487303956,1336059,12410 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/mint GATs with bad token name/stake,201040711,510637,8027 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/proposal,487303956,1336059,12583 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/stake,201040711,510637,8200 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/wrong GAT datum/authority,15875303,48540,4551 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/proposal,487303956,1336059,12589 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/stake,201040711,510637,8206 +Agora/Proposal/validator/advancing/with 10 cosigners and 2 effects/illegal/invalid governor output datum/authority,15875303,48540,4557 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/proposal,1435027546,4058146,18629 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Draft to VotingReady/stake,1243243041,3300429,13657 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/proposal,594033628,1602818,13208 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from VotingReady to Locked/stake,144761110,375734,8234 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/proposal,629155077,1702863,14361 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/stake,201040711,510637,9387 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/governor,592599370,1528090,13346 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to next state/from Locked to Finished/authority,15875303,48540,5738 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/proposal,530226383,1441369,13201 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Draft to Finished/stake,144761110,375734,8229 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/proposal,566870620,1528131,13202 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from VotingReady to Finished/stake,144761110,375734,8230 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/proposal,569132576,1532939,13202 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/legal/to failed state/from Locked to Finished/stake,144761110,375734,8230 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,1243243041,3300429,13657 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,144761110,375734,8234 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/stake,201040711,510637,9387 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/advance finished proposals/(negative test)/authority,15875303,48540,5738 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient cosigns/stake,1257357327,3341439,13657 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/insufficient votes/stake,144761110,375734,8230 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/ambiguous winning effect/stake,144761110,375734,8254 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Draft/stake,1243243041,3300429,13659 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from VotingReady/stake,144761110,375734,8234 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/stake,201040711,510637,9387 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/governor,592599370,1528090,13346 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/to next state too late/from Locked/authority,15875303,48540,5738 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/governor,592599370,1528090,13347 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/altered output stake datum/from Locked/authority,15875303,48540,5739 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/proposal,604904031,1630254,13649 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/forget to mint GATs/stake,187940552,485026,8675 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/proposal,637238759,1727066,14587 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/stake,204588820,517864,9613 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs for wrong validators/authority,17699300,53602,5964 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/proposal,629155077,1702863,14182 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/mint GATs with bad token name/stake,201040711,510637,9208 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/proposal,629155077,1702863,14355 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/stake,201040711,510637,9381 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/wrong GAT datum/authority,15875303,48540,5731 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/proposal,629155077,1702863,14361 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/stake,201040711,510637,9387 +Agora/Proposal/validator/advancing/with 10 cosigners and 5 effects/illegal/invalid governor output datum/authority,15875303,48540,5738 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake,140863709,370195,5783 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/proposal,282615841,794299,9497 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake,147212927,388303,5799 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/proposal,300115413,843740,9508 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/stake,139825432,367397,5781 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/creator: remove creator locks when finished/proposal,256687085,727957,9494 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/stake,143981681,379249,5797 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove all locks when finished/proposal,264924554,752465,9506 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/stake,140863709,370195,5787 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Locked/proposal,252614193,719732,9501 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/stake,140863709,370195,5787 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: unlock after voting/Finished/proposal,253179682,720934,9501 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/stake,147212927,388303,5803 +Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: remove vote locks when locked/proposal,270679254,770375,9512 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/stake,297243845,781199,7876 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: retract votes while voting/proposal,425257089,1206963,11566 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/stake,328989935,871739,7952 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: retract votes while voting/proposal,494812989,1407716,11617 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/stake,292052460,767209,7865 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/creator: remove creator locks when finished/proposal,364767897,1045813,11558 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/stake,312833705,826469,7946 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove all locks when finished/proposal,402960090,1157169,11611 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/stake,297243845,781199,7896 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Locked/proposal,364848113,1048780,11586 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/stake,297243845,781199,7896 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter: unlock after voting/Finished/proposal,365413602,1049982,11586 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/stake,328989935,871739,7972 +Agora/Proposal/validator/unlocking/legal/with 5 proposals/voter/creator: remove vote locks when locked/proposal,434969502,1250735,11637 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/stake,492719015,1294954,10491 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: retract votes while voting/proposal,603558649,1722793,14151 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/stake,556211195,1476034,10642 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: retract votes while voting/proposal,738184959,2112686,14252 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/stake,482336245,1266974,10471 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/creator: remove creator locks when finished/proposal,499868912,1443133,14139 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/stake,523898735,1385494,10631 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove all locks when finished/proposal,575504510,1663049,14241 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/stake,492719015,1294954,10531 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Locked/proposal,505140513,1460090,14191 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/stake,492719015,1294954,10531 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter: unlock after voting/Finished/proposal,505706002,1461292,14191 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/stake,556211195,1476034,10682 +Agora/Proposal/validator/unlocking/legal/with 10 proposals/voter/creator: remove vote locks when locked/proposal,640332312,1851185,14292 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/stake,1743760103,4582986,27321 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: retract votes while voting/proposal,1744688633,5024105,30770 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/stake,2010427259,5343522,28008 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: retract votes while voting/proposal,2295765567,6624494,31228 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/stake,1700152469,4465470,27236 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/creator: remove creator locks when finished/proposal,1364515408,3985981,30725 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/stake,1874714927,4963254,27947 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove all locks when finished/proposal,1679788798,4900681,31167 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/stake,1743760103,4582986,27489 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Locked/proposal,1403011873,4092474,30938 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/stake,1743760103,4582986,27489 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter: unlock after voting/Finished/proposal,1403577362,4093676,30938 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/stake,2010427259,5343522,28177 +Agora/Proposal/validator/unlocking/legal/with 42 proposals/voter/creator: remove vote locks when locked/proposal,1954654296,5694065,31397 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Draft/stake",140863709,370195,5783 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Locked/stake",140863709,370195,5783 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Voter , status: Finished/stake",140863709,370195,5783 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Draft/stake",135454846,355547,5785 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Locked/stake",135454846,355547,5785 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Creator , status: Finished/stake",135454846,355547,5785 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Draft/stake",147212927,388303,5799 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Locked/stake",147212927,388303,5799 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Both , status: Finished/stake",147212927,388303,5799 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",129105628,337439,5765 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",129105628,337439,5765 +"Agora/Proposal/validator/unlocking/illegal/with 1 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,129105628,337439,5765 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Draft/stake,139825432,367397,5781 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: VotingReady/stake,139825432,367397,5781 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/remove creator too early/status: Locked/stake,139825432,367397,5781 +Agora/Proposal/validator/unlocking/illegal/with 1 proposals/creator: retract votes/stake,139825432,367397,5779 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Draft/stake",297243845,781199,7876 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Locked/stake",297243845,781199,7876 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Voter , status: Finished/stake",297243845,781199,7876 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Draft/stake",285403194,749767,7882 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Locked/stake",285403194,749767,7882 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Creator , status: Finished/stake",285403194,749767,7882 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Draft/stake",328989935,871739,7952 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Locked/stake",328989935,871739,7952 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Both , status: Finished/stake",328989935,871739,7952 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",253657104,659227,7793 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",253657104,659227,7793 +"Agora/Proposal/validator/unlocking/illegal/with 5 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,253657104,659227,7793 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Draft/stake,292052460,767209,7865 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: VotingReady/stake,292052460,767209,7865 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/remove creator too early/status: Locked/stake,292052460,767209,7865 +Agora/Proposal/validator/unlocking/illegal/with 5 proposals/creator: retract votes/stake,292052460,767209,7855 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Draft/stake",492719015,1294954,10491 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Locked/stake",492719015,1294954,10491 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Voter , status: Finished/stake",492719015,1294954,10491 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Draft/stake",472838629,1242542,10502 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Locked/stake",472838629,1242542,10502 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Creator , status: Finished/stake",472838629,1242542,10502 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Draft/stake",556211195,1476034,10642 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Locked/stake",556211195,1476034,10642 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Both , status: Finished/stake",556211195,1476034,10642 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",409346449,1061462,10328 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",409346449,1061462,10328 +"Agora/Proposal/validator/unlocking/illegal/with 10 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,409346449,1061462,10328 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Draft/stake,482336245,1266974,10471 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: VotingReady/stake,482336245,1266974,10471 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/remove creator too early/status: Locked/stake,482336245,1266974,10471 +Agora/Proposal/validator/unlocking/illegal/with 10 proposals/creator: retract votes/stake,482336245,1266974,10450 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Draft/stake",1743760103,4582986,27321 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Locked/stake",1743760103,4582986,27321 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Voter , status: Finished/stake",1743760103,4582986,27321 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Draft/stake",1672425413,4396302,27382 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Locked/stake",1672425413,4396302,27382 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Creator , status: Finished/stake",1672425413,4396302,27382 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Draft/stake",2010427259,5343522,28008 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Locked/stake",2010427259,5343522,28008 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Both , status: Finished/stake",2010427259,5343522,28008 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Draft/stake",1405758257,3635766,26608 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Locked/stake",1405758257,3635766,26608 +"Agora/Proposal/validator/unlocking/illegal/with 42 proposals/retract votes while not voting/role: Irrelevant , status: Finished/stake",1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: True/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Draft retract votes: False/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: True/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: VotingReady retract votes: False/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: True/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Locked retract votes: False/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: True/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/unlock an irrelevant stake/status: Finished retract votes: False/stake,1405758257,3635766,26608 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Draft/stake,1700152469,4465470,27236 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: VotingReady/stake,1700152469,4465470,27236 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/remove creator too early/status: Locked/stake,1700152469,4465470,27236 +Agora/Proposal/validator/unlocking/illegal/with 42 proposals/creator: retract votes/stake,1700152469,4465470,27152 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,19822997,52452,427 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32009395,84810,527 -Agora/Treasury/Validator/Positive/Allows for effect changes,30529414,78579,983 +Agora/Treasury/Validator/Positive/Allows for effect changes,31553082,81982,1423 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple,19822997,52452,427 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32009395,84810,527 -Agora/Governor/policy/totally legal,67334379,187470,1867 -Agora/Governor/validator/mutate/legal,115397394,308142,6308 +Agora/Governor/policy/totally legal,70301827,197578,2576 +Agora/Governor/validator/mutate/legal,119848510,323653,9297 From 4d7fa7901c5c0f6306690586ac5533dba7154a4c Mon Sep 17 00:00:00 2001 From: Hongrui Fang Date: Fri, 12 Aug 2022 19:13:28 +0800 Subject: [PATCH 76/78] remove unused development flag --- cabal.project | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/cabal.project b/cabal.project index 2d2f2793..96f675f2 100644 --- a/cabal.project +++ b/cabal.project @@ -3,7 +3,4 @@ packages: ./. benchmarks: true tests: true -package plutarch - flags: +development - -test-show-details: direct \ No newline at end of file +test-show-details: direct From 93d41deba3896a13522a560fbdb9bf484bfe9ded Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Sat, 13 Aug 2022 14:56:14 +0200 Subject: [PATCH 77/78] add changelog entry for 0.2.0 --- CHANGELOG.md | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index c903dc6a..3a8f0178 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -2,8 +2,9 @@ This format is based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0). +## Unreleased (Candidate for 1.0.0) -## Unreleased (Candidate for 0.2.0) +## 0.2.0 -- 2022-08-13 ### Added @@ -11,6 +12,14 @@ This format is based on [Keep A Changelog](https://keepachangelog.com/en/1.0.0). ### Modified +- Bump plutarch to 1.2 and use `liqwid-nix` for flake derivation. + + Included by [#150](https://github.com/Liqwid-Labs/agora/pull/150). + +- Script building uses the lazy record `AgoraScripts` instead of explicit per-component parameters. + + Included by [#150](https://github.com/Liqwid-Labs/agora/pull/150). + - Stake delegation. Included by [#149](https://github.com/Liqwid-Labs/agora/pull/149). From a6ad4c7f5f906bfc3c2f28e228d71fb7cfb5a636 Mon Sep 17 00:00:00 2001 From: Emily Martins Date: Sat, 13 Aug 2022 15:02:24 +0200 Subject: [PATCH 78/78] bump version in agora.cabal --- agora.cabal | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/agora.cabal b/agora.cabal index b2c18f1c..d9819e16 100644 --- a/agora.cabal +++ b/agora.cabal @@ -1,6 +1,6 @@ cabal-version: 3.0 name: agora -version: 0.1.0 +version: 0.2.0 extra-source-files: CHANGELOG.md author: Emily Martins license: Apache-2.0