make it possible for delegatee to vote with delegated and own stakes

This commit is contained in:
Hongrui Fang 2022-11-05 00:02:33 +08:00
parent a0946a8dbc
commit 3eb71a55a3
3 changed files with 41 additions and 9 deletions

View file

@ -79,6 +79,7 @@ import Plutarch.Extra.Functor (PFunctor (pfmap))
import "liqwid-plutarch-extra" Plutarch.Extra.List (pfindJust, pmapMaybe)
import Plutarch.Extra.Maybe (
passertPJust,
pdjust,
pfromJust,
pfromMaybe,
pjust,
@ -341,7 +342,7 @@ mkStakeValidator impl sstSymbol pstClass gtClass =
authorizedBy <- pletC $ pauthorizedBy # authorizationContext txInfoF
PPair allHaveSameOwner allHaveSameDelegatee <-
PPair allHaveSameOwner allHaveSameOrOwnedByDelegatee <-
pmatchC $
pfoldr
# plam
@ -354,11 +355,15 @@ mkStakeValidator impl sstSymbol pstClass gtClass =
allHaveSameOwner
#&& dF.owner
#== firstStakeInputDatumF.owner
allHaveSameDelegatee' =
allHaveSameDelegatee
#&& dF.delegatedTo
#== firstStakeInputDatumF.delegatedTo
in pcon $ PPair allHaveSameOwner' allHaveSameDelegatee'
allHaveSameOrOwnedByDelegatee' =
let delegated =
dF.delegatedTo #== firstStakeInputDatumF.delegatedTo
ownedByDelagtee =
pdata (pdjust # dF.owner)
#== firstStakeInputDatumF.delegatedTo
in allHaveSameDelegatee
#&& (delegated #|| ownedByDelagtee)
in pcon $ PPair allHaveSameOwner' allHaveSameOrOwnedByDelegatee'
)
# pcon (PPair (pconstant True) (pconstant True))
# restOfStakeInputDatums
@ -369,7 +374,7 @@ mkStakeValidator impl sstSymbol pstClass gtClass =
# firstStakeInputDatumF.owner
delegateSignsTransaction =
allHaveSameDelegatee
allHaveSameOrOwnedByDelegatee
#&& pmaybeData
# pconstant False
# plam ((authorizedBy #) . pfromData)