Rebase master to Treasury Withdrawal Effect

Liqwid-Labs/agora#46
This commit is contained in:
Seungheon Oh 2022-04-11 18:25:39 -05:00 committed by Seungheon Oh
parent 41a88204fa
commit f9d7db9323
No known key found for this signature in database
GPG key ID: 9B0E12D357369B66
2 changed files with 52 additions and 0 deletions

View file

@ -123,6 +123,7 @@ library
exposed-modules:
Agora.AuthorityToken
Agora.Effect
Agora.Effect.TreasuryWithdrawal
Agora.Governor
Agora.MultiSig
Agora.Proposal

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