TradingLimits
Last updated
Last updated
The TradingLimits
library provides data structs and utility functions for defining and verifying trading limits on the net flow of an asset. It supports three types of limits:
L0: A time-window-based limit that verifies whether the net flow is within the specified limit0 range, resetting every timespan0 seconds.
L1: A time-window-based limit that verifies whether the net flow is within the specified limit1 range, resetting every timespan1 seconds.
LG: A global (or lifetime) limit that ensures the net flow is within the specified limitGlobal range and doesn't reset until the limit is disabled.
This library is intended to be consumed by other contracts, with all functions marked as internal
and pure
or view
for inlining during compilation to improve gas efficiency.
The Config
struct stores the configuration parameters for the trading limits. It is designed to be packed into a single storage slot for efficiency. The struct contains the following fields:
Attribute | Type | Description |
---|---|---|
The State
struct is used to keep track of the trading limits and their respective netflows for a given asset. It contains information about the netflows for each limit (L0, L1, and LG) as well as the timestamps when the limits were last reset.
Attribute | Type | Description |
---|---|---|
timestep0
uint32
Time in seconds for the timewindow-based limit L0, netflow0 resets every timestep0 seconds.
timestep1
uint32
Time in seconds for the timewindow-based limit L1, netflow1 resets every timestep1 seconds.
limit0
int48
Limit for the timewindow-based limit L0.
limit1
int48
Limit for the timewindow-based limit L1.
limitGlobal
int48
Limit for the global (or lifetime) limit LG.
flags
uint8
Bitwise flags that specify which limits are enabled: L0, L1, and LG.
lastUpdated0
uint32
Timestamp of the last reset for the netflow0.
lastUpdated1
uint32
Timestamp of the last reset for the netflow1.
netflow0
int48
Netflow for the time-window-based limit L0, resets every timespan0 seconds.
netflow1
int48
Netflow for the time-window-based limit L1, resets every timespan1 seconds.
netflowGlobal
int48
Netflow for the global (or lifetime) limit LG, doesn't reset until the limit is disabled.