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

@ -16,16 +16,16 @@ import Agora.Effect.GovernorMutation (
)
import Agora.Governor (GovernorDatum (..), GovernorRedeemer (MutateGovernor))
import Agora.Proposal (ProposalId (..), ProposalThresholds (..))
import Agora.SafeMoney (AuthorityTokenTag)
import Agora.Utils (validatorHashToTokenName)
import Data.Default.Class (Default (def))
import Data.Map
import Data.Map ((!))
import Data.Tagged (Tagged (..))
import Plutarch.Api.V2 (validatorHash)
import Plutarch.Extra.AssetClass (AssetClass (AssetClass), assetClassValue)
import PlutusLedgerApi.V1 qualified as Interval (always)
import PlutusLedgerApi.V1.Address (scriptHashAddress)
import PlutusLedgerApi.V1.Value (AssetClass, assetClass)
import PlutusLedgerApi.V1.Value qualified as Value (
assetClassValue,
singleton,
)
import PlutusLedgerApi.V2 (
@ -66,8 +66,8 @@ effectValidatorAddress :: Address
effectValidatorAddress = scriptHashAddress effectValidatorHash
-- | The assetclass of the authority token.
atAssetClass :: AssetClass
atAssetClass = assetClass authorityTokenSymbol tokenName
atAssetClass :: Tagged AuthorityTokenTag AssetClass
atAssetClass = Tagged $ AssetClass authorityTokenSymbol tokenName
where
tokenName = validatorHashToTokenName effectValidatorHash
@ -99,11 +99,11 @@ mkEffectDatum newGovDatum =
-}
mkEffectTxInfo :: GovernorDatum -> TxInfo
mkEffectTxInfo newGovDatum =
let gst = Value.assetClassValue governorAssetClass 1
at = Value.assetClassValue atAssetClass 1
let gst = assetClassValue governorAssetClass 1
at = assetClassValue atAssetClass 1
-- One authority token is burnt in the process.
burnt = Value.assetClassValue atAssetClass (-1)
burnt = assetClassValue atAssetClass (-1)
--

View file

@ -32,6 +32,7 @@ import Plutarch.Context (
withRef,
withValue,
)
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V1.Value qualified as Value
import PlutusLedgerApi.V2 (
CurrencySymbol (CurrencySymbol),
@ -145,7 +146,7 @@ governorRedeemer = MutateGovernor
mkGovernorBuilder :: forall b. CombinableBuilder b => GovernorParameters -> b
mkGovernorBuilder ps =
let gst = Value.assetClassValue governorAssetClass 1
let gst = assetClassValue governorAssetClass 1
value = sortValue $ gst <> minAda
gstOutput =
if ps.stealGST

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
)
)

View file

