Skip to content

Commit b0304b2

Browse files
committed
feat(bidder_deposit): implement DepositCleanup sub-validator
1 parent f3f3838 commit b0304b2

File tree

2 files changed

+43
-1
lines changed

2 files changed

+43
-1
lines changed

src/HydraAuctionOnchain/Errors/Validators/BidderDeposit.hs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -26,6 +26,10 @@ data PBidderDepositError (s :: S)
2626
| BidderDeposit'ReclaimDepositLoser'Error'IncorrectValidityInterval
2727
| BidderDeposit'ReclaimDepositLoser'Error'InvalidBidderAddress
2828
| BidderDeposit'ReclaimDepositLoser'Error'NoBidderConsent
29+
| -- DepositCleanup errors
30+
BidderDeposit'DepositCleanup'Error'IncorrectValidityInterval
31+
| BidderDeposit'DepositCleanup'Error'InvalidBidderAddress
32+
| BidderDeposit'DepositCleanup'Error'NoBidderConsent
2933
deriving stock (Generic, Eq)
3034
deriving anyclass (PlutusType)
3135

src/HydraAuctionOnchain/Validators/BidderDeposit.hs

Lines changed: 39 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,11 @@ import HydraAuctionOnchain.Helpers
2121
)
2222
import HydraAuctionOnchain.Lib.Address (paddrPaymentKeyHash)
2323
import HydraAuctionOnchain.Lib.ScriptContext (pinputSpentWithRedeemer)
24-
import HydraAuctionOnchain.Types.AuctionTerms (PAuctionTerms, ppostBiddingPeriod)
24+
import HydraAuctionOnchain.Types.AuctionTerms
25+
( PAuctionTerms
26+
, pcleanupPeriod
27+
, ppostBiddingPeriod
28+
)
2529
import HydraAuctionOnchain.Types.BidderInfo (PBidderInfo)
2630
import HydraAuctionOnchain.Types.Error (errCode, passert, passertMaybe)
2731
import HydraAuctionOnchain.Types.StandingBidState (PStandingBidState, pbidderLost, pbidderWon)
@@ -104,6 +108,11 @@ bidderDepositValidator = phoistAcyclic $
104108
# auctionCs
105109
# auctionTerms
106110
# bidderInfo
111+
DepositCleanupRedeemer _ ->
112+
pcheckDepositCleanup
113+
# txInfo
114+
# auctionTerms
115+
# bidderInfo
107116
_ -> undefined
108117

109118
----------------------------------------------------------------------
@@ -233,3 +242,32 @@ pcheckReclaimDepositLoser = phoistAcyclic $
233242
ptxSignedBy # txInfoFields.signatories # pdata bidderPkh
234243

235244
pcon PUnit
245+
246+
----------------------------------------------------------------------
247+
-- DepositCleanup
248+
--
249+
-- If, for whatever reason, there are bidder deposits left during
250+
-- the cleanup period, then whoever placed a deposit can freely
251+
-- reclaim it.
252+
253+
pcheckDepositCleanup :: Term s (PTxInfo :--> PAuctionTerms :--> PBidderInfo :--> PUnit)
254+
pcheckDepositCleanup = phoistAcyclic $
255+
plam $ \txInfo auctionTerms bidderInfo -> P.do
256+
txInfoFields <- pletFields @["signatories", "validRange"] txInfo
257+
258+
-- This redeemer can only be used during the cleanup period.
259+
passert $(errCode BidderDeposit'DepositCleanup'Error'IncorrectValidityInterval) $
260+
pcontains # (pcleanupPeriod # auctionTerms) # txInfoFields.validRange
261+
262+
-- The payment part of the bidder address should be pkh.
263+
bidderPkh <-
264+
plet $
265+
passertMaybe
266+
$(errCode BidderDeposit'DepositCleanup'Error'InvalidBidderAddress)
267+
(paddrPaymentKeyHash #$ pfield @"biBidderAddress" # bidderInfo)
268+
269+
-- The bidder deposit's bidder signed the transaction.
270+
passert $(errCode BidderDeposit'DepositCleanup'Error'NoBidderConsent) $
271+
ptxSignedBy # txInfoFields.signatories # pdata bidderPkh
272+
273+
pcon PUnit

0 commit comments

Comments
 (0)