parameterize PST policy only with assetclass of GST

...to resolve the cyclic reference between SST and PST
This commit is contained in:
fanghr 2022-04-30 18:06:12 +08:00
parent afa8c7c542
commit 62bd2dee28
3 changed files with 16 additions and 14 deletions

View file

@ -119,7 +119,7 @@ proposal =
} }
proposalPolicySymbol :: CurrencySymbol proposalPolicySymbol :: CurrencySymbol
proposalPolicySymbol = mintingPolicySymbol $ mkMintingPolicy (proposalPolicy proposal) proposalPolicySymbol = mintingPolicySymbol $ mkMintingPolicy (proposalPolicy proposal.governorSTAssetClass)
-- | A sample 'PubKeyHash'. -- | A sample 'PubKeyHash'.
signer :: PubKeyHash signer :: PubKeyHash

View file

@ -23,6 +23,7 @@ module Agora.Governor.Scripts (
stakeValidatorHashFromGovernor, stakeValidatorHashFromGovernor,
proposalFromGovernor, proposalFromGovernor,
proposalValidatorHashFromGovernor, proposalValidatorHashFromGovernor,
proposalSTSymbolFromGovernor,
) where ) where
-------------------------------------------------------------------------------- --------------------------------------------------------------------------------
@ -698,18 +699,17 @@ atSymbolFromGovernor gov = mintingPolicySymbol policy
at = AuthorityToken $ governorSTAssetClassFromGovernor gov at = AuthorityToken $ governorSTAssetClassFromGovernor gov
policy = mkMintingPolicy $ authorityTokenPolicy at policy = mkMintingPolicy $ authorityTokenPolicy at
proposalSTSymbolFromGovernor :: Governor -> CurrencySymbol
proposalSTSymbolFromGovernor gov = symbol
where
gstAC = governorSTAssetClassFromGovernor gov
policy = mkMintingPolicy $ proposalPolicy gstAC
symbol = mintingPolicySymbol policy
proposalSTAssetClassFromGovernor :: Governor -> AssetClass proposalSTAssetClassFromGovernor :: Governor -> AssetClass
proposalSTAssetClassFromGovernor gov = AssetClass (symbol, "") proposalSTAssetClassFromGovernor gov = AssetClass (symbol, "")
where where
gstAC = governorSTAssetClassFromGovernor gov symbol = proposalSTSymbolFromGovernor gov
-- JUSTIFICATION: the PST policy doesn't care about the following two fields at all.
-- FIXME: refactor PST policy, parameterize it only with GST assetclass or something.
sstAC = AssetClass ("", "")
mc = -1
params = Proposal gstAC sstAC mc
policy = mkMintingPolicy $ proposalPolicy params
symbol = mintingPolicySymbol policy
stakeSTSymbolFromGovernor :: Governor -> CurrencySymbol stakeSTSymbolFromGovernor :: Governor -> CurrencySymbol
stakeSTSymbolFromGovernor gov = mintingPolicySymbol policy stakeSTSymbolFromGovernor gov = mintingPolicySymbol policy

View file

@ -58,8 +58,11 @@ import Plutus.V1.Ledger.Value (AssetClass (AssetClass))
- This policy cannot be burned. - This policy cannot be burned.
-} -}
proposalPolicy :: Proposal -> ClosedTerm PMintingPolicy proposalPolicy ::
proposalPolicy proposal = -- | The assetclass of GST, see 'Agora.Governor.Scripts.governorPolicy'.
AssetClass ->
ClosedTerm PMintingPolicy
proposalPolicy (AssetClass (govCs, govTn)) =
plam $ \_redeemer ctx' -> P.do plam $ \_redeemer ctx' -> P.do
PScriptContext ctx' <- pmatch ctx' PScriptContext ctx' <- pmatch ctx'
ctx <- pletFields @'["txInfo", "purpose"] ctx' ctx <- pletFields @'["txInfo", "purpose"] ctx'
@ -69,7 +72,6 @@ proposalPolicy proposal =
let inputs = txInfo.inputs let inputs = txInfo.inputs
mintedValue = pfromData txInfo.mint mintedValue = pfromData txInfo.mint
AssetClass (govCs, govTn) = proposal.governorSTAssetClass
PMinting ownSymbol' <- pmatch $ pfromData ctx.purpose PMinting ownSymbol' <- pmatch $ pfromData ctx.purpose
let mintedProposalST = let mintedProposalST =
@ -145,7 +147,7 @@ proposalValidator proposal =
ownAddress <- plet $ txOutF.address ownAddress <- plet $ txOutF.address
let stCurrencySymbol = let stCurrencySymbol =
pconstant $ getMintingPolicySymbol (proposalPolicy proposal) pconstant $ getMintingPolicySymbol (proposalPolicy proposal.governorSTAssetClass)
valueSpent <- plet $ pvalueSpent # txInfoF.inputs valueSpent <- plet $ pvalueSpent # txInfoF.inputs
spentST <- plet $ psymbolValueOf # stCurrencySymbol #$ valueSpent spentST <- plet $ psymbolValueOf # stCurrencySymbol #$ valueSpent
let AssetClass (stakeSym, stakeTn) = proposal.stakeSTAssetClass let AssetClass (stakeSym, stakeTn) = proposal.stakeSTAssetClass