V3Pool
해당 컨트랙트는 V3 풀입니다.
Code
Github Link: (Will be updated after official launch)
Events, Read-Only Functions, and State-Changing Functions
Events
Initialize
event Initialize(
uint160 sqrtPriceX96,
int24 tick
)
풀에서 #initialize가 처음 호출될 때 풀에서 정확히 한 번 방출됩니다.
Mint/Burn/Swap은 초기화 전에 풀에서 내보낼 수 없습니다.
Parameters:
Name | Type | Description |
---|---|---|
| uint160 | 풀의 초기 sqrt 가격(Q64.96) |
| int24 | 풀의 초기 틱, 즉 풀 시작 가격의 로그 베이스 1.0001 |
Mint
event Mint(
address sender,
address owner,
int24 tickLower,
int24 tickUpper,
uint128 amount,
uint256 amount0,
uint256 amount1
)
주어진 포지션에 대해 유동성이 발행될 때 발생
Parameters:
Name | Type | Description |
---|---|---|
| address | 유동성을 발행한 주소 |
| address | 포지션 소유자 및 발행된 유동성 수령인 |
| int24 | 예치하고자 하는 포지션의 최소 틱 |
| int24 | 예치하고자 하는 포지션의 최대 틱 |
| uint128 | 포지션 범위에 발행된 유동성의 양 |
| uint256 | 발행된 유동성에 필요한 token0의 양 |
| uint256 | 발행된 유동성에 필요한 token1의 양 |
Collect
event Collect(
address owner,
int24 tickLower,
int24 tickUpper,
uint128 amount0,
uint128 amount1
)
포지션 소유자가 수수료를 수령할 때 발생
호출자가 수수료를 수집하지 않기로 선택하면 0 amount0 및 amount1로 수집 이벤트를 내보낼 수 있습니다.
Parameters:
Name | Type | Description |
---|---|---|
| address | 수수료가 징수되는 포지션의 소유자 |
| int24 | 포지션의 최소 틱 |
| int24 | 포지션의 최대 틱 |
| uint128 | 수령한 token0 수수료 금액 |
| uint128 | 수령한 token1 수수료 금액 |
Burn
event Burn(
address owner,
int24 tickLower,
int24 tickUpper,
uint128 amount,
uint256 amount0,
uint256 amount1
)
포지션의 유동성이 제거되었을 때 발생
#collect를 통해 인출해야 하는 유동성 포지션에서 얻은 수수료를 인출하지 않습니다.
Parameters:
Name | Type | Description |
---|---|---|
| address | 유동성이 제거된 포지션의 소유자 |
| int24 | 포지션의 최소 틱 |
| int24 | 포지션의 최대 틱 |
| uint128 | 제거할 유동성의 양 |
| uint256 | 인출된 token0의 양 |
| uint256 | 인출된 token1의 양 |
Swap
event Swap(
address sender,
address recipient,
int256 amount0,
int256 amount1,
uint160 sqrtPriceX96,
uint128 liquidity,
int24 tick
)
token0과 token1 사이의 모든 스왑에 대해 풀에서 내보냅니다.
Parameters:
Name | Type | Description |
---|---|---|
| address | 스왑 호출을 시작하고 콜백을 수신한 주소 |
| address | 스왑의 결과물을 받은 주소 |
| int256 | 풀의 token0 잔액 차이 |
| int256 | 풀의 token1 잔액 차이 |
| uint160 | Q64.96으로 스왑 후 풀의 sqrt(가격) |
| uint128 | 스왑 후 풀의 유동성 |
| int24 | 스왑 후 풀 가격의 로그 베이스 1.0001 |
IncreaseObservationCardinalityNext
event IncreaseObservationCardinalityNext(
uint16 observationCardinalityNextOld,
uint16 observationCardinalityNextNew
)
저장할 수 있는 관찰 수를 늘리기 위해 풀에서 내보냅니다.
observationCardinalityNext는 mint/swap/burn 직전에 인덱스에 관측치가 기록될 때까지 관측 카디널리티가 아닙니다.
Parameters:
Name | Type | Description |
---|---|---|
| uint16 | 다음 관찰 카디널리티의 이전 값 |
| uint16 | 다음 관찰 카디널리티의 업데이트된 값 |
Read-Only Functions
factory
function factory() external view returns (address)
IUniswapV3Factory 인터페이스를 준수해야 하는 풀을 배포한 계약
Return Values:
Type | Description |
---|---|
address | 컨트랙트 주소 |
token0
function token0() external view returns (address)
주소별로 정렬된 풀의 두 토큰 중 첫 번째
Return Values:
Type | Description |
---|---|
address | 토큰 컨트랙트 주소 |
token1
function token1() external view returns (address)
주소별로 정렬된 풀의 두 토큰 중 두 번째
Return Values:
Type | Description |
---|---|
address | 토큰 컨트랙트 주소 |
fee
function fee() external view returns (uint24)
1/100 BIP 단위의 풀 수수료, 즉 1e-6
Return Values:
Type | Description |
---|---|
uint24 | 수수료 |
tickSpacing
function tickSpacing() external view returns (int24)
풀 틱 간격
틱은 이 값의 배수에서만 사용할 수 있으며 최소값은 1이고 항상 양수입니다. 예: tickSpacing이 3이면 틱이 3번째 틱마다 초기화될 수 있음을 의미합니다(예: ..., -6, -3, 0, 3, 6, ... 이 값은 항상 양수인데도 캐스팅을 피하기 위해 int24입니다.
Return Values:
Type | Description |
---|---|
int24 | 틱 간격 |
maxLiquidityPerTick
function maxLiquidityPerTick() external view returns (uint128)The maximum amount of position liquidity that can use any tick in the range
이 매개변수는 유동성이 uint128을 초과하는 것을 방지하기 위해 틱당 적용되며 풀에 범위 내 유동성을 추가하는 것을 방지하기 위해 범위를 벗어난 유동성이 사용되는 것을 방지합니다.
Return Values:
Type | Description |
---|---|
uint128 | 틱당 최대 유동성 |
snapshotCumulativesInside
function snapshotCumulativesInside(
int24 tickLower,
int24 tickUpper
) external view returns (
int56 tickCumulativeInside,
uint160 secondsPerLiquidityInsideX128,
uint32 secondsInside
)
틱 누적, 유동성당 초 및 틱 범위 내 초의 스냅샷을 반환합니다.
스냅샷은 위치가 존재하는 기간 동안 찍은 다른 스냅샷과만 비교해야 합니다. 즉, 첫 번째 스냅샷이 생성된 시점과 두 번째 스냅샷이 생성된 시점 사이의 전체 기간 동안 포지션이 유지되지 않으면 스냅샷을 비교할 수 없습니다.
Parameters:
Name | Type | Description |
---|---|---|
| int24 | 범위의 하위 틱 |
| int24 | 범위의 상위 틱 |
Return Values:
Name | Type | Description |
---|---|---|
| int56 | 범위에 대한 틱 누산기의 스냅샷 |
| uint160 | 범위에 대한 유동성당 초의 스냅샷 |
| uint32 | 범위에 대한 유동성당 초의 스냅샷 |
observe
function observe(
uint32[] secondsAgos
) external view returns (
int56[] tickCumulatives,
uint160[] secondsPerLiquidityCumulativeX128s
)
현재 블록 타임스탬프에서 각 타임스탬프 secondsAgo 시점의 누적 틱 및 유동성을 반환합니다.
시간 가중 평균 틱 또는 범위 내 유동성을 얻으려면 두 개의 값으로 호출해야 합니다. 하나는 기간의 시작을 나타내고 다른 하나는 기간의 끝을 나타냅니다. 예를 들어 지난 시간 가중 평균 틱을 얻으려면 secondsAgos = [3600, 0]으로 호출해야 합니다. 시간 가중 평균 틱은 토큰1 / 토큰0의 로그 기준 sqrt(1.0001)에서 풀의 기하학적 시간 가중 평균 가격을 나타냅니다. TickMath 라이브러리를 사용하여 눈금 값에서 비율로 이동할 수 있습니다.
Parameters:
Name | Type | Description |
---|---|---|
| uint32[] | 각 누적 틱 및 유동성 값이 반환되어야 하는 시점 |
Return Values:
Name | Type | Description |
---|---|---|
| int56[] | 현재 블록 타임스탬프에서 각 |
| uint160[] | 현재 블록의 각 |
slot0
function slot0() external view returns (
uint160 sqrtPriceX96,
int24 tick,
uint16 observationIndex,
uint16 observationCardinality,
uint16 observationCardinalityNext,
uint8 feeProtocol,
bool unlocked
)
풀의 0번째 스토리지 슬롯은 많은 값을 저장하며 외부에서 액세스할 때 가스를 절약하기 위한 단일 방법으로 노출됩니다.
Return Values:
Name | Type | Description |
---|---|---|
| uint160 | sqrt(token1/token0) Q64.96 값으로 풀의 현재 가격 |
| int24 | 풀의 현재 틱, 즉 실행된 마지막 틱 전환에 따른 것입니다. 가격이 틱 경계에 있는 경우 이 값은 항상 SqrtTickMath getTickAtSqrtRatio(sqrtPriceX96)와 같지 않을 수 있습니다. |
| uint16 | 작성된 마지막 오라클 관찰의 인덱스 |
| uint16 | 풀에 저장된 현재 최대 관찰 수 |
| uint16 | 관찰 시 업데이트될 다음 최대 관찰 수입니다. |
| uint8 | * 미사용 * |
| bool | 풀이 현재 재진입에 잠겨 있는지 여부 |
feeGrowthGlobal0X128
function feeGrowthGlobal0X128() external view returns (uint256)
풀의 전체 수명 동안 유동성 단위당 수집된 token0의 Q128.128 수수료로 수수료 증가
이 값은 uint256을 오버플로할 수 있습니다.
feeGrowthGlobal1X128
function feeGrowthGlobal1X128() external view returns (uint256)
풀의 전체 수명 동안 유동성 단위당 수집된 token1의 Q128.128 수수료로 수수료 증가
이 값은 uint256을 오버플로할 수 있습니다.
liquidity
function liquidity() external view returns (uint128)
현재 풀에서 사용할 수 있는 유동성 범위
이 값은 모든 틱의 총 유동성과 관련이 없습니다.
ticks
function ticks(
int24 tick
) external view returns (
uint128 liquidityGross,
int128 liquidityNet,
uint256 feeGrowthOutside0X128,
uint256 feeGrowthOutside1X128,
int56 tickCumulativeOutside,
uint160 secondsPerLiquidityOutsideX128,
uint32 secondsOutside,
bool initialized,
uint256 rewardGrowthOutsideX128
)
풀에서 특정 틱에 대한 정보 조회
Parameters:
Name | Type | Description |
---|---|---|
| int24 | 조회할 틱 |
Return Values:
Name | Type | Description |
---|---|---|
| uint128 | 풀을 틱 하한 또는 상한 틱으로 사용하는 총 포지션 유동성, |
| int128 | 풀 가격이 틱을 넘을 때 유동성이 얼마나 변하는지, |
| uint256 | token0의 현재 틱에서 틱 반대편의 수수료 증가, |
| uint256 | token1의 현재 틱에서 틱 반대편의 수수료 증가, feeGrowthOutsideX128 값은 틱이 초기화된 경우에만 사용할 수 있습니다. 즉, liquidityGross가 0보다 큰 경우입니다. 또한 이러한 값은 상대적이며 계산에 사용됩니다. 스냅샷. |
| int56 | |
| uint160 | |
| uint32 | |
| bool | |
| uint256 | 현재 틱에서 틱 반대편의 reward 증가 |
positions
function positions(
bytes32 key
) external view returns (
uint128 liquidity,
uint256 feeGrowthInside0LastX128,
uint256 feeGrowthInside1LastX128,
uint128 tokensOwed0,
uint128 tokensOwed1,
uint256 rewardGrowthInsideLastX128,
uint128 rewardOwed
)
포지션 키로 포지션에 대한 정보를 반환합니다.
Parameters:
Name | Type | Description |
---|---|---|
| bytes32 | 위치의 키는 소유자인 tickLower 및 tickUpper가 구성한 사전 이미지의 해시입니다. |
Return Values:
Name | Type | Description |
---|---|---|
| uint128 | 포지션의 유동성 양, |
| uint256 | 마지막 mint/burn/poke 기준 틱 범위 내에서 token0의 수수료 증가, |
| uint256 | 마지막 mint/burn/poke 기준 틱 범위 내에서 token1의 수수료 증가, |
| uint128 | 마지막 mint/burn/poke 시점의 포지션에 빚진 token0의 계산된 금액, |
| uint128 | 마지막 mint/burn/poke 시점의 포지션에 빚진 token1의 계산된 금액, |
| uint256 | 마지막 mint/burn/poke 기준 틱 범위 내에서 reward의 증가, |
| uint128 | 마지막 mint/burn/poke 시점의 포지션에 빚진 reward의 계산된 금액, |
observe
function observe(
uint32[] secondsAgos
) external view returns (
int56[] tickCumulatives,
uint160[] secondsPerLiquidityCumulativeX128s
)
현재 블록 타임스탬프에서 각 타임스탬프 secondsAgo
시점의 누적 틱 및 유동성을 반환합니다.
시간 가중 평균 틱 또는 범위 내 유동성을 얻으려면 두 개의 값으로 호출해야 합니다. 하나는 기간의 시작을 나타내고 다른 하나는 기간의 끝을 나타냅니다. 예를 들어 지난 시간 가중 평균 틱을 얻으려면 secondsAgos = [3600, 0]으로 호출해야 합니다. 시간 가중 평균 틱은 토큰1 / 토큰0의 로그 기준 sqrt(1.0001)에서 풀의 기하학적 시간 가중 평균 가격을 나타냅니다. TickMath 라이브러리를 사용하여 눈금 값에서 비율로 이동할 수 있습니다.
Parameters:
Name | Type | Description |
---|---|---|
| uint32[] | 각 누적 틱 및 유동성 값이 반환되어야 하는 시점부터 |
Return Values:
Name | Type | Description |
---|---|---|
| int56[] | 현재 블록 타임스탬프에서 각 |
| uint160[] | 현재 블록 타임스탬프에서 각 |
observations
function observations(
uint256 index
) external view returns (
uint32 blockTimestamp,
int56 tickCumulative,
uint160 secondsPerLiquidityCumulativeX128,
bool initialized
)
특정 관찰 색인에 대한 데이터를 반환합니다.
배열의 특정 인덱스가 아닌 일정 시간 전의 관찰을 얻기 위해 이 메서드 대신 #observe()를 사용하고 싶을 가능성이 큽니다.
Parameters:
Name | Type | Description |
---|---|---|
| uint256 | 가져올 관찰 배열의 요소 |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | 관찰의 타임스탬프, |
| int56 | 관찰 타임스탬프를 기준으로 풀 수명 동안 경과된 시간(초)을 곱한 틱 |
| uint160 | 관찰 타임스탬프를 기준으로 풀 수명 동안 범위 내 유동성 초당 |
| bool | 관찰이 초기화되었고 값이 사용하기에 안전한지 여부 |
State-Changing Functions
increaseObservationCardinalityNext
function increaseObservationCardinalityNext(
uint16 observationCardinalityNext
) external;
이 풀이 저장할 가격 및 유동성 관찰의 최대 수를 늘립니다.
이 방법은 풀에 이미 입력 observeCardinalityNext보다 크거나 같은 observeCardinalityNext가 있는 경우 작동하지 않습니다.
Parameters:
Name | Type | Description |
---|---|---|
| uint16 | 풀이 저장할 최소 관찰 수 |
initialize
function initialize(
uint160 sqrtPriceX96
) external;
풀의 초기 가격을 설정합니다. 잠금 해제된 상태로 초기화되기 때문에 잠기지 않음
Parameters:
Name | Type | Description |
---|---|---|
| uint160 | 풀의 초기 sqrt 가격을 Q64.96으로 |
mint
function mint(
address recipient,
int24 tickLower,
int24 tickUpper,
uint128 amount,
bytes data
) external returns (uint256 amount0, uint256 amount1)
주어진 수신자/tickLower/tickUpper 위치에 유동성 추가
Parameters:
Name | Type | Description |
---|---|---|
| address | 유동성이 생성될 주소 |
| int24 | 유동성을 추가할 포지션의 하위 틱 |
| int24 | 유동성을 추가할 위치의 상단 틱 |
| uint128 | 발행할 유동성의 양 |
| bytes | 콜백으로 전달되어야 하는 모든 데이터 |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | 주어진 양의 유동성을 발행하기 위해 지불된 token0의 양. 콜백의 값과 일치 |
| uint256 | 주어진 양의 유동성을 발행하기 위해 지불된 token1의 양. 콜백의 값과 일치 |
collect
function collect(
address recipient,
int24 tickLower,
int24 tickUpper,
uint128 amount0Requested,
uint128 amount1Requested
) external returns (uint128 amount0, uint128 amount1)
포지션에 빚진 토큰을 수집합니다.
획득한 수수료를 재계산하지 않으며, 이는 발행 또는 유동성 소각을 통해 수행되어야 합니다. 콜렉트는 포지션 소유자가 호출해야 합니다. token0 또는 token1만 인출하려면 amount0Requested 또는 amount1Requested를 0으로 설정하면 됩니다. 빚진 모든 토큰을 인출하기 위해 호출자는 빚진 실제 토큰보다 큰 값을 전달할 수 있습니다. 유형(uint128).max. 빚진 토큰은 누적된 스왑 수수료 또는 소진된 유동성에서 나올 수 있습니다.
Parameters:
Name | Type | Description |
---|---|---|
| address | 징수된 수수료를 받을 주소 |
| int24 | 수수료를 징수할 포지션의 하단 틱 |
| int24 | 수수료를 징수할 포지션의 상단 틱 |
| uint128 | 지불해야 할 수수료에서 얼마나 많은 token0을 인출해야 하는가 |
| uint128 | 지불해야 할 수수료에서 얼마나 많은 token1을 인출해야 하는가 |
Return Values:
Name | Type | Description |
---|---|---|
| uint128 | token0에서 징수된 수수료 금액 |
| uint128 | token1에서 징수된 수수료 금액 |
burn
function burn(
int24 tickLower,
int24 tickUpper,
uint128 amount
) external returns (uint256 amount0, uint256 amount1)
발신자로부터 유동성을 소각하고 유동성에 대해 포지션에 빚진 계정 토큰
Parameters:
Name | Type | Description |
---|---|---|
| int24 | 유동성을 제거할 포지션의 하위 틱 |
| int24 | 유동성을 제거할 포지션의 상위 틱 |
| uint128 | 소각할 유동성의 양 |
Return Values:
Name | Type | Description |
---|---|---|
| uint256 | 받는 사람에게 보낸 token0의 양 |
| uint256 | 받는 사람에게 보낸 token1의 양 |
swap
function swap(
address recipient,
bool zeroForOne,
int256 amountSpecified,
uint160 sqrtPriceLimitX96,
bytes data
) external returns (int256 amount0, int256 amount1)
token0을 token1로 바꾸거나 token1을 token0으로 바꿉니다.
이 메서드의 호출자는 IUniswapV3SwapCallback#uniswapV3SwapCallback 형식의 콜백을 받습니다.
Parameters:
Name | Type | Description |
---|---|---|
| address | 스왑 출력을 수신할 주소 |
| bool | 스왑의 방향, token0에서 token1로 true, token1에서 token0으로 false |
| int256 | 정확한 입력(양수) 또는 정확한 출력(음수)으로 암시적으로 스왑을 구성하는 스왑의 양 |
| uint160 | Q64.96 sqrt 가격 제한. token0 -> 1인 경우 가격은 스왑 후 이 값보다 낮을 수 없습니다. token1 -> 0인 경우 스왑 후 가격은 이 값보다 클 수 없습니다. |
| bytes | 콜백으로 전달될 모든 데이터 |
Return Values:
Name | Type | Description |
---|---|---|
| int256 | 풀의 token0 잔액 델타, 음수일 때 정확, 양수일 때 최소값 |
| int256 | 풀의 token1 잔액 델타, 음수일 때 정확, 양수일 때 최소값 |
snapshotCumulativesInside
function snapshotCumulativesInside(
int24 tickLower,
int24 tickUpper
) external returns (
int56 tickCumulativeInside,
uint160 secondsPerLiquidityInsideX128,
uint32 secondsInside
)
틱 누적, 유동성당 초 및 틱 범위 내 초의 스냅샷을 반환합니다.
스냅샷은 위치가 존재하는 기간 동안 찍은 다른 스냅샷과만 비교해야 합니다. 즉, 첫 번째 스냅샷이 생성된 시점과 두 번째 스냅샷이 생성된 시점 사이의 전체 기간 동안 포지션이 유지되지 않으면 스냅샷을 비교할 수 없습니다.
Parameters:
Name | Type | Description |
---|---|---|
| int24 | 범위의 하위 틱 |
| int24 | 범위의 상위 틱 |
Return Values:
Name | Type | Description |
---|---|---|
| int56 | 범위에 대한 틱 누산기의 스냅샷 |
| uint160 | 범위에 대한 유동성당 초의 스냅샷 |
| uint32 | 범위에 대한 유동성당 초의 스냅샷 |
Last updated