getShareOfPool

function getShareOfPool( 
   address _tokenA, 
   address _tokenB, 
   uint _amountADesired, 
   uint _amountBDesired, 
   bool _owned
)external view returns (uint poolRatio)

유동성 풀의 지분율 구할 때 사용

Parameters

TypeValueDescription

address

_tokenA

LP 토큰A 주소

address

_tokenB

LP 토큰B 주소

uint

_amountADesired

LP 토큰A 개수

uint

_admoutBDesired

LP 토큰B 개수

bool

_owned

소유중인 유동성 풀 지분율 확인 여부 true : 소유중인 유동성 풀 지분율 false : 값에 의한 유동성 풀 지분

Return Values

TypeValueDescription

uint

poolRatio

지분 % 1만자리(백분율, 소수점2까지 표현)

※ Reserves를 통한 연산 방법

// totalLiquidity의 경우 pairContract totalSupply()를 통해 획득

liquidity = Math.min((amount0*totalLiquidity) / _reserve0, (amount1*totalLiquidity) / _reserve1);
totalLiquidity = totalLiquidity+liquidity;

// 1만자리 연산을 위해..
uint _numerator  = liquidity * (10 ** 5);
uint _quotient =  ((_numerator / (totalLiquidity)) + 5) / 10;

if( liquidity > 0 )
    return _quotient >= 10000 ? 10000 : _quotient;
else
    return 0;

Example

// 지분율 얻기(값에 의한)
await routerContract.getShareOfPool(
    mockToken0Contract.address, 
    mockToken1Contract.address, 
    ethers.utils.parseEther("10.0"), 
    ethers.utils.parseEther("5.0"),
    false
)

// 결과 (9.09%의 영향도)
BigNumber { value: "909" }

    
// 지분율 얻기(소유중인)
await routerContract..getShareOfPool(
    mockToken0Contract.address,
    mockToken1Contract.address,
    0,
    0,
    true
)
    
// 결과 (100%의 영향도)
BigNumber { value: "10000" }

2023.01.11

Last updated