parameterize PST policy only with assetclass of GST
...to resolve the cyclic reference between SST and PST
This commit is contained in:
parent
327b2ed244
commit
e50e5d6f36
3 changed files with 16 additions and 14 deletions
|
|
@ -119,7 +119,7 @@ proposal =
|
|||
}
|
||||
|
||||
proposalPolicySymbol :: CurrencySymbol
|
||||
proposalPolicySymbol = mintingPolicySymbol $ mkMintingPolicy (proposalPolicy proposal)
|
||||
proposalPolicySymbol = mintingPolicySymbol $ mkMintingPolicy (proposalPolicy proposal.governorSTAssetClass)
|
||||
|
||||
-- | A sample 'PubKeyHash'.
|
||||
signer :: PubKeyHash
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue