efficiently encode proposal datum on chain

This commit is contained in:
Hongrui Fang 2022-06-25 16:14:42 +08:00
parent f26442fb0b
commit 4d7e323e01
No known key found for this signature in database
GPG key ID: 1C4711FFF64C0254
4 changed files with 101 additions and 59 deletions

View file

@ -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'.

View file

@ -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)

View file

@ -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)
--------------------------------------------------------------------------------

View file

@ -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

1 name cpu mem size
2 Agora/Effects/Treasury Withdrawal Effect/effect/Simple 333327612 830203 3674
3 Agora/Effects/Treasury Withdrawal Effect/effect/Simple with multiple treasuries 492387542 1197315 3986
4 Agora/Effects/Treasury Withdrawal Effect/effect/Mixed Assets 456007605 1104500 3859
5 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/governor validator should pass 87839169 96559225 243032 271500 8733 9112
6 Agora/Effects/Governor Mutation Effect/validator/valid new governor datum/effect validator should pass 106082031 114802087 292993 321461 3609 3723
7 Agora/Stake/policy/stakeCreation 52241265 50939580 152127 148729 2514 2387
8 Agora/Stake/validator/stakeDepositWithdraw deposit 180880812 181581435 492023 493259 4431 4413
9 Agora/Stake/validator/stakeDepositWithdraw withdraw 180880812 181581435 492023 493259 4419 4401
10 Agora/Proposal/policy/proposalCreation 23140177 69194 1517 1503
11 Agora/Proposal/validator/cosignature/proposal 339142002 325643495 963240 929930 8640 8840
12 Agora/Proposal/validator/cosignature/stake 126327509 125315872 315061 312659 4964 4934
13 Agora/Proposal/validator/voting/proposal 296502589 281136993 833052 794418 8568 8758
14 Agora/Proposal/validator/voting/stake 121170376 120122971 320853 320497 4937 4891
15 Agora/Proposal/validator/advancing/successfully advance to next state/Draft -> VotringReady 291922922 275767527 820018 779218 8473 8665
16 Agora/Proposal/validator/advancing/successfully advance to next state/VotingReady -> Locked 307211397 290854622 861958 820626 8482 8674
17 Agora/Proposal/validator/advancing/successfully advance to next state/Locked -> Finished 295603412 279448017 828131 787331 8482 8674
18 Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Draft -> Finished 291426433 275271038 819116 778316 8475 8667
19 Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/VotingReady -> Finished 292844967 276689572 822421 781621 8476 8668
20 Agora/Proposal/validator/advancing/successfully advance to failed state: timeout/Locked -> Finished 293975945 277820550 824825 784025 8476 8668
21 Agora/Proposal/validator/unlocking/legal/1 proposals, voter, unlock stake + retract votes, VotingReady 303185955 289580399 850282 816378 8520 8718
22 Agora/Proposal/validator/unlocking/legal/1 proposals, creator, unlock stake, Finished 273908264 259859750 775516 740610 8524 8720
23 Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Finished 269372007 256153418 765161 732289 8524 8722
24 Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/1 proposals, voter, unlock stake, Locked 269372007 256153418 765161 732289 8524 8722
25 Agora/Proposal/validator/unlocking/legal/42 proposals, voter, unlock stake + retract votes, VotingReady 2908698194 2828039393 8182353 7977807 29874 29495
26 Agora/Proposal/validator/unlocking/legal/42 proposals, creator, unlock stake, Finished 2616813289 2501684605 7385454 7096512 30143 29680
27 Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Finished 2465055872 2393040618 6938449 6756747 30042 29664
28 Agora/Proposal/validator/unlocking/legal/voter unlocks stake after voting/42 proposals, voter, unlock stake, Locked 2465055872 2393040618 6938449 6756747 30042 29664
29 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple 21017788 55883 806
30 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs 33204186 88241 900
31 Agora/Treasury/Validator/Positive/Allows for effect changes 31556709 81546 1452
32 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct simple 21017788 55883 806
33 Agora/AuthorityToken/singleAuthorityTokenBurned/Correct many inputs 33204186 88241 900
34 Agora/Governor/policy/GST minting 51007235 55335573 144191 158459 2034 2162
35 Agora/Governor/validator/proposal creation 315830140 322870773 850201 877643 9247 9616
36 Agora/Governor/validator/GATs minting 421359049 440461675 1145136 1209344 9364 9735
37 Agora/Governor/validator/mutate governor state 88986020 97706076 248491 276959 8834 9217