parent
0ace0406d8
commit
37cf3ab88e
2 changed files with 52 additions and 0 deletions
|
|
@ -123,6 +123,7 @@ library
|
||||||
exposed-modules:
|
exposed-modules:
|
||||||
Agora.AuthorityToken
|
Agora.AuthorityToken
|
||||||
Agora.Effect
|
Agora.Effect
|
||||||
|
Agora.Effect.TreasuryWithdrawal
|
||||||
Agora.Governor
|
Agora.Governor
|
||||||
Agora.MultiSig
|
Agora.MultiSig
|
||||||
Agora.Proposal
|
Agora.Proposal
|
||||||
|
|
|
||||||
51
agora/Agora/Effect/TreasuryWithdrawal.hs
Normal file
51
agora/Agora/Effect/TreasuryWithdrawal.hs
Normal file
|
|
@ -0,0 +1,51 @@
|
||||||
|
{- |
|
||||||
|
Module : Agora.Effect.TreasuryWithdrawal
|
||||||
|
Maintainer : seungheon.ooh@gmail.com
|
||||||
|
Description: An Effect that withdraws treasury deposit
|
||||||
|
-}
|
||||||
|
module Agora.Effect.TreasuryWithdrawal (treasuryWithdrawalDatum) where
|
||||||
|
|
||||||
|
import GHC.Generics qualified as GHC
|
||||||
|
import Generics.SOP
|
||||||
|
|
||||||
|
import Agora.Effect
|
||||||
|
import Agora.Utils
|
||||||
|
import Plutus.V1.Ledger.Value
|
||||||
|
import Plutarch
|
||||||
|
import qualified Plutarch.Monadic as P
|
||||||
|
import Plutarch.Api.V1
|
||||||
|
import Plutarch.DataRepr
|
||||||
|
|
||||||
|
data PTreasuryWithdrawalDatum (s :: S)
|
||||||
|
= PTreasuryWithdrawalDatum
|
||||||
|
( Term
|
||||||
|
s
|
||||||
|
(PDataRecord
|
||||||
|
'[ "receivers" ':= PBuiltinList (PAsData (PTuple PCredential PValue)) ]
|
||||||
|
)
|
||||||
|
)
|
||||||
|
deriving stock (GHC.Generic)
|
||||||
|
deriving anyclass (Generic, PIsDataRepr)
|
||||||
|
deriving
|
||||||
|
(PlutusType, PIsData, PDataFields)
|
||||||
|
via PIsDataReprInstances PTreasuryWithdrawalDatum
|
||||||
|
|
||||||
|
treasuryWithdrawalDatum :: forall {s :: S}. CurrencySymbol -> Term s PValidator
|
||||||
|
treasuryWithdrawalDatum currSymbol = makeEffect currSymbol $
|
||||||
|
\_cs (_datum :: Term _ PTreasuryWithdrawalDatum) _txOutRef _txInfo -> P.do
|
||||||
|
let outputs = pmap #
|
||||||
|
plam (\_out -> P.do
|
||||||
|
out <- pletFields @'["address", "value"] $ pfromData _out
|
||||||
|
cred <- pletFields @'["credential"] $ pfromData out.address
|
||||||
|
pdata $ ptuple # cred.credential # out.value
|
||||||
|
) #$
|
||||||
|
pfield @"outputs" # _txInfo
|
||||||
|
recivers = pfromData (pfield @"receivers" # _datum)
|
||||||
|
checkOutputs = pall # plam id #$ pmap #
|
||||||
|
plam (\_out -> P.do
|
||||||
|
pelem # _out # outputs
|
||||||
|
) #$
|
||||||
|
recivers
|
||||||
|
passert "Transaction output does not match receivers" checkOutputs
|
||||||
|
popaque $ pconstant ()
|
||||||
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue