module Cooked.Skeleton.Proposal
( TxParameterChange (..),
TxGovAction (..),
TxSkelProposal (..),
txSkelProposalAddressL,
txSkelProposalActionL,
txSkelProposalWitnessL,
txSkelProposalAnchorL,
simpleTxSkelProposal,
withWitness,
withAnchor,
)
where
import Cooked.Skeleton.Redeemer as X
import Data.Map (Map)
import Optics.Core ((&), (?~))
import Optics.TH
import Plutus.Script.Utils.Address qualified as Script
import Plutus.Script.Utils.Scripts qualified as Script
import PlutusLedgerApi.V3 qualified as Api
import PlutusTx.Prelude qualified as PlutusTx
data TxParameterChange where
FeePerByte :: Integer -> TxParameterChange
FeeFixed :: Integer -> TxParameterChange
MaxBlockBodySize :: Integer -> TxParameterChange
MaxTxSize :: Integer -> TxParameterChange
:: Integer -> TxParameterChange
KeyDeposit :: Integer -> TxParameterChange
PoolDeposit :: Integer -> TxParameterChange
PoolRetirementMaxEpoch :: Integer -> TxParameterChange
PoolNumber :: Integer -> TxParameterChange
PoolInfluence :: Rational -> TxParameterChange
MonetaryExpansion :: Rational -> TxParameterChange
TreasuryCut :: Rational -> TxParameterChange
MinPoolCost :: Integer -> TxParameterChange
CoinsPerUTxOByte :: Integer -> TxParameterChange
CostModels ::
{ TxParameterChange -> [Integer]
cmPlutusV1Costs :: [Integer],
TxParameterChange -> [Integer]
cmPlutusV2Costs :: [Integer],
TxParameterChange -> [Integer]
cmPlutusV3Costs :: [Integer]
} ->
TxParameterChange
Prices ::
{ TxParameterChange -> Rational
pMemoryCost :: Rational,
TxParameterChange -> Rational
pStepCost :: Rational
} ->
TxParameterChange
MaxTxExUnits ::
{ TxParameterChange -> Integer
mteuMemory :: Integer,
TxParameterChange -> Integer
mteuSteps :: Integer
} ->
TxParameterChange
MaxBlockExUnits ::
{ TxParameterChange -> Integer
mbeuMemory :: Integer,
TxParameterChange -> Integer
mbeuSteps :: Integer
} ->
TxParameterChange
MaxValSize :: Integer -> TxParameterChange
CollateralPercentage :: Integer -> TxParameterChange
MaxCollateralInputs :: Integer -> TxParameterChange
PoolVotingThresholds ::
{ TxParameterChange -> Rational
pvtMotionNoConfidence :: Rational,
TxParameterChange -> Rational
pvtCommitteeNormal :: Rational,
TxParameterChange -> Rational
pvtCommitteeNoConfidence :: Rational,
TxParameterChange -> Rational
pvtHardFork :: Rational,
TxParameterChange -> Rational
pvtSecurityGroup :: Rational
} ->
TxParameterChange
DRepVotingThresholds ::
{ TxParameterChange -> Rational
drvtMotionNoConfidence :: Rational,
TxParameterChange -> Rational
drvtCommitteeNormal :: Rational,
TxParameterChange -> Rational
drvtCommitteeNoConfidence :: Rational,
TxParameterChange -> Rational
drvtUpdateConstitution :: Rational,
TxParameterChange -> Rational
drvtHardForkInitialization :: Rational,
TxParameterChange -> Rational
drvtNetworkGroup :: Rational,
TxParameterChange -> Rational
drvtEconomicGroup :: Rational,
TxParameterChange -> Rational
drvtTechnicalGroup :: Rational,
TxParameterChange -> Rational
drvtGovernanceGroup :: Rational,
TxParameterChange -> Rational
drvtTreasuryWithdrawal :: Rational
} ->
TxParameterChange
CommitteeMinSize :: Integer -> TxParameterChange
CommitteeMaxTermLength :: Integer -> TxParameterChange
GovActionLifetime :: Integer -> TxParameterChange
GovActionDeposit :: Integer -> TxParameterChange
DRepRegistrationDeposit :: Integer -> TxParameterChange
DRepActivity :: Integer -> TxParameterChange
deriving (Int -> TxParameterChange -> ShowS
[TxParameterChange] -> ShowS
TxParameterChange -> String
(Int -> TxParameterChange -> ShowS)
-> (TxParameterChange -> String)
-> ([TxParameterChange] -> ShowS)
-> Show TxParameterChange
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TxParameterChange -> ShowS
showsPrec :: Int -> TxParameterChange -> ShowS
$cshow :: TxParameterChange -> String
show :: TxParameterChange -> String
$cshowList :: [TxParameterChange] -> ShowS
showList :: [TxParameterChange] -> ShowS
Show, TxParameterChange -> TxParameterChange -> Bool
(TxParameterChange -> TxParameterChange -> Bool)
-> (TxParameterChange -> TxParameterChange -> Bool)
-> Eq TxParameterChange
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TxParameterChange -> TxParameterChange -> Bool
== :: TxParameterChange -> TxParameterChange -> Bool
$c/= :: TxParameterChange -> TxParameterChange -> Bool
/= :: TxParameterChange -> TxParameterChange -> Bool
Eq)
data TxGovAction where
TxGovActionParameterChange :: [TxParameterChange] -> TxGovAction
TxGovActionHardForkInitiation :: Api.ProtocolVersion -> TxGovAction
TxGovActionTreasuryWithdrawals :: Map Api.Credential Api.Lovelace -> TxGovAction
TxGovActionNoConfidence :: TxGovAction
TxGovActionUpdateCommittee :: [Api.ColdCommitteeCredential] -> Map Api.ColdCommitteeCredential Integer -> PlutusTx.Rational -> TxGovAction
TxGovActionNewConstitution :: Api.Constitution -> TxGovAction
deriving (Int -> TxGovAction -> ShowS
[TxGovAction] -> ShowS
TxGovAction -> String
(Int -> TxGovAction -> ShowS)
-> (TxGovAction -> String)
-> ([TxGovAction] -> ShowS)
-> Show TxGovAction
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TxGovAction -> ShowS
showsPrec :: Int -> TxGovAction -> ShowS
$cshow :: TxGovAction -> String
show :: TxGovAction -> String
$cshowList :: [TxGovAction] -> ShowS
showList :: [TxGovAction] -> ShowS
Show, TxGovAction -> TxGovAction -> Bool
(TxGovAction -> TxGovAction -> Bool)
-> (TxGovAction -> TxGovAction -> Bool) -> Eq TxGovAction
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TxGovAction -> TxGovAction -> Bool
== :: TxGovAction -> TxGovAction -> Bool
$c/= :: TxGovAction -> TxGovAction -> Bool
/= :: TxGovAction -> TxGovAction -> Bool
Eq)
data TxSkelProposal where
TxSkelProposal ::
{
TxSkelProposal -> Address
txSkelProposalAddress :: Api.Address,
TxSkelProposal -> TxGovAction
txSkelProposalAction :: TxGovAction,
TxSkelProposal -> Maybe (Versioned Script, TxSkelRedeemer)
txSkelProposalWitness :: Maybe (Script.Versioned Script.Script, TxSkelRedeemer),
TxSkelProposal -> Maybe String
txSkelProposalAnchor :: Maybe String
} ->
TxSkelProposal
deriving (Int -> TxSkelProposal -> ShowS
[TxSkelProposal] -> ShowS
TxSkelProposal -> String
(Int -> TxSkelProposal -> ShowS)
-> (TxSkelProposal -> String)
-> ([TxSkelProposal] -> ShowS)
-> Show TxSkelProposal
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> TxSkelProposal -> ShowS
showsPrec :: Int -> TxSkelProposal -> ShowS
$cshow :: TxSkelProposal -> String
show :: TxSkelProposal -> String
$cshowList :: [TxSkelProposal] -> ShowS
showList :: [TxSkelProposal] -> ShowS
Show, TxSkelProposal -> TxSkelProposal -> Bool
(TxSkelProposal -> TxSkelProposal -> Bool)
-> (TxSkelProposal -> TxSkelProposal -> Bool) -> Eq TxSkelProposal
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: TxSkelProposal -> TxSkelProposal -> Bool
== :: TxSkelProposal -> TxSkelProposal -> Bool
$c/= :: TxSkelProposal -> TxSkelProposal -> Bool
/= :: TxSkelProposal -> TxSkelProposal -> Bool
Eq)
makeLensesFor [("txSkelProposalAddress", "txSkelProposalAddressL")] ''TxSkelProposal
makeLensesFor [("txSkelProposalAction", "txSkelProposalActionL")] ''TxSkelProposal
makeLensesFor [("txSkelProposalWitness", "txSkelProposalWitnessL")] ''TxSkelProposal
makeLensesFor [("txSkelProposalAnchor", "txSkelProposalAnchorL")] ''TxSkelProposal
simpleTxSkelProposal :: (Script.ToAddress a) => a -> TxGovAction -> TxSkelProposal
simpleTxSkelProposal :: forall a. ToAddress a => a -> TxGovAction -> TxSkelProposal
simpleTxSkelProposal a
a TxGovAction
govAction = Address
-> TxGovAction
-> Maybe (Versioned Script, TxSkelRedeemer)
-> Maybe String
-> TxSkelProposal
TxSkelProposal (a -> Address
forall a. ToAddress a => a -> Address
Script.toAddress a
a) TxGovAction
govAction Maybe (Versioned Script, TxSkelRedeemer)
forall a. Maybe a
Nothing Maybe String
forall a. Maybe a
Nothing
withWitness :: (Script.ToVersioned Script.Script a) => TxSkelProposal -> (a, TxSkelRedeemer) -> TxSkelProposal
withWitness :: forall a.
ToVersioned Script a =>
TxSkelProposal -> (a, TxSkelRedeemer) -> TxSkelProposal
withWitness TxSkelProposal
prop (a
s, TxSkelRedeemer
red) = TxSkelProposal
prop TxSkelProposal
-> (TxSkelProposal -> TxSkelProposal) -> TxSkelProposal
forall a b. a -> (a -> b) -> b
& Lens' TxSkelProposal (Maybe (Versioned Script, TxSkelRedeemer))
txSkelProposalWitnessL Lens' TxSkelProposal (Maybe (Versioned Script, TxSkelRedeemer))
-> (Versioned Script, TxSkelRedeemer)
-> TxSkelProposal
-> TxSkelProposal
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a (Maybe b) -> b -> s -> t
?~ (a -> Versioned Script
forall s a. ToVersioned s a => a -> Versioned s
Script.toVersioned a
s, TxSkelRedeemer
red)
withAnchor :: TxSkelProposal -> String -> TxSkelProposal
withAnchor :: TxSkelProposal -> String -> TxSkelProposal
withAnchor TxSkelProposal
prop String
url = TxSkelProposal
prop TxSkelProposal
-> (TxSkelProposal -> TxSkelProposal) -> TxSkelProposal
forall a b. a -> (a -> b) -> b
& Lens' TxSkelProposal (Maybe String)
txSkelProposalAnchorL Lens' TxSkelProposal (Maybe String)
-> String -> TxSkelProposal -> TxSkelProposal
forall k (is :: IxList) s t a b.
Is k A_Setter =>
Optic k is s t a (Maybe b) -> b -> s -> t
?~ String
url