Skip to content

Commit 3985285

Browse files
authored
Merge pull request #115 from input-output-hk/Metalamp/nft-marketplace/fix-auction-endtime
revert custom beginning of time and auction endtime
2 parents 7c6c5bb + 286ee22 commit 3985285

File tree

6 files changed

+48
-18
lines changed

6 files changed

+48
-18
lines changed

MetaLamp/nft-marketplace/src/Ext/Plutus/Ledger/Time.hs

Lines changed: 14 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,20 @@ module Ext.Plutus.Ledger.Time where
22

33
import Data.Avro.Internal.Time (utcTimeToMillis)
44
import qualified Data.Time.Clock as Time
5-
import Plutus.V1.Ledger.Time (POSIXTime (..))
5+
import Plutus.V1.Ledger.Time (DiffMilliSeconds (..), POSIXTime (..),
6+
fromMilliSeconds)
67

78
convertUtcToPOSIX :: Time.UTCTime -> POSIXTime
89
convertUtcToPOSIX = POSIXTime . utcTimeToMillis
10+
11+
-- | 'beginningOfTime' corresponds to the Shelley launch date
12+
-- (2020-07-29T21:44:51Z) which is 1596059091000 in POSIX time
13+
-- (number of milliseconds since 1970-01-01T00:00:00Z).
14+
-- It is a hardcoded setting for pab simulation in Plutus code.
15+
beginningOfTime :: POSIXTime
16+
beginningOfTime = POSIXTime 1596059091000
17+
18+
newtype Seconds = Seconds Integer deriving Show
19+
20+
addToBeginningOfTime :: Seconds -> POSIXTime
21+
addToBeginningOfTime (Seconds s) = beginningOfTime + fromMilliSeconds (DiffMilliSeconds $ s * 1000)

MetaLamp/nft-marketplace/src/Plutus/Contracts/NftMarketplace/OffChain/User.hs

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -197,7 +197,7 @@ data StartAnAuctionParams =
197197
StartAnAuctionParams {
198198
saapItemId :: UserItemId,
199199
saapInitialPrice :: Ada,
200-
saapDuration :: Integer
200+
saapEndTime :: POSIXTime
201201
}
202202
deriving stock (Haskell.Eq, Haskell.Show, Haskell.Generic)
203203
deriving anyclass (J.ToJSON, J.FromJSON, Schema.ToSchema)
@@ -216,15 +216,14 @@ startAnAuction [email protected]{..} StartAnAuctionParams {..} = do
216216
Core.bundleValue cids <$> getBundleEntry nftStore bundleId
217217

218218
currTime <- currentTime
219-
let endTime = currTime + fromMilliSeconds (DiffMilliSeconds saapDuration)
219+
when (saapEndTime < currTime) $ throwError "Auction end time is from the past"
220220

221221
self <- Ledger.pubKeyHash <$> ownPubKey
222222
let startAuctionParams = Auction.StartAuctionParams {
223223
sapOwner = self,
224224
sapAsset = auctionValue,
225225
sapInitialPrice = saapInitialPrice,
226-
sapDuration = saapDuration,
227-
sapEndTime = endTime,
226+
sapEndTime = saapEndTime,
228227
sapAuctionFee = Just $ Auction.AuctionFee marketplaceOperator marketplaceSaleFee
229228
}
230229
auction <- mapError (T.pack . Haskell.show) $ Auction.startAuction startAuctionParams

MetaLamp/nft-marketplace/src/Plutus/Contracts/Services/Auction/Endpoints.hs

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,6 @@ data StartAuctionParams = StartAuctionParams {
5555
sapOwner :: !PubKeyHash,
5656
sapAsset :: !Value,
5757
sapInitialPrice :: !Ada,
58-
sapDuration :: !Integer,
5958
sapEndTime :: !Ledger.POSIXTime,
6059
sapAuctionFee :: Maybe AuctionFee
6160
}

MetaLamp/nft-marketplace/src/Plutus/PAB/Simulation.hs

