개요
탈중앙화 금융(영어: Decentralized Finance, 일반적으로 DeFi로 알려짐)은 블록체인에서 만들어진 금융의 일종으로 증권사, 거래소, 은행 등의 금융기관에 의존하지 않고 블록체인의 지능을 활용하여 금융을 제공합니다. 금융 활동을 수행하기 위한 계약. DeFi에는 청산 및 스프레드 차익 거래를 포함하되 이에 국한되지 않는 많은 차익 거래 기회가 있습니다. 이 기사에서는 일부 탈중앙화 거래소(DEX)와 애그리게이터(Aggregator)가 계약 코드에서 가질 수 있는 차익 거래 기회를 분석합니다.
분석하다
Uniswap
분석하다
Uniswap V2 Router
Uniswap은 AMM(Automated Market Maker) 모델을 채택한 분산형 암호화폐 거래 플랫폼입니다.현재 Uniswap V2와 Uniswap V3의 두 가지 인기 있는 버전이 있습니다. 각각 가능한 차익 거래 기회를 분석할 것입니다.
Uniswap V2에서 사용자는 일반적으로 라우터 계약을 통해 페어 계약 및 팩토리 계약과 상호 작용합니다. 일반적으로 라우터는 트랜잭션에서 토큰을 전송만 하고 토큰을 저장하지는 않지만, 에어드롭 및 전송 오류와 같은 여러 가지 이유로 인해 특정 토큰이 라우터 컨트랙트에 저장됩니다. 그렇다면 이러한 토큰을 인출하는 방법은 무엇입니까?
Uniswap V2 Router 02 계약의 코드를 분석하면 removeLiquidityETHSupportingFeeOnTransferTokens 기능이 있음을 알 수 있습니다.
이 함수는 토큰 중 하나가 WETH인 유동성을 제거하기 위해 사용되며 내부적으로 removeLiquidity 함수가 호출될 때 전달되는 to의 주소는 address(this)입니다. 그런 다음 라우터 계약은 두 개의 토큰을 지정된 주소로 전송합니다. 여기에서 전송된 WETH의 양은 removeLiquidity에 의해 반환되고 수정할 수 없지만 다른 전송된 Token의 양은 라우터 컨트랙트의 토큰 잔액인 balanceOf(address(this))입니다.
따라서 위의 분석에 따라 차익 거래 프로세스를 얻을 수 있습니다.
라우터 02 계약에 ERC 20 토큰이 있는지 모니터링됩니다.
라우터 02 계약에 ERC 20 토큰이 있는지 모니터링됩니다.
addLiquidityETH를 호출하여 ERC 20 토큰과 WETH의 유동성을 추가합니다.
유동성을 제거하려면 removeLiquidityETHSupportingFeeOnTransferTokens를 호출하십시오.
한정:
토큰이 이전에 WETH로 유동성이 없었던 경우 처음 유동성을 추가할 때 약간의 유동성(MINIMUM_LIQUIDITY)을 잃게 됩니다.
Uniswap V2 Pair
Router 02 계약에서 WETH 및 ETH를 추출하는 방법은 아직 발견되지 않았습니다.
소위 유동성 풀인 Uniswap V2 Pair 계약은 유동성을 제공하는 두 가지 유형의 토큰을 저장합니다.Pair 계약은 balanceOf(address(this)) 대신 잔고를 기록하기 위해 예비를 사용하기 때문에 누군가 실수로 유동성을 직접 전송합니다. 영구 토큰을 계약에 넣을 때 잔액과 준비금 사이에 차이가 있을 것이며 페어 계약에 잔액 기능 스킴이 있습니다. 이 기능을 호출하여 차액의 토큰을 추출할 수 있습니다.
이 기능은 유동성 풀에 있는 두 개의 유동성 토큰의 잔액과 준비금의 차이만큼 토큰을 to 주소로 전송하는 것을 볼 수 있습니다.
유동성 풀에 있는 이 두 토큰 외에도 착오, 에어드랍 등으로 인해 다른 ERC 20 토큰도 있을 것입니다. 이 토큰을 인출하는 방법은 무엇입니까?
Pair 계약의 코드를 분석한 결과 풀의 LP 토큰이 유동성 풀에 존재하는 경우를 제외하고는 이 부분의 토큰을 인출할 수 없는 것으로 나타났습니다.
Uniswap V3 SwapRouter
이런 일이 발생하면 쌍 계약의 소각 기능을 호출하여 유동성을 제거하고 해당하는 두 개의 유동성 토큰을 꺼낼 수 있습니다.
Uniswap V3의 SwapRouter 계약도 Uniswap V2 Router와 동일한 상황을 갖게 되며 ERC 20 토큰과 ETH가 있지만 다행스럽게도 SwapRouter 계약은 토큰 추출을 용이하게 하는 여러 기능을 제공합니다.
ERC 20 토큰을 인출하려면 sweepToken 기능을 사용할 수 있습니다.
ETH를 인출하기 위해 환불 ETH 기능을 사용할 수 있습니다.
unwrapWETH 9 함수를 직접 호출하여 WETH를 ETH로 복원하고 추출할 수도 있습니다.
위는 Uniswap V3 SwapRouter 컨트랙트의 차익거래 분석입니다.
SushiSwap
Uniswap V3 Pool 계약의 코드를 분석한 결과 계약에서 다른 토큰을 추출할 수 있는 방법이 없으며 Uniswap V2 Pair 계약에서 잔액과 준비금 사이에 차이가 없는 것으로 나타났습니다.
SushiSwap은 Uniswap의 포크로 시작하여 나중에 다양한 금융 서비스와 제품을 제공하는 독립적인 생태계로 발전했습니다.
SushiXSwap
SushiSwap은 Uniswap V2와 동일하기 때문에 위에서 언급한 Uniswap V2의 차익 거래 방법을 SushiSwap에도 적용할 수 있습니다.
SushiXSwap은 SushiSwap에서 출시한 LayerZero 기반 풀체인 트랜잭션 프로토콜이며 지원되는 네트워크에는 Optimism, Arbitrum, Fantom, BNB Chain, Polygon 및 Avalanche가 포함됩니다. 사용자는 지원되는 네트워크와 자산 간에 교차 체인 트랜잭션을 수행할 수 있습니다.
SushiXSwap 계약에서 토큰을 인출하는 방법은 무엇입니까?
SushiXSwap의 주요 기능은 일련의 작업을 제공하는 요리 기능을 통해 구현되며 지원되는 작업 목록은 다음과 같습니다.
그 중에는 코드가 다음과 같이 구현된 ACTION_DST_WITHDRAW_TOKEN 작업이 있습니다.
먼저 cook 함수에 전달된 데이터를 디코딩한 후 금액이 0인지 판단합니다. 0이면 해당 금액의 값을 컨트랙트의 ERC 20 토큰의 잔액 또는 ETH의 잔액으로 설정합니다. 마지막으로 _transferTokens를 호출하여 지정된 주소로 토큰을 전송합니다.
Sushi BentoBox
따라서 cook 함수에 전달되는 작업과 데이터만 구성하면 됩니다. 즉, 작업을 ACTION_DST_WITHDRAW_TOKEN으로 설정하고 전송할 토큰, 수신 주소 및 데이터 수량을 구성한 다음 토큰을 전송합니다. SushiXSwap 계약.
Sushi BentoBox는 SushiSwap 생태계의 구성 요소입니다. BentoBox는 매우 유연한 탈중앙화 금융(DeFi) 비율 최적화 제품입니다. 간단히 말해서 사용자가 저장하고 빌리고 이자를 얻을 수 있는 스마트 계약 플랫폼입니다. BentoBox의 주요 목적은 DeFi 분야에서 사용자 수입을 최적화하는 것입니다.
Ethereum의 BentoBox 계약에 많은 수의 토큰이 저장되어 있는데 이 계약에서 차익 거래의 여지가 있습니까?
BentoBox 계약에서 사용자는 입금 기능을 통해 입금 작업을 수행할 수 있으며 기능 구현은 다음과 같습니다.<= _tokenBalanceOf(token).sub(total.elastic)。
사용자가 지정된 토큰 주소, 직불 주소, 수신 주소, 수량 및 주식 수를 전달하는 것을 볼 수 있습니다.기능은 먼저 일련의 확인을 수행한 다음 금액 또는 공유를 변환합니다.핵심 포인트는 라인에 있습니다. 195-198, 여기 수표 작성: 금액
BentoBox 계약의 특정 토큰의 잔액은 Uniswap Pair 계약의 준비금과 유사한 total.elastic을 사용하여 기록됩니다. 경우에 따라 _tokenBalanceOf(token)과 차이가 있을 수 있으므로 예금 기능의 특성을 사용할 수 있습니다. 여기에서 차액을 BentoBox 계약의 잔액으로 변환하십시오.
DODO
따라서 매개 변수를 전달할 때 토큰을 차이가 있는 토큰 주소로 설정하고 금액 값을 차이로 설정한 다음 from을 BentoBox 계약의 주소로 설정하고 우리 자신의 주소로 설정합니다. 주소는 BentoBox 컨트랙트의 주소이기 때문에 이체는 없지만 total.elastic과 _tokenBalanceOf(token)의 값이 균형을 이루어 컨트랙트에서 to 주소의 잔액으로 변환됩니다.
DODO는 Web3 자산에 효율적인 온체인 유동성을 제공하기 위해 독창적인 PMM(Proactive Market Maker) 알고리즘을 사용하는 분산형 거래 플랫폼입니다. DODO는 유동성 자체를 제공할 뿐만 아니라 다른 거래소의 유동성을 통합합니다.
DODO V2 Proxy 02
DODO는 사용자가 DODO V2 프록시 02 계약을 통해 토큰을 교환하는 일련의 계약을 가지고 있습니다. 유니스왑 라우터 컨트랙트와 마찬가지로 이 컨트랙트에도 여러 가지 이유로 토큰이 있는데 이 토큰을 어떻게 인출해야 할까요?
DODO V2 Proxy 02 컨트랙트에 externalSwap 함수가 있는데, 0x, 1inch 등 교환을 위해 DODO가 집계한 외부 플랫폼을 호출하는데 사용되며 코드는 다음과 같이 구현됩니다.
1719-1721라인은 들어오는 파라미터를 확인하고, 1724라인은 fromToken이 ETH인지 여부를 확인합니다.그렇지 않으면 발신자의 토큰을 컨트랙트로 전송한 후 권한을 부여합니다.DODOAPPROVE 컨트랙트의 코드를 분석한 후 나중에 다음을 우회하려면 fromTokenAmount만 0으로 설정해야 합니다.
그러면 호출할 외부 컨트랙트가 검증되고 화이트리스트에 있는 컨트랙트만 호출이 가능합니다. calldataConcat to The encoding of the view function of the contract, so that the return value is true, can also pass the 후속 require validation:
위 단계를 통해 DODO V2 Proxy 02 컨트랙트에서 ERC 20 토큰과 ETH를 추출할 수 있습니다.
1inch
보조 제목
1inch는 사용자에게 최고의 토큰 교환 가격을 제공하기 위해 여러 DEX의 유동성을 풀링하는 탈중앙화 거래소(DEX) 애그리게이터입니다. 다양한 소스의 유동성을 통합함으로써 1inch는 사용자가 거래를 최적화하고 플랫폼 전체에서 최상의 가격을 찾을 수 있도록 도와줍니다. 1inch의 스마트 계약은 다양한 분산형 거래소 간에 자동으로 거래되므로 사용자가 서로 다른 거래소 간에 가장 좋은 가격과 가장 낮은 슬리피지를 쉽게 얻을 수 있습니다. 또한 1inch는 유동성 채굴 및 거버넌스 토큰과 같은 다른 기능도 제공합니다.
AggregationRouterV 5
1inch의 메인 컨트랙트는 AggregationRouter이며 현재 V4, V5 버전이 많이 사용되고 있습니다.
AggregationRouterV 5 계약에는 스왑 기능이 있으며 그 구현은 다음과 같습니다.
desc에서 minReturnAmount를 확인한 후 desc에서 srcToken 및 dstToken을 가져오고 다음 행 986-997은 desc 구조에서 플래그 및 srcToken을 구성하여 우회할 수 있습니다.
그런 다음 호출이 이루어지고 실행 상태가 확인되는 _execute 함수를 실행합니다. 실행자는 사용자가 전달하므로 여기에서 0 주소를 사용하여 우회할 수 있습니다.
그런 다음 계약에서 dstToken의 잔액을 가져옵니다. 1007-1018행에서 desc에 플래그와 minReturnAmount를 구성하여 우회할 수 있습니다.
마지막으로 계약의 dstToken 잔액은 사용자가 제어하는 dstReceiver 주소로 전송됩니다.
AggregationRouterV 4
위의 단계를 통해 AggregationRouterV 5 컨트랙트에서 토큰을 인출하기 위해 스왑 함수에 전달되는 매개 변수를 구성할 수 있습니다.
보조 제목
요약하다
요약하다
이 기사에서는 일부 탈중앙화 거래소 및 애그리게이터를 간략하게 소개하고 그 중에서 가능한 차익 거래에 대해 논의하고 계약 코드 수준에서 차익 거래의 원칙을 분석하지만 실제로 성공은 GAS, 노드 속도 등과 같은 많은 요소와 관련이 있습니다.
회사 소개
At Eocene Research, we provide the insights of intentions and security behind everything you know or don't know of blockchain, and empower every individual and organization to answer complex questions we hadn't even dreamed of back then.
