use lpe's AssetClass; fix errors
This commit is contained in:
parent
6ae1dcdb40
commit
cac856f4eb
24 changed files with 195 additions and 196 deletions
|
|
@ -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
|
||||
|
|
|
|||
|
|
@ -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 =
|
||||
|
|
|
|||
|
|
@ -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 $
|
||||
|
|
|
|||
|
|
@ -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
|
||||
]
|
||||
|
||||
|
|
|
|||
|
|
@ -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
|
||||
)
|
||||
)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue