101 lines
2.8 KiB
Haskell
101 lines
2.8 KiB
Haskell
{- |
|
|
Module : Sample.Stake
|
|
Maintainer : emi@haskell.fyi
|
|
Description: Sample based testing for Stake utxos
|
|
|
|
This module tests primarily the happy path for Stake creation
|
|
-}
|
|
module Sample.Stake (
|
|
stakeAssetClass,
|
|
stakeSymbol,
|
|
signer,
|
|
|
|
-- * Script contexts
|
|
stakeDepositWithdraw,
|
|
DepositWithdrawExample (..),
|
|
) where
|
|
|
|
import Agora.Governor (Governor (gtClassRef))
|
|
import Agora.SafeMoney (GTTag)
|
|
import Agora.Stake (
|
|
StakeDatum (StakeDatum, stakedAmount),
|
|
)
|
|
import Data.Tagged (Tagged)
|
|
import Plutarch.Context (
|
|
SpendingBuilder,
|
|
buildSpending',
|
|
input,
|
|
output,
|
|
script,
|
|
signedWith,
|
|
txId,
|
|
withDatum,
|
|
withRef,
|
|
withSpendingOutRef,
|
|
withValue,
|
|
)
|
|
import Plutarch.Extra.AssetClass (assetClassValue)
|
|
import PlutusLedgerApi.V1.Contexts (TxOutRef (..))
|
|
import PlutusLedgerApi.V2 (
|
|
Credential (PubKeyCredential),
|
|
ScriptContext (..),
|
|
)
|
|
import Sample.Shared (
|
|
governor,
|
|
signer,
|
|
stakeAssetClass,
|
|
stakeScriptHash,
|
|
stakeSymbol,
|
|
)
|
|
import Test.Util (sortValue)
|
|
|
|
-- | Config for creating a ScriptContext that deposits or withdraws.
|
|
data DepositWithdrawExample = DepositWithdrawExample
|
|
{ startAmount :: Tagged GTTag Integer
|
|
-- ^ The amount of GT stored before the transaction.
|
|
, 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 = assetClassValue stakeAssetClass 1 -- Stake ST
|
|
stakeBefore :: StakeDatum
|
|
stakeBefore = StakeDatum config.startAmount (PubKeyCredential signer) Nothing []
|
|
|
|
stakeAfter :: StakeDatum
|
|
stakeAfter = stakeBefore {stakedAmount = stakeBefore.stakedAmount + config.delta}
|
|
|
|
stakeRef :: TxOutRef
|
|
stakeRef = TxOutRef "0ffef57e30cc604342c738e31e0451593837b313e7bfb94b0922b142782f98e6" 1
|
|
|
|
builder :: SpendingBuilder
|
|
builder =
|
|
mconcat
|
|
[ txId "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be"
|
|
, signedWith signer
|
|
, input $
|
|
mconcat
|
|
[ script stakeScriptHash
|
|
, withValue
|
|
( sortValue $
|
|
st
|
|
<> assetClassValue governor.gtClassRef stakeBefore.stakedAmount
|
|
)
|
|
, withDatum stakeBefore
|
|
, withRef stakeRef
|
|
]
|
|
, output $
|
|
mconcat
|
|
[ script stakeScriptHash
|
|
, withValue
|
|
( sortValue $
|
|
st
|
|
<> assetClassValue governor.gtClassRef stakeAfter.stakedAmount
|
|
)
|
|
, withDatum stakeAfter
|
|
]
|
|
, withSpendingOutRef stakeRef
|
|
]
|
|
in buildSpending' builder
|