commit ec70bfd539fe2e27fd48f5f76395400287ac72d7
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Tue Oct 18 18:58:59 2022 -0500
use LSE
commit 25fff9b3ad1f2dde4cd7cf36977530b06a87d23c
Merge: 01cd3aa 1821dd6
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Tue Oct 18 18:17:45 2022 -0500
Merge branch 'staging' into seungheonoh/ply
commit 01cd3aa7a235e6fe6658246ca1026fa26dc71a83
Author: Hongrui Fang <chfanghr@gmail.com>
Date: Tue Oct 11 12:02:03 2022 +0800
update benchmark
commit a8513244892ce33cfdc9edf8cd501c4985ae8008
Author: Hongrui Fang <chfanghr@gmail.com>
Date: Tue Oct 11 11:59:22 2022 +0800
fix tests
commit 20ca40823485c2e2f78253643cf4453ac7b7ddd5
Author: Hongrui Fang <chfanghr@gmail.com>
Date: Tue Oct 11 11:57:37 2022 +0800
better import
commit a19fe49424210891bd03db71e4083fc1e0edfd98
Author: Hongrui Fang <chfanghr@gmail.com>
Date: Tue Oct 11 11:08:20 2022 +0800
update flake inputs
commit c93b21f1f9441e5c6f54525bf7c6a54757ec36cc
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Mon Oct 10 12:54:12 2022 -0500
tried to make tests pass
commit 1046ae1237299a33c58b48661bdb6d325a22147e
Merge: 2bf4e36 363bd83
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Mon Oct 10 12:18:48 2022 -0500
Merge branch 'staging' into seungheonoh/ply
commit 2bf4e3627c1b229f58078695082da85c80efd560
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Mon Oct 10 10:48:36 2022 -0500
remove junkpile
commit a1dbc9ad9e531fe0d0a0480c4aef9cf9ffa90f1d
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Mon Oct 10 10:47:25 2022 -0500
versions
commit 4542a06ac733858297d3a48c53368fad19dedc43
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Thu Oct 6 22:57:48 2022 -0500
script exporting interface
commit 6bd8c1a1d57e4bf9dc25c3068a9c8eae6bf6a19d
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Thu Oct 6 22:58:41 2022 -0500
fixed tests
commit d3ce2cf95633d336f3e621833677bd5bf10ee2c8
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Sun Oct 2 00:55:18 2022 -0500
fixed tests
commit 1ae64c9f692652b77b0506013853b2ba44267c65
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Sat Oct 1 13:28:20 2022 -0500
linker
commit db88cb75c7b74843141ad8ab4e6522b66d0dcfbc
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Sat Oct 1 01:03:50 2022 -0500
exporting scripts
commit 6389fce28e885a8a7f8669629c266f59c0edb51f
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Sat Oct 1 00:51:49 2022 -0500
made scripts parameterized on the script level
commit aea1e518a8890550bdebd0e5251da11d915c53a9
Author: Seungheon Oh <seungheon.ooh@gmail.com>
Date: Wed Sep 28 19:53:29 2022 -0500
Use `TypedScriptEnvelope` for `Agora.Bootstrap`
180 lines
5.6 KiB
Haskell
180 lines
5.6 KiB
Haskell
{- |
|
|
Module : Sample.Effect.TreasuryWithdrawalEffect
|
|
Maintainer : seungheon.ooh@gmail.com
|
|
Description: Sample based testing for Treasury Withdrawal Effect
|
|
|
|
This module provides samples for Treasury Withdrawal Effect tests.
|
|
-}
|
|
module Sample.Effect.TreasuryWithdrawal (
|
|
validator,
|
|
inputTreasury,
|
|
inputUser,
|
|
inputGAT,
|
|
inputCollateral,
|
|
outputTreasury,
|
|
outputUser,
|
|
buildReceiversOutputFromDatum,
|
|
currSymbol,
|
|
users,
|
|
treasuries,
|
|
buildScriptContext,
|
|
) where
|
|
|
|
import Agora.Effect.TreasuryWithdrawal (
|
|
TreasuryWithdrawalDatum (TreasuryWithdrawalDatum),
|
|
)
|
|
import Data.Map ((!))
|
|
import Plutarch.Api.V2 (validatorHash)
|
|
import PlutusLedgerApi.V1.Interval qualified as Interval (always)
|
|
import PlutusLedgerApi.V1.Value qualified as Value (singleton)
|
|
import PlutusLedgerApi.V2 (
|
|
Address (Address),
|
|
Credential (..),
|
|
CurrencySymbol,
|
|
DatumHash (DatumHash),
|
|
OutputDatum (OutputDatumHash),
|
|
PubKeyHash,
|
|
Redeemer (Redeemer),
|
|
ScriptContext (..),
|
|
ScriptPurpose (Spending),
|
|
TokenName (TokenName),
|
|
TxInInfo (TxInInfo),
|
|
TxInfo (..),
|
|
TxOut (..),
|
|
TxOutRef (TxOutRef),
|
|
Validator (Validator),
|
|
ValidatorHash (ValidatorHash),
|
|
Value,
|
|
toBuiltinData,
|
|
)
|
|
import PlutusTx.AssocMap qualified as AssocMap
|
|
import Sample.Shared (agoraScripts, authorityTokenSymbol)
|
|
import Test.Util (scriptCredentials, userCredentials)
|
|
|
|
-- | A sample Currency Symbol.
|
|
currSymbol :: CurrencySymbol
|
|
currSymbol = authorityTokenSymbol
|
|
|
|
-- | A sample 'PubKeyHash'.
|
|
signer :: PubKeyHash
|
|
signer = "8a30896c4fd5e79843e4ca1bd2cdbaa36f8c0bc3be7401214142019c"
|
|
|
|
-- | List of users who the effect will pay to.
|
|
users :: [Credential]
|
|
users = userCredentials
|
|
|
|
-- | List of users who the effect will pay to.
|
|
treasuries :: [Credential]
|
|
treasuries = scriptCredentials
|
|
|
|
inputGAT :: TxInInfo
|
|
inputGAT =
|
|
TxInInfo
|
|
(TxOutRef "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" 1)
|
|
TxOut
|
|
{ txOutAddress = Address (ScriptCredential $ validatorHash validator) Nothing
|
|
, txOutValue = Value.singleton currSymbol validatorHashTN 1 -- Stake ST
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Create an input given the index of the treasury and the 'Value' at this input.
|
|
inputTreasury :: Int -> Value -> TxInInfo
|
|
inputTreasury indx val =
|
|
TxInInfo
|
|
(TxOutRef "" 1)
|
|
TxOut
|
|
{ txOutAddress = Address (treasuries !! indx) Nothing
|
|
, txOutValue = val
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Create a input given the index of the user and the 'Value' at this input.
|
|
inputUser :: Int -> Value -> TxInInfo
|
|
inputUser indx val =
|
|
TxInInfo
|
|
(TxOutRef "" 1)
|
|
TxOut
|
|
{ txOutAddress = Address (users !! indx) Nothing
|
|
, txOutValue = val
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Create a input representing the collateral given by a user.
|
|
inputCollateral :: Int -> TxInInfo
|
|
inputCollateral indx =
|
|
TxInInfo -- Initiator
|
|
(TxOutRef "" 1)
|
|
TxOut
|
|
{ txOutAddress = Address (users !! indx) Nothing
|
|
, txOutValue = Value.singleton "" "" 2000000
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Create an output at the nth treasury with the given 'Value'.
|
|
outputTreasury :: Int -> Value -> TxOut
|
|
outputTreasury indx val =
|
|
TxOut
|
|
{ txOutAddress = Address (treasuries !! indx) Nothing
|
|
, txOutValue = val
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Create an output at the nth user with the given 'Value'.
|
|
outputUser :: Int -> Value -> TxOut
|
|
outputUser indx val =
|
|
TxOut
|
|
{ txOutAddress = Address (users !! indx) Nothing
|
|
, txOutValue = val
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Create a list of the outputs that are required as encoded in 'TreasuryWithdrawalDatum'.
|
|
buildReceiversOutputFromDatum :: TreasuryWithdrawalDatum -> [TxOut]
|
|
buildReceiversOutputFromDatum (TreasuryWithdrawalDatum xs _) = f <$> xs
|
|
where
|
|
f x =
|
|
TxOut
|
|
{ txOutAddress = Address (fst x) Nothing
|
|
, txOutValue = snd x
|
|
, txOutDatum = OutputDatumHash (DatumHash "")
|
|
, txOutReferenceScript = Nothing
|
|
}
|
|
|
|
-- | Effect validator instance.
|
|
validator :: Validator
|
|
validator = Validator $ agoraScripts ! "agora:treasuryWithdrawalValidator"
|
|
|
|
-- | 'TokenName' that represents the hash of the 'Agora.Stake.Stake' validator.
|
|
validatorHashTN :: TokenName
|
|
validatorHashTN = let ValidatorHash vh = validatorHash validator in TokenName vh
|
|
|
|
buildScriptContext :: [TxInInfo] -> [TxOut] -> ScriptContext
|
|
buildScriptContext inputs outputs =
|
|
let spending = Spending (TxOutRef "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be" 1)
|
|
in ScriptContext
|
|
{ scriptContextTxInfo =
|
|
TxInfo
|
|
{ txInfoInputs = inputs
|
|
, txInfoReferenceInputs = []
|
|
, txInfoOutputs = outputs
|
|
, txInfoFee = Value.singleton "" "" 2
|
|
, txInfoMint = Value.singleton currSymbol validatorHashTN (-1)
|
|
, txInfoDCert = []
|
|
, txInfoWdrl = AssocMap.empty
|
|
, txInfoValidRange = Interval.always
|
|
, txInfoSignatories = [signer]
|
|
, txInfoData = AssocMap.empty
|
|
, txInfoRedeemers =
|
|
AssocMap.fromList
|
|
[ (spending, Redeemer $ toBuiltinData ())
|
|
]
|
|
, txInfoId = "0b2086cbf8b6900f8cb65e012de4516cb66b5cb08a9aaba12a8b88be"
|
|
}
|
|
, scriptContextPurpose = spending
|
|
}
|