add withBuiltinPairAsData

This commit is contained in:
Hongrui Fang 2022-07-18 16:46:52 +08:00
parent 51c4955a37
commit f6cf4f01db
No known key found for this signature in database
GPG key ID: 1E0454204FC7D755
3 changed files with 52 additions and 22 deletions

View file

@ -41,7 +41,7 @@ module Agora.Proposal (
import Agora.Proposal.Time (PProposalStartingTime, PProposalTimingConfig, ProposalStartingTime, ProposalTimingConfig) import Agora.Proposal.Time (PProposalStartingTime, PProposalTimingConfig, ProposalStartingTime, ProposalTimingConfig)
import Agora.SafeMoney (GTTag) import Agora.SafeMoney (GTTag)
import Agora.Utils (mustBePJust) import Agora.Utils (withBuiltinPairAsData)
import Data.Tagged (Tagged) import Data.Tagged (Tagged)
import GHC.Generics qualified as GHC import GHC.Generics qualified as GHC
import Generics.SOP (Generic, I (I)) import Generics.SOP (Generic, I (I))
@ -62,8 +62,10 @@ import Plutarch.Extra.IsData (
EnumIsData (..), EnumIsData (..),
ProductIsData (ProductIsData), ProductIsData (ProductIsData),
) )
import Plutarch.Extra.List (pfirstJust)
import Plutarch.Extra.Map qualified as PM import Plutarch.Extra.Map qualified as PM
import Plutarch.Extra.Map.Unsorted qualified as PUM import Plutarch.Extra.Map.Unsorted qualified as PUM
import Plutarch.Extra.Maybe (pfromJust)
import Plutarch.Extra.Other (DerivePNewtype' (..)) import Plutarch.Extra.Other (DerivePNewtype' (..))
import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC) import Plutarch.Extra.TermCont (pguardC, pletC, pmatchC)
import Plutarch.Lift ( import Plutarch.Lift (
@ -810,13 +812,6 @@ phighestVotes = phoistAcyclic $
let l :: Term _ (PBuiltinList _) let l :: Term _ (PBuiltinList _)
l = pto $ pto votes l = pto $ pto votes
f ::
Term
_
( PBuiltinPair (PAsData PResultTag) (PAsData PInteger)
:--> PBuiltinPair (PAsData PResultTag) (PAsData PInteger)
:--> PBuiltinPair (PAsData PResultTag) (PAsData PInteger)
)
f = phoistAcyclic $ f = phoistAcyclic $
plam $ \this last -> plam $ \this last ->
let lastVotes = pfromData $ psndBuiltin # last let lastVotes = pfromData $ psndBuiltin # last
@ -839,13 +834,14 @@ pneutralOption = phoistAcyclic $
let l :: Term _ (PBuiltinList (PBuiltinPair (PAsData PResultTag) _)) let l :: Term _ (PBuiltinList (PBuiltinPair (PAsData PResultTag) _))
l = pto effects l = pto effects
f :: Term _ (PBuiltinPair (PAsData PResultTag) (PAsData (PMap 'Unsorted _ _)) :--> PBool)
f = phoistAcyclic $ f = phoistAcyclic $
plam $ \((pfromData . (psndBuiltin #) -> el)) -> plam $
let el' :: Term _ (PBuiltinList _) withBuiltinPairAsData $ \rt el ->
el' = pto el pif
in pnull # el' (PAssocMap.pnull # el)
in pfromData $ pfstBuiltin #$ mustBePJust # "No neutral option" #$ pfind # f # l (pcon $ PJust rt)
(pcon PNothing)
in pfromJust #$ pfirstJust # f # l
{- | Return true if the thresholds are valid. {- | Return true if the thresholds are valid.

View file

@ -1,3 +1,5 @@
{-# LANGUAGE QuantifiedConstraints #-}
{- | {- |
Module : Agora.Utils Module : Agora.Utils
Maintainer : emi@haskell.fyi Maintainer : emi@haskell.fyi
@ -20,6 +22,8 @@ module Agora.Utils (
isScriptAddress, isScriptAddress,
isPubKey, isPubKey,
pltAsData, pltAsData,
pon,
withBuiltinPairAsData,
) where ) where
import Plutarch.Api.V1 ( import Plutarch.Api.V1 (
@ -206,3 +210,33 @@ pltAsData ::
pltAsData = phoistAcyclic $ pltAsData = phoistAcyclic $
plam $ plam $
\(pfromData -> l) (pfromData -> r) -> l #< r \(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

View file

@ -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,333137234,829671,3674
Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries ,492197164,1196783,3986 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/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/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/policy/stakeCreation,51008580,149029,2522
Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745 Agora/Stake/validator/stakeDepositWithdraw deposit,183506412,498838,4745
Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733 Agora/Stake/validator/stakeDepositWithdraw withdraw,183506412,498838,4733
Agora/Proposal/policy (proposal creation)/legal/proposal,33689644,100286,2002 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)/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/proposal,33689644,100286,2002
Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake,153960499,403133,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,33689644,100286,1971 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/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/proposal,33689644,100286,2010
Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake,159394159,417783,5412 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: 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/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/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/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: 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/propsoal,259733365,725356,8326
Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake,118915099,307672,5225 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/insufficient votes/stake,118915099,307672,5225
Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake,118915099,307672,5217 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 1 stakes/governor,258666820,668654,8974
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 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/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: 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/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 simple,20570665,54655,725
Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs,32757063,87013,825
Agora/Governor/policy/totally legal,60002734,167736,2267 Agora/Governor/policy/totally legal,60002734,167736,2267
Agora/Governor/validator/GATs minting,255328308,682125,8827 Agora/Governor/validator/GATs minting,255584059,683393,8855
Agora/Governor/validator/mutate governor state,93971983,261537,8301 Agora/Governor/validator/mutate governor state,93971983,261537,8329

1 name cpu mem size
2 Agora/Effects/Treasury Withdrawal Effect/effect/Simple 333137234 829671 3674
3 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries 492197164 1196783 3986
4 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets 455817227 1103968 3859
5 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass 92825132 256078 8201 8229
6 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass 112671240 312571 3747
7 Agora/Stake/policy/stakeCreation 51008580 149029 2522
8 Agora/Stake/validator/stakeDepositWithdraw deposit 183506412 498838 4745
9 Agora/Stake/validator/stakeDepositWithdraw withdraw 183506412 498838 4733
10 Agora/Proposal/policy (proposal creation)/legal/proposal 33689644 100286 2002
11 Agora/Proposal/policy (proposal creation)/legal/governor 324511293 861435 8681 8709
12 Agora/Proposal/policy (proposal creation)/legal/stake 153960499 403133 5404
13 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/proposal 33689644 100286 2002
14 Agora/Proposal/policy (proposal creation)/illegal/invalid next proposal id/stake 153960499 403133 5404
15 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/proposal 33689644 100286 1971
16 Agora/Proposal/policy (proposal creation)/illegal/use other's stake/governor 324511293 861435 8650 8678
17 Agora/Proposal/policy (proposal creation)/illegal/altered stake/proposal 33689644 100286 2002
18 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/proposal 33689644 100286 2010
19 Agora/Proposal/policy (proposal creation)/illegal/invalid stake locks/stake 159394159 417783 5412
66 Agora/Proposal/validator/advancing/legal/advance to next state/from: VotingReady/stake 118915099 307672 5229
67 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/propsoal 295366820 822071 8771
68 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/stake 156324691 401372 5668
69 Agora/Proposal/validator/advancing/legal/advance to next state/from: Locked/governor 258411069 258666820 667386 668654 8946 8974
70 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/propsoal 258602387 722952 8326
71 Agora/Proposal/validator/advancing/legal/advance to failed state/from: VotingReady/stake 118915099 307672 5225
72 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/propsoal 259733365 725356 8326
73 Agora/Proposal/validator/advancing/legal/advance to failed state/from: Locked/stake 118915099 307672 5225
74 Agora/Proposal/validator/advancing/illegal/insufficient votes/stake 118915099 307672 5225
75 Agora/Proposal/validator/advancing/illegal/initial state is Finished/stake 118915099 307672 5217
76 Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 1 stakes/governor 258411069 258666820 667386 668654 8946 8974
77 Agora/Proposal/validator/advancing/illegal/invalid stake output/from Lockedwith 5 stakes/governor 265599017 265854768 688074 689342 9187 9215
78 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/stake 125083340 324576 5219
79 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter: retract votes while voting/propsoal 236574652 665124 8323
80 Agora/Proposal/validator/unlocking/legal/with 1 proposals/voter/creator: retract votes while voting/stake 128314586 333630 5235
233 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple 20570665 54655 725
234 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs 32757063 87013 825
235 Agora/Governor/policy/totally legal 60002734 167736 2267
236 Agora/Governor/validator/GATs minting 255328308 255584059 682125 683393 8827 8855
237 Agora/Governor/validator/mutate governor state 93971983 261537 8301 8329