/
fee.py
52 lines (42 loc) 路 1.49 KB
/
fee.py
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
锘縤mport enum
import logging
from typing import final, Final, Optional
from .exceptions import InvalidFeeTier
logger: Final = logging.getLogger(__name__)
@final
@enum.unique
class FeeTier(enum.IntEnum):
"""
Available fee tiers represented as 1e-6 percentages (i.e. 0.5% is 5000)
V1 supports only 0.3% fee tier.
V2 supports only 0.3% fee tier.
V3 supports 1%, 0.3%, 0.05%, and 0.01% fee tiers.
Reference: https://support.uniswap.org/hc/en-us/articles/20904283758349-What-are-fee-tiers
"""
TIER_100 = 100
TIER_500 = 500
TIER_3000 = 3000
TIER_10000 = 10000
def validate_fee_tier(fee: Optional[int], version: int) -> int:
"""
Validate fee tier for a given Uniswap version.
"""
if version == 3 and fee is None:
raise InvalidFeeTier(
"""
Explicit fee tier is required for Uniswap V3. Refer to the following link for more information:
https://support.uniswap.org/hc/en-us/articles/20904283758349-What-are-fee-tiers
"""
)
if fee is None:
fee = FeeTier.TIER_3000
if version < 3 and fee != FeeTier.TIER_3000:
raise InvalidFeeTier(
f"Unsupported fee tier {fee} for Uniswap V{version}. Choices are: {FeeTier.TIER_3000}"
)
try:
return FeeTier(fee).value
except ValueError as exc:
raise InvalidFeeTier(
f"Invalid fee tier {fee} for Uniswap V{version}. Choices are: {FeeTier._value2member_map_.keys()}"
) from exc