@ -14,7 +14,6 @@ module Sample.Shared (
minAda,
deterministicTracingConfing,
mkRedeemer,
fromDiscrete,
-- * Agora Scripts
agoraScripts,
@ -46,6 +45,7 @@ module Sample.Shared (
proposalValidatorHash,
proposalValidatorAddress,
proposalStartingTimeFromTimeRange,
proposalAssetClass,
-- ** Authority
authorityTokenPolicy,
@ -71,10 +71,10 @@ import Agora.Proposal.Time (
ProposalStartingTime (ProposalStartingTime),
ProposalTimingConfig (..),
)
import Agora.SafeMoney (GovernorSTTag, ProposalSTTag, StakeSTTag)
import Agora.Utils (
validatorHashToTokenName,
)
import Data.Coerce (coerce)
import Data.Default.Class (Default (..))
import Data.Map (Map, (!))
import Data.Tagged (Tagged (..))
@ -85,11 +85,10 @@ import Plutarch.Api.V2 (
mintingPolicySymbol,
validatorHash,
)
import Plutarch.SafeMoney (Discrete (Discrete))
import Plutarch.Extra.AssetClass (AssetClass (AssetClass))
import PlutusLedgerApi.V1.Address (scriptHashAddress)
import PlutusLedgerApi.V1.Value (AssetClass (AssetClass), TokenName, Value)
import PlutusLedgerApi.V1.Value (TokenName, Value)
import PlutusLedgerApi.V1.Value qualified as Value (
assetClass,
singleton,
)
import PlutusLedgerApi.V2 (
@ -133,7 +132,7 @@ governor = Governor oref gt mc
oref = gstUTXORef
gt =
Tagged $
Value.assetClass
AssetClass
"da8c30857834c6ae7203935b89278c532b3995245295456f993e1d24"
"LQ"
mc = 20
@ -155,8 +154,8 @@ stakePolicy = MintingPolicy $ agoraScripts ! "agora:stakePolicy"
stakeSymbol :: CurrencySymbol
stakeSymbol = mintingPolicySymbol stakePolicy
stakeAssetClass :: AssetClass
stakeAssetClass = AssetClass (stakeSymbol, validatorHashToTokenName stakeValidatorHash)
stakeAssetClass :: Tagged StakeSTTag AssetClass
stakeAssetClass = Tagged $ AssetClass stakeSymbol (validatorHashToTokenName stakeValidatorHash)
stakeValidator :: Validator
stakeValidator = Validator $ agoraScripts ! "agora:stakeValidator"
@ -179,8 +178,8 @@ governorValidator = Validator $ agoraScripts ! "agora:governorValidator"
governorSymbol :: CurrencySymbol
governorSymbol = mintingPolicySymbol governorPolicy
governorAssetClass :: AssetClass
governorAssetClass = AssetClass (governorSymbol, "")
governorAssetClass :: Tagged GovernorSTTag AssetClass
governorAssetClass = Tagged $ AssetClass governorSymbol ""
governorValidatorHash :: ValidatorHash
governorValidatorHash = validatorHash governorValidator
@ -194,6 +193,9 @@ proposalPolicy = MintingPolicy $ agoraScripts ! "agora:proposalPolicy"
proposalPolicySymbol :: CurrencySymbol
proposalPolicySymbol = mintingPolicySymbol proposalPolicy
proposalAssetClass :: Tagged ProposalSTTag AssetClass
proposalAssetClass = Tagged $ AssetClass proposalPolicySymbol ""
-- | A sample 'PubKeyHash'.
signer :: PubKeyHash
signer = "8a30896c4fd5e79843e4ca1bd2cdbaa36f8c0bc3be7401214142019c"
@ -260,9 +262,6 @@ proposalStartingTimeFromTimeRange _ = error "Given time range should be finite a
mkRedeemer :: forall redeemer. PlutusTx.ToData redeemer => redeemer -> Redeemer
mkRedeemer = Redeemer . toBuiltinData
fromDiscrete :: forall tag. Discrete tag -> Integer
fromDiscrete = coerce
------------------------------------------------------------------
treasuryOut :: TxOut

View file

@ -23,7 +23,7 @@ import Agora.SafeMoney (GTTag)
import Agora.Stake (
StakeDatum (StakeDatum, stakedAmount),
)
import Data.Tagged (untag)
import Data.Tagged (Tagged)
import Plutarch.Context (
MintingBuilder,
SpendingBuilder,
@ -41,10 +41,9 @@ import Plutarch.Context (
withSpendingOutRef,
withValue,
)
import Plutarch.SafeMoney (Discrete)
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V1.Contexts (TxOutRef (..))
import PlutusLedgerApi.V1.Value qualified as Value (
assetClassValue,
singleton,
)
import PlutusLedgerApi.V2 (
@ -57,7 +56,6 @@ import PlutusLedgerApi.V2 (
)
import PlutusTx.AssocMap qualified as AssocMap
import Sample.Shared (
fromDiscrete,
governor,
signer,
stakeAssetClass,
@ -69,7 +67,7 @@ import Test.Util (sortValue)
-- | This script context should be a valid transaction.
stakeCreation :: ScriptContext
stakeCreation =
let st = Value.assetClassValue stakeAssetClass 1 -- Stake ST
let st = assetClassValue stakeAssetClass 1 -- Stake ST
datum :: StakeDatum
datum = StakeDatum 424242424242 (PubKeyCredential signer) Nothing []
@ -114,16 +112,16 @@ stakeCreationUnsigned =
-- | Config for creating a ScriptContext that deposits or withdraws.
data DepositWithdrawExample = DepositWithdrawExample
{ startAmount :: Discrete GTTag
{ startAmount :: Tagged GTTag Integer
-- ^ The amount of GT stored before the transaction.
, delta :: Discrete GTTag
, delta :: Tagged GTTag Integer
-- ^ The amount of GT deposited or withdrawn from the Stake.
}
-- | Create a ScriptContext that deposits or withdraws, given the config for it.
stakeDepositWithdraw :: DepositWithdrawExample -> ScriptContext
stakeDepositWithdraw config =
let st = Value.assetClassValue stakeAssetClass 1 -- Stake ST
let st = assetClassValue stakeAssetClass 1 -- Stake ST
stakeBefore :: StakeDatum
stakeBefore = StakeDatum config.startAmount (PubKeyCredential signer) Nothing []
@ -144,7 +142,7 @@ stakeDepositWithdraw config =
, withValue
( sortValue $
st
<> Value.assetClassValue (untag governor.gtClassRef) (fromDiscrete stakeBefore.stakedAmount)
<> assetClassValue governor.gtClassRef stakeBefore.stakedAmount
)
, withDatum stakeBefore
, withRef stakeRef
@ -155,7 +153,7 @@ stakeDepositWithdraw config =
, withValue
( sortValue $
st
<> Value.assetClassValue (untag governor.gtClassRef) (fromDiscrete stakeAfter.stakedAmount)
<> assetClassValue governor.gtClassRef stakeAfter.stakedAmount
)
, withDatum stakeAfter
]

View file

@ -24,7 +24,6 @@ import Agora.Stake (
StakeDatum (..),
StakeRedeemer (ClearDelegate, DelegateTo),
)
import Data.Tagged (untag)
import Plutarch.Context (
SpendingBuilder,
buildSpending',
@ -38,7 +37,7 @@ import Plutarch.Context (
withSpendingOutRef,
withValue,
)
import PlutusLedgerApi.V1.Value qualified as Value
import Plutarch.Extra.AssetClass (assetClassValue)
import PlutusLedgerApi.V2 (
Credential (PubKeyCredential),
PubKeyHash,
@ -46,7 +45,6 @@ import PlutusLedgerApi.V2 (
TxOutRef (TxOutRef),
)
import Sample.Shared (
fromDiscrete,
governor,
minAda,
signer,
@ -116,14 +114,14 @@ setDelegate ps = buildSpending' builder
_ -> signer2
else signer2
st = Value.assetClassValue stakeAssetClass 1 -- Stake ST
st = assetClassValue stakeAssetClass 1 -- Stake ST
stakeValue =
sortValue $
mconcat
[ st
, Value.assetClassValue
(untag governor.gtClassRef)
(fromDiscrete stakeInput.stakedAmount)
, assetClassValue
governor.gtClassRef
stakeInput.stakedAmount
, minAda
]