Lines changed: 16 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,9 @@ import Data.Text (Text)
3939
import Data.Text.Prettyprint.Doc (Pretty (..),
4040
viaShow)
4141
import qualified Data.Time.Clock as Time
42-
import Ext.Plutus.Ledger.Time (convertUtcToPOSIX)
42+
import Ext.Plutus.Ledger.Time (Seconds (..),
43+
addToBeginningOfTime,
44+
convertUtcToPOSIX)
4345
import qualified Ext.Plutus.PAB.Webserver.Server as Ext.Plutus.PAB
4446
import GHC.Generics (Generic)
4547
import Ledger
@@ -50,6 +52,7 @@ import Ledger.Ada (adaSymbol,
5052
import qualified Ledger.Ada as Ada
5153
import Ledger.Constraints
5254
import qualified Ledger.Constraints.OffChain as Constraints
55+
import Ledger.TimeSlot (SlotConfig (..))
5356
import qualified Ledger.Typed.Scripts as Scripts
5457
import Ledger.Value as Value
5558
import Network.HTTP.Client (defaultManagerSettings,
@@ -141,7 +144,7 @@ activateContracts = do
141144
startMpServer :: IO ()
142145
startMpServer = do
143146
beginningOfTime <- convertUtcToPOSIX <$> Time.getCurrentTime
144-
void $ Simulator.runSimulationWith handlers $ do
147+
void $ Simulator.runSimulationWith (handlers $ slotConfiguration beginningOfTime) $ do
145148
Simulator.logString @(Builtin MarketplaceContracts) "Starting NFT Marketplace PAB webserver on port 9080. Press enter to exit."
146149
shutdown <- Ext.Plutus.PAB.startServer
147150

@@ -156,7 +159,7 @@ startMpServer = do
156159

157160
runNftMarketplace :: IO ()
158161
runNftMarketplace =
159-
void $ Simulator.runSimulationWith handlers $ do
162+
void $ Simulator.runSimulationWith (handlers def) $ do
160163
Simulator.logString @(Builtin MarketplaceContracts) "Starting Marketplace PAB webserver on port 9080. Press enter to exit."
161164
shutdown <- PAB.startServerDebug
162165
ContractIDs {..} <- activateContracts
@@ -250,7 +253,7 @@ runNftMarketplace =
250253
let auction = Marketplace.StartAnAuctionParams {
251254
saapItemId = Marketplace.UserNftId photoTokenIpfsCid,
252255
saapInitialPrice = fromInteger $ 5 * oneAdaInLovelace,
253-
saapDuration = 25 * 1000
256+
saapEndTime = addToBeginningOfTime $ Seconds 55
254257
}
255258
_ <-
256259
Simulator.callEndpointOnInstance userCid "startAnAuction" auction
@@ -332,9 +335,15 @@ runNftMarketplace =
332335
_ <- liftIO getLine
333336
shutdown
334337

335-
handlers :: SimulatorEffectHandlers (Builtin MarketplaceContracts)
336-
handlers =
337-
Simulator.mkSimulatorHandlers def def
338+
slotConfiguration :: POSIXTime -> SlotConfig
339+
slotConfiguration beginningOfTime = SlotConfig
340+
{ scSlotLength = 1000
341+
, scSlotZeroTime = beginningOfTime
342+
}
343+
344+
handlers :: SlotConfig -> SimulatorEffectHandlers (Builtin MarketplaceContracts)
345+
handlers slotConfig =
346+
Simulator.mkSimulatorHandlers def slotConfig
338347
$ interpret (Builtin.contractHandler (Builtin.handleBuiltin @MarketplaceContracts))
339348

340349
oneAdaInLovelace :: Integer

MetaLamp/nft-marketplace/test/Marketplace/Fixtures/CheckOptions.hs

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,17 +8,26 @@ module Marketplace.Fixtures.CheckOptions where
88
import Control.Lens ((&), (.~))
99
import Data.Default (Default (def))
1010
import qualified Data.Map as Map
11+
import Ext.Plutus.Ledger.Time (beginningOfTime)
1112
import Ledger (Value)
1213
import qualified Ledger.Ada as Ada
14+
import Ledger.TimeSlot (SlotConfig (..))
1315
import qualified Ledger.Value as V
1416
import qualified Marketplace.Fixtures.Wallet as Fixtures
1517
import Plutus.Contract.Test
18+
import Plutus.Contract.Trace (defaultDist)
1619
import qualified Plutus.Contracts.NftMarketplace.OnChain.Core as Marketplace
1720
import qualified Plutus.Trace as Trace
21+
import Plutus.V1.Ledger.Time (POSIXTime (..))
1822

1923
options :: CheckOptions
2024
options = defaultCheckOptions & emulatorConfig .~ emulatorCfg
2125
where
2226
emulatorCfg :: Trace.EmulatorConfig
23-
emulatorCfg = def
27+
emulatorCfg = Trace.EmulatorConfig (Left defaultDist) slotConfiguration def
2428

29+
slotConfiguration :: SlotConfig
30+
slotConfiguration = SlotConfig
31+
{ scSlotLength = 1000
32+
, scSlotZeroTime = beginningOfTime
33+
}

MetaLamp/nft-marketplace/test/Marketplace/Spec/Auction.hs

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -15,6 +15,8 @@ import Data.Maybe (isNothing)
1515
import Data.Proxy
1616
import Data.Text (Text)
1717
import Data.Void (Void)
18+
import Ext.Plutus.Ledger.Time (Seconds (..),
19+
addToBeginningOfTime)
1820
import Ledger (Value)
1921
import Ledger.Ada (lovelaceValueOf)
2022
import qualified Ledger.Value as V
@@ -35,7 +37,6 @@ import qualified PlutusTx.AssocMap as AssocMap
3537
import Test.Tasty
3638
import qualified Utils
3739
import Wallet.Emulator.Wallet (walletAddress)
38-
3940
tests :: TestTree
4041
tests =
4142
testGroup
@@ -149,7 +150,7 @@ startAnAuctionParams :: Marketplace.StartAnAuctionParams
149150
startAnAuctionParams = Marketplace.StartAnAuctionParams
150151
{
151152
Marketplace.saapItemId = Marketplace.UserNftId Fixtures.catTokenIpfsCid,
152-
Marketplace.saapDuration = 155 * 1000,
153+
Marketplace.saapEndTime = addToBeginningOfTime $ Seconds 155,
153154
Marketplace.saapInitialPrice = fromInteger $ 5 * Fixtures.oneAdaInLovelace
154155
}
155156

@@ -251,7 +252,7 @@ cancelAuctionWithoutBidsTrace = do
251252
cancelAuctionWhenTimeIsOverTrace :: Trace.EmulatorTrace ()
252253
cancelAuctionWhenTimeIsOverTrace = do
253254
h <- CreateNft.createNftTrace
254-
let startAuctionParamsWithLessTime = startAnAuctionParams {Marketplace.saapDuration = 1 * 1000}
255+
let startAuctionParamsWithLessTime = startAnAuctionParams {Marketplace.saapEndTime = addToBeginningOfTime $ Seconds 5}
255256

256257
_ <- Trace.callEndpoint @"startAnAuction" h startAuctionParamsWithLessTime
257258

@@ -343,7 +344,7 @@ startAnAuctionParamsB :: Marketplace.StartAnAuctionParams
343344
startAnAuctionParamsB = Marketplace.StartAnAuctionParams
344345
{
345346
Marketplace.saapItemId = Marketplace.UserBundleId Fixtures.cids,
346-
Marketplace.saapDuration = 142 * 1000,
347+
Marketplace.saapEndTime = addToBeginningOfTime $ Seconds 300,
347348
Marketplace.saapInitialPrice = fromInteger $ 15 * Fixtures.oneAdaInLovelace
348349
}
349350

0 commit comments

Comments
 (0)