From e50e5d6f364dd27e200289efffd12b03be33b05a Mon Sep 17 00:00:00 2001 From: fanghr Date: Sat, 30 Apr 2022 18:06:12 +0800 Subject: [PATCH] parameterize PST policy only with assetclass of GST ...to resolve the cyclic reference between SST and PST --- agora-test/Spec/Sample/Shared.hs | 2 +- agora/Agora/Governor/Scripts.hs | 18 +++++++++--------- agora/Agora/Proposal/Scripts.hs | 10 ++++++---- 3 files changed, 16 insertions(+), 14 deletions(-) diff --git a/agora-test/Spec/Sample/Shared.hs b/agora-test/Spec/Sample/Shared.hs index 24b2e05..6da1553 100644 --- a/agora-test/Spec/Sample/Shared.hs +++ b/agora-test/Spec/Sample/Shared.hs @@ -119,7 +119,7 @@ proposal = } proposalPolicySymbol :: CurrencySymbol -proposalPolicySymbol = mintingPolicySymbol $ mkMintingPolicy (proposalPolicy proposal) +proposalPolicySymbol = mintingPolicySymbol $ mkMintingPolicy (proposalPolicy proposal.governorSTAssetClass) -- | A sample 'PubKeyHash'. signer :: PubKeyHash diff --git a/agora/Agora/Governor/Scripts.hs b/agora/Agora/Governor/Scripts.hs index 083bec8..e0b687e 100644 --- a/agora/Agora/Governor/Scripts.hs +++ b/agora/Agora/Governor/Scripts.hs @@ -23,6 +23,7 @@ module Agora.Governor.Scripts ( stakeValidatorHashFromGovernor, proposalFromGovernor, proposalValidatorHashFromGovernor, + proposalSTSymbolFromGovernor, ) where -------------------------------------------------------------------------------- @@ -698,18 +699,17 @@ atSymbolFromGovernor gov = mintingPolicySymbol policy at = AuthorityToken $ governorSTAssetClassFromGovernor gov 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 gov = AssetClass (symbol, "") where - gstAC = governorSTAssetClassFromGovernor 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 + symbol = proposalSTSymbolFromGovernor gov stakeSTSymbolFromGovernor :: Governor -> CurrencySymbol stakeSTSymbolFromGovernor gov = mintingPolicySymbol policy diff --git a/agora/Agora/Proposal/Scripts.hs b/agora/Agora/Proposal/Scripts.hs index 2e7a52d..1ed6643 100644 --- a/agora/Agora/Proposal/Scripts.hs +++ b/agora/Agora/Proposal/Scripts.hs @@ -58,8 +58,11 @@ import Plutus.V1.Ledger.Value (AssetClass (AssetClass)) - This policy cannot be burned. -} -proposalPolicy :: Proposal -> ClosedTerm PMintingPolicy -proposalPolicy proposal = +proposalPolicy :: + -- | The assetclass of GST, see 'Agora.Governor.Scripts.governorPolicy'. + AssetClass -> + ClosedTerm PMintingPolicy +proposalPolicy (AssetClass (govCs, govTn)) = plam $ \_redeemer ctx' -> P.do PScriptContext ctx' <- pmatch ctx' ctx <- pletFields @'["txInfo", "purpose"] ctx' @@ -69,7 +72,6 @@ proposalPolicy proposal = let inputs = txInfo.inputs mintedValue = pfromData txInfo.mint - AssetClass (govCs, govTn) = proposal.governorSTAssetClass PMinting ownSymbol' <- pmatch $ pfromData ctx.purpose let mintedProposalST = @@ -145,7 +147,7 @@ proposalValidator proposal = ownAddress <- plet $ txOutF.address let stCurrencySymbol = - pconstant $ getMintingPolicySymbol (proposalPolicy proposal) + pconstant $ getMintingPolicySymbol (proposalPolicy proposal.governorSTAssetClass) valueSpent <- plet $ pvalueSpent # txInfoF.inputs spentST <- plet $ psymbolValueOf # stCurrencySymbol #$ valueSpent let AssetClass (stakeSym, stakeTn) = proposal.stakeSTAssetClass