use lpe's AssetClass; fix errors

This commit is contained in:
Hongrui Fang 2022-10-19 22:46:57 +08:00
parent 6ae1dcdb40
commit cac856f4eb
24 changed files with 195 additions and 196 deletions

View file

@ -63,6 +63,7 @@ import Agora.Proposal.Time (
votingTime
),
)
import Agora.SafeMoney (AuthorityTokenTag, GTTag)
import Agora.Stake (
StakeDatum (..),
)
@ -73,7 +74,7 @@ import Data.Default (def)
import Data.List (singleton, sort)
import Data.Map.Strict qualified as StrictMap
import Data.Maybe (fromJust)
import Data.Tagged (untag)
import Data.Tagged (Tagged (Tagged), untag)
import Plutarch.Context (
input,
mint,
@ -87,9 +88,8 @@ import Plutarch.Context (
withRef,
withValue,
)
import Plutarch.Extra.AssetClass (AssetClass (AssetClass), assetClassValue)
import Plutarch.Lift (PLifted, PUnsafeLiftDecl)
import PlutusLedgerApi.V1.Value (AssetClass (..))
import PlutusLedgerApi.V1.Value qualified as Value
import PlutusLedgerApi.V2 (
Credential (PubKeyCredential),
DatumHash,
@ -113,7 +113,7 @@ import Sample.Shared (
governorValidator,
governorValidatorHash,
minAda,
proposalPolicySymbol,
proposalAssetClass,
proposalValidator,
proposalValidatorHash,
signer,
@ -217,7 +217,7 @@ data ProposalParameters = ProposalParameters
-- | Everything about the generated stake stuff.
data StakeParameters = StakeParameters
{ numStake :: NumStake
, perStakeGTs :: Integer
, perStakeGTs :: Tagged GTTag Integer
, transactionSignedByOwners :: Bool
}
@ -319,7 +319,7 @@ proposalRef = TxOutRef proposalTxRef 1
-}
mkProposalBuilder :: forall b. CombinableBuilder b => ProposalParameters -> b
mkProposalBuilder ps =
let pst = Value.singleton proposalPolicySymbol "" 1
let pst = assetClassValue proposalAssetClass 1
value = sortValue $ minAda <> pst
in mconcat
[ input $
@ -356,7 +356,7 @@ mkStakeInputDatums :: StakeParameters -> [StakeDatum]
mkStakeInputDatums ps =
let template =
StakeDatum
{ stakedAmount = fromInteger ps.perStakeGTs
{ stakedAmount = ps.perStakeGTs
, owner = PubKeyCredential ""
, delegatedTo = Nothing
, lockedBy = []
@ -376,9 +376,9 @@ mkStakeBuilder ps =
let perStakeValue =
sortValue $
minAda
<> Value.assetClassValue stakeAssetClass 1
<> Value.assetClassValue
(untag governor.gtClassRef)
<> assetClassValue stakeAssetClass 1
<> assetClassValue
governor.gtClassRef
ps.perStakeGTs
perStake idx i =
let withSig =
@ -432,7 +432,7 @@ governorRef = TxOutRef governorTxRef 2
-}
mkGovernorBuilder :: forall b. CombinableBuilder b => GovernorParameters -> b
mkGovernorBuilder ps =
let gst = Value.assetClassValue governorAssetClass 1
let gst = assetClassValue governorAssetClass 1
value = sortValue $ gst <> minAda
in mconcat
[ input $
@ -476,8 +476,8 @@ mkAuthorityTokenBuilder ps@AuthorityTokenParameters {carryDatum} =
(True, Nothing) -> "deadbeef"
(False, Just as) -> scriptHashToTokenName as
(False, Nothing) -> ""
ac = AssetClass (authorityTokenSymbol, tn)
minted = Value.assetClassValue ac 1
ac = Tagged @AuthorityTokenTag $ AssetClass authorityTokenSymbol tn
minted = assetClassValue ac 1
value = sortValue $ minAda <> minted
in mconcat
[ mint minted
@ -678,10 +678,11 @@ getNextState = \case
Finished -> error "Cannot advance 'Finished' proposal"
-- | Calculate the number of GTs per stake in order to exceed the minimum limit.
compPerStakeGTsForDraft :: NumStake -> Integer
compPerStakeGTsForDraft :: NumStake -> Tagged GTTag Integer
compPerStakeGTsForDraft nCosigners =
untag (def :: ProposalThresholds).toVoting
`div` fromIntegral nCosigners + 1
Tagged $
untag (def :: ProposalThresholds).toVoting
`div` fromIntegral nCosigners + 1
dummyDatum :: ()
dummyDatum = ()
@ -945,8 +946,9 @@ mkInsufficientCosignsBundle nCosigners nEffects =
}
where
insuffcientPerStakeGTs =
untag (def :: ProposalThresholds).toVoting
`div` fromIntegral nCosigners - 1
Tagged $
untag (def :: ProposalThresholds).toVoting
`div` fromIntegral nCosigners - 1
template = mkValidToNextStateBundle nCosigners nEffects False Draft
-- * From VotingReady

View file

@ -48,7 +48,7 @@ import Data.Coerce (coerce)
import Data.Default (def)
import Data.List (sort)
import Data.Map.Strict qualified as StrictMap
import Data.Tagged (untag)
import Data.Tagged (Tagged)
import Plutarch.Context (
input,
normalizeValue,
@ -63,8 +63,7 @@ import Plutarch.Context (
withRef,
withValue,
)
import Plutarch.SafeMoney (Discrete (Discrete))
import PlutusLedgerApi.V1.Value qualified as Value
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V2 (
Credential (PubKeyCredential),
POSIXTime (POSIXTime),
@ -73,10 +72,9 @@ import PlutusLedgerApi.V2 (
)
import Sample.Proposal.Shared (proposalTxRef, stakeTxRef)
import Sample.Shared (
fromDiscrete,
governor,
minAda,
proposalPolicySymbol,
proposalAssetClass,
proposalValidator,
proposalValidatorHash,
stakeAssetClass,
@ -130,8 +128,8 @@ data Validity = Validity
--------------------------------------------------------------------------------
mkStakeAmount :: StakedAmount -> Discrete GTTag
mkStakeAmount Sufficient = Discrete $ (def @ProposalThresholds).cosign
mkStakeAmount :: StakedAmount -> Tagged GTTag Integer
mkStakeAmount Sufficient = (def @ProposalThresholds).cosign
mkStakeAmount Insufficient = mkStakeAmount Sufficient - 1
mkStakeOwner :: StakeOwner -> PubKeyHash
@ -229,8 +227,8 @@ stakeRef = TxOutRef stakeTxRef 0
cosign :: forall b. CombinableBuilder b => ParameterBundle -> b
cosign ps = builder
where
pst = Value.singleton proposalPolicySymbol "" 1
sst = Value.assetClassValue stakeAssetClass 1
pst = assetClassValue proposalAssetClass 1
sst = assetClassValue stakeAssetClass 1
----------------------------------------------------------------------------
@ -240,11 +238,9 @@ cosign ps = builder
stakeValue =
normalizeValue $
minAda
<> Value.assetClassValue
(untag governor.gtClassRef)
( fromDiscrete $
mkStakeAmount ps.stakeParameters.gtAmount
)
<> assetClassValue
governor.gtClassRef
(mkStakeAmount ps.stakeParameters.gtAmount)
<> sst
stakeBuilder =

View file

@ -47,10 +47,11 @@ import Agora.Stake (
import Data.Coerce (coerce)
import Data.Default (Default (def))
import Data.Map.Strict qualified as StrictMap
import Data.Tagged (untag)
import Data.Tagged (Tagged)
import Plutarch.Context (
input,
mint,
normalizeValue,
output,
script,
signedWith,
@ -60,8 +61,7 @@ import Plutarch.Context (
withRef,
withValue,
)
import Plutarch.SafeMoney (Discrete)
import PlutusLedgerApi.V1.Value qualified as Value
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V2 (
Credential (PubKeyCredential),
POSIXTime (POSIXTime),
@ -71,12 +71,12 @@ import PlutusLedgerApi.V2 (
)
import Sample.Proposal.Shared (stakeTxRef)
import Sample.Shared (
fromDiscrete,
governor,
governorAssetClass,
governorValidator,
governorValidatorHash,
minAda,
proposalAssetClass,
proposalPolicy,
proposalPolicySymbol,
proposalStartingTimeFromTimeRange,
@ -127,7 +127,7 @@ thisProposalId :: ProposalId
thisProposalId = ProposalId 25
-- | The arbitrary staked amount. Doesn;t really matter in this case.
stakedGTs :: Discrete GTTag
stakedGTs :: Tagged GTTag Integer
stakedGTs = 5
-- | The owner of the stake.
@ -282,9 +282,9 @@ governorRef = TxOutRef "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be
createProposal :: forall b. CombinableBuilder b => Parameters -> b
createProposal ps = builder
where
pst = Value.singleton proposalPolicySymbol "" 1
sst = Value.assetClassValue stakeAssetClass 1
gst = Value.assetClassValue governorAssetClass 1
pst = assetClassValue proposalAssetClass 1
sst = assetClassValue stakeAssetClass 1
gst = assetClassValue governorAssetClass 1
---
@ -292,7 +292,7 @@ createProposal ps = builder
stakeValue =
sortValue $
sst
<> Value.assetClassValue (untag governor.gtClassRef) (fromDiscrete stakedGTs)
<> assetClassValue governor.gtClassRef stakedGTs
<> minAda
proposalValue = sortValue $ pst <> minAda
@ -314,11 +314,8 @@ createProposal ps = builder
withSig
, ---
mint $
sortValue $
normalizeValue
pst
<>
-- 0 Ada entry, see #174
Value.singleton "" "" 0
, ---
timeRange $ mkTimeRange ps
, input $

View file

@ -41,6 +41,7 @@ import Agora.Proposal (
ResultTag (..),
)
import Agora.Proposal.Time (ProposalStartingTime (ProposalStartingTime), ProposalTimingConfig (..))
import Agora.SafeMoney (GTTag)
import Agora.Stake (
ProposalLock (..),
StakeDatum (..),
@ -48,7 +49,7 @@ import Agora.Stake (
)
import Data.Default.Class (Default (def))
import Data.Map.Strict qualified as StrictMap
import Data.Tagged (Tagged (Tagged), untag)
import Data.Tagged (Tagged, untag)
import Plutarch.Context (
input,
normalizeValue,
@ -62,8 +63,7 @@ import Plutarch.Context (
withRef,
withValue,
)
import Plutarch.SafeMoney (Discrete (Discrete))
import PlutusLedgerApi.V1.Value qualified as Value
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V2 (
Credential (PubKeyCredential),
PubKeyHash,
@ -73,7 +73,7 @@ import Sample.Proposal.Shared (stakeTxRef)
import Sample.Shared (
governor,
minAda,
proposalPolicySymbol,
proposalAssetClass,
proposalValidator,
proposalValidatorHash,
stakeAssetClass,
@ -106,10 +106,10 @@ defVoteFor :: ResultTag
defVoteFor = ResultTag 0
-- | The default number of GTs the stake will have.
defStakedGTs :: Integer
defStakedGTs :: Tagged GTTag Integer
defStakedGTs = 100000
alteredStakedGTs :: Integer
alteredStakedGTs :: Tagged GTTag Integer
alteredStakedGTs = 100
-- | Default owner of the stakes.
@ -186,7 +186,7 @@ stakeRedeemer = RetractVotes
mkStakeInputDatum :: StakeParameters -> StakeDatum
mkStakeInputDatum ps =
StakeDatum
{ stakedAmount = Discrete $ Tagged defStakedGTs
{ stakedAmount = defStakedGTs
, owner = PubKeyCredential defOwner
, delegatedTo = Just $ PubKeyCredential defDelegatee
, lockedBy = stakeLocks
@ -231,7 +231,7 @@ mkProposalInputDatum sps pps =
updatVotes (ProposalVotes vt) =
ProposalVotes $
StrictMap.adjust
(+ sps.numStakes * defStakedGTs)
(+ sps.numStakes * untag defStakedGTs)
defVoteFor
vt
@ -240,7 +240,7 @@ mkProposalInputDatum sps pps =
unlock :: forall b. CombinableBuilder b => ParameterBundle -> b
unlock ps = builder
where
pst = Value.singleton proposalPolicySymbol "" 1
pst = assetClassValue proposalAssetClass 1
proposalInputDatum =
mkProposalInputDatum
@ -275,7 +275,7 @@ unlock ps = builder
---
sst = Value.assetClassValue stakeAssetClass 1
sst = assetClassValue stakeAssetClass 1
stakeInputDatum = mkStakeInputDatum ps.stakeParameters
@ -302,8 +302,8 @@ unlock ps = builder
mconcat
[ minAda
, sst
, Value.assetClassValue
(untag governor.gtClassRef)
, assetClassValue
governor.gtClassRef
gt
]

View file

@ -42,6 +42,7 @@ import Agora.Proposal.Time (
ProposalStartingTime (ProposalStartingTime),
ProposalTimingConfig (draftTime, votingTime),
)
import Agora.SafeMoney (GTTag)
import Agora.Stake (
ProposalLock (Voted),
StakeDatum (..),
@ -50,7 +51,7 @@ import Agora.Stake (
import Data.Default (Default (def))
import Data.Map.Strict qualified as StrictMap
import Data.Maybe (catMaybes)
import Data.Tagged (untag)
import Data.Tagged (Tagged, untag)
import Plutarch.Context (
input,
mint,
@ -64,14 +65,14 @@ import Plutarch.Context (
withRef,
withValue,
)
import PlutusLedgerApi.V1.Value qualified as Value
import Plutarch.Extra.AssetClass (adaClass, assetClassValue)
import PlutusLedgerApi.V2 (Credential (PubKeyCredential), PubKeyHash)
import PlutusLedgerApi.V2.Contexts (TxOutRef (TxOutRef))
import Sample.Proposal.Shared (proposalTxRef)
import Sample.Shared (
governor,
minAda,
proposalPolicySymbol,
proposalAssetClass,
proposalValidator,
proposalValidatorHash,
stakeAssetClass,
@ -102,7 +103,7 @@ data StakeParameters = StakeParameters
}
newtype StakeInputParameters = StakeInputParameters
{ perStakeGTs :: Integer
{ perStakeGTs :: Tagged GTTag Integer
}
data StakeOutputParameters = StakeOutputParameters
@ -189,7 +190,7 @@ mkStakeRedeemer params =
mkStakeInputDatum :: StakeInputParameters -> StakeDatum
mkStakeInputDatum params =
StakeDatum
{ stakedAmount = fromInteger params.perStakeGTs
{ stakedAmount = params.perStakeGTs
, owner = PubKeyCredential stakeOwner
, delegatedTo = Just (PubKeyCredential delegatee)
, lockedBy =
@ -205,8 +206,8 @@ mkStakeRef o i = TxOutRef proposalTxRef $ o + i
vote :: forall b. CombinableBuilder b => ParameterBundle -> b
vote params =
let pst = Value.singleton proposalPolicySymbol "" 1
sst = Value.assetClassValue stakeAssetClass 1
let pst = assetClassValue proposalAssetClass 1
sst = assetClassValue stakeAssetClass 1
---
@ -217,8 +218,8 @@ vote params =
stakeInputValue =
normalizeValue $
sst
<> Value.assetClassValue
(untag governor.gtClassRef)
<> assetClassValue
governor.gtClassRef
params.stakeParameters.stakeInputParameters.perStakeGTs
<> minAda
@ -246,11 +247,11 @@ vote params =
10_000_000
in normalizeValue $
sst
<> Value.assetClassValue
(untag governor.gtClassRef)
<> assetClassValue
governor.gtClassRef
gtAmount
<> minAda
<> Value.singleton "" "" adaAmount
<> assetClassValue adaClass adaAmount
stakeRedeemer =
mkStakeRedeemer params.stakeParameters.stakeOutputParameters
@ -269,7 +270,7 @@ vote params =
, withRef $ mkStakeRef numProposals' i
]
, if params.stakeParameters.stakeOutputParameters.burnStakes
then mint $ Value.assetClassValue stakeAssetClass (-1)
then mint $ assetClassValue stakeAssetClass (-1)
else
output $
mconcat
@ -292,7 +293,7 @@ vote params =
else id
)
. ( +
params.stakeParameters.stakeInputParameters.perStakeGTs
untag params.stakeParameters.stakeInputParameters.perStakeGTs
* params.stakeParameters.numStakes
)
)