Plutus.V1.Ledger.Time
1. 📜 Overview
2. 🔧 LANGUAGE PRAGMAS AND IMPORTS
3. 🗄️ Data Types
3.1 ⏱️ DiffMilliSeconds
3.2 ⏲️ POSIXTime
3.3 📅 POSIXTimeRange
4. ⚙️ Functions
4.1 ↔️ fromMilliSeconds
5. 🤝 Typeclass Instances
6. 🏭 On-Chain Derivations
7. 📚 Glossary
1 📜 Overview
The Plutus.V1.Ledger.Time
module defines types and functions for working with time in Plutus on-chain code:
DiffMilliSeconds
: duration measured in milliseconds.POSIXTime
: absolute time since the Unix epoch, in milliseconds.POSIXTimeRange
: alias forInterval POSIXTime
, representing valid time windows.Utility to convert between
DiffMilliSeconds
andPOSIXTime
.
All types derive numeric, ordering, and on-chain serialization classes for use in scripts.
2 🔧 LANGUAGE PRAGMAS AND IMPORTS
{-# LANGUAGE DeriveAnyClass #-}
{-# LANGUAGE DeriveGeneric #-}
{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE MonoLocalBinds #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE UndecidableInstances #-}
{-# OPTIONS_GHC -Wno-identities #-}
{-# OPTIONS_GHC -fno-ignore-interface-pragmas #-}
{-# OPTIONS_GHC -fno-omit-interface-pragmas #-}
module Plutus.V1.Ledger.Time (
DiffMilliSeconds(..),
POSIXTime(..),
POSIXTimeRange,
fromMilliSeconds
) where
import Control.DeepSeq (NFData)
import GHC.Generics (Generic)
import Plutus.V1.Ledger.Interval (Interval)
import PlutusTx qualified
import PlutusTx.Lift (makeLift)
import PlutusTx.Prelude
import Prelude qualified as Haskell
import Prettyprinter (Pretty(pretty), (<+>))
Deriving: generic, anyclass, numeric, and on-chain
ToData
/FromData
.Imports:
Interval
for time ranges,PlutusTx.Prelude
for on-chain code.
3 🗄️ Data Types
3.1 ⏱️ DiffMilliSeconds
newtype DiffMilliSeconds = DiffMilliSeconds Integer
deriving stock (Haskell.Eq, Haskell.Ord, Haskell.Show, Generic)
deriving anyclass (NFData)
deriving newtype (
Haskell.Num,
AdditiveSemigroup,
AdditiveMonoid,
AdditiveGroup,
Haskell.Enum,
Eq,
Ord,
Haskell.Real,
Haskell.Integral,
PlutusTx.ToData,
PlutusTx.FromData,
PlutusTx.UnsafeFromData
)
Represents a duration in milliseconds.
Derives all standard numeric and on-chain data classes via
newtype
.
3.2 ⏲️ POSIXTime
newtype POSIXTime = POSIXTime { getPOSIXTime :: Integer }
deriving stock (Haskell.Eq, Haskell.Ord, Haskell.Show, Generic)
deriving anyclass (NFData)
deriving newtype (
AdditiveSemigroup,
AdditiveMonoid,
AdditiveGroup,
Eq,
Ord,
Enum,
PlutusTx.ToData,
PlutusTx.FromData,
PlutusTx.UnsafeFromData,
Haskell.Num,
Haskell.Enum,
Haskell.Real,
Haskell.Integral
)
Represents milliseconds since 1970-01-01T00:00:00Z.
Convenient numeric operations and on-chain serialization.
instance Pretty POSIXTime where
pretty (POSIXTime i) = "POSIXTime" <+> pretty i
Pretty instance for human-readable output.
3.3 📅 POSIXTimeRange
type POSIXTimeRange = Interval POSIXTime
Alias for time intervals, e.g., validity windows on transactions.
4 ⚙️ Functions
4.1 ↔️ fromMilliSeconds
{-# INLINABLE fromMilliSeconds #-}
fromMilliSeconds :: DiffMilliSeconds -> POSIXTime
fromMilliSeconds (DiffMilliSeconds s) = POSIXTime s
Converts a
DiffMilliSeconds
duration into aPOSIXTime
offset.Use case: add or subtract durations to/from
POSIXTime
values in contracts.
5 🤝 Typeclass Instances
Eq
,Ord
,Show
,Generic
,NFData
for bothDiffMilliSeconds
andPOSIXTime
.Numeric (
Num
,Integral
, etc.) and Additive for arithmetic.On-chain serialization via
PlutusTx.ToData
,FromData
, andUnsafeFromData
.
6 🏭 On-Chain Derivations
makeLift ''DiffMilliSeconds
makeLift ''POSIXTime
makeLift
Template Haskell to embed these types in PlutusTx code.
7 📚 Glossary
DiffMilliSeconds: a wrapper around
Integer
representing milliseconds.POSIXTime: milliseconds since UNIX epoch.
POSIXTimeRange: interval of
POSIXTime
, used for validity ranges.Interval: generic open/closed interval type from
Plutus.V1.Ledger.Interval
.MonoLocalBinds and UndecidableInstances: GHC pragmas enabling certain instance definitions.
makeLift: TH function to create on-chain
Lift
instances.AdditiveSemigroup / Monoid / Group: algebraic classes for addition.
INLINABLE: pragma exposing function for on-chain optimization.
Last updated