개요
탈중앙화 금융 (영어: Decentralized Finance, 흔히 DeFi 로 알려져 있음)은 블록체인을 기반으로 생성된 금융의 일종으로, 금융 도구를 제공하기 위해 브로커, 거래소 , 은행 등 금융 기관에 의존하지 않고 블록체인 계약의 인텔리전스를 사용합니다. 금융 활동을 수행합니다. DeFi에는 청산 및 스프레드 차익거래를 포함하되 이에 국한되지 않는 수많은 차익거래 기회가 있습니다. 이 기사에서는 일부 분산형 거래소( DEX ) 및 애그리게이터의 계약 코드에서 가능한 차익 거래 기회를 분석합니다.
분석하다
유니스왑
Uniswap은 AMM(Automatic Market Maker) 모델을 채택한 분산형 암호 화폐 거래 플랫폼입니다. 현재 널리 사용되는 버전은 Uniswap V2와 Uniswap V3 두 가지가 있습니다. 가능한 재정 거래 기회를 각각 분석하겠습니다.
유니스왑 V2 라우터
Uniswap V2에서 사용자는 일반적으로 라우터 계약을 통해 쌍 계약 및 공장 계약과 상호 작용합니다. 일반적으로 라우터는 트랜잭션에서만 토큰을 전송하고 토큰을 저장하지 않습니다.그러나 에어드랍 , 전송 오류 등 여러 가지 이유로 일부 토큰은 라우터 계약에 저장됩니다. 그렇다면 이 토큰을 어떻게 인출합니까?
Uniswap V2 Router 02 계약의 코드를 분석한 결과, RemoveLiquidityETHSupportingFeeOnTransferTokens 함수가 존재하는 것으로 나타났습니다.

이 함수는 토큰 중 하나인 WETH의 유동성을 제거하는 데 사용되며, 내부적으로 RemoveLiquidity 함수를 호출할 때 전달될 주소는 address(this) 이므로 두 토큰이 먼저 라우터 계약으로 전송된다는 의미입니다. 그런 다음 라우터 계약은 두 개의 토큰을 지정된 주소로 전송합니다. 여기서 전송된 WETH의 양은 RemoveLiquidity 에 의해 반환되며 수정이 불가능하지만, 또 다른 Token의 전송량은 BalanceOf(address(this)) 이며 , 이는 라우터 계약의 토큰 잔액입니다.
따라서 위의 분석을 바탕으로 차익거래 프로세스를 얻을 수 있습니다.
Router 02 계약에 ERC 20 토큰이 포함되어 있는지 모니터링됩니다.
Router 02 계약에 ERC 20 토큰이 포함되어 있는지 모니터링됩니다.
ERC 20 토큰과 WETH의 유동성을 추가하려면 addLiquidityETH를 호출하세요 .
유동성을 제거하려면 RemoveLiquidityETHSupportingFeeOnTransferTokens를 호출하세요 .
한정:
이전에 WETH에 유동성이 없었던 토큰의 경우 처음으로 유동성을 추가할 때 소량의 유동성(MINIMUM_LIQUIDITY)이 손실됩니다.
현재 Router 02 컨트랙트에서 WETH와 ETH를 추출할 수 있는 방법은 없습니다.
유니스왑 V2 쌍
소위 유동성 풀이라고 불리는 유니스왑 V2 페어 계약은 유동성을 제공하는 토큰 2개를 저장하는데, 페어 계약은 잔액을 기록하기 위해 BalanceOf(address(this)) 대신 준비금을 사용하기 때문에 실수 로 유동성을 직접 이체하는 사람들도 있다 . 토큰이 계약에 추가되면 잔액과 준비금 사이에 차이가 있으며 쌍 계약에 잔액 기능 스킴이 있습니다 . 이 함수를 호출하여 이 차이가 있는 토큰을 추출할 수 있습니다.

이 기능은 유동성 풀에 있는 두 유동성 토큰의 잔액과 준비금의 차액을 to 주소로 전송하는 것을 볼 수 있습니다.
유동성 풀에 있는 이 두 토큰 외에도 전송 오류, 에어드랍 등으로 인해 다른 ERC 20 토큰도 있을 것입니다. 이 토큰을 인출하는 방법은 무엇입니까?
페어 계약의 코드를 분석한 결과, 유동성 풀에 풀의 LP 토큰이 있는 경우를 제외하고는 토큰의 이 부분을 인출할 수 없는 것으로 나타났습니다.
이런 일이 발생하면 쌍 계약의 소각 기능을 호출하여 유동성을 제거하고 해당하는 두 개의 유동성 토큰을 인출할 수 있습니다.

Uniswap V3 스왑 라우터
Uniswap V3의 SwapRouter 계약은 Uniswap V2 Router와 동일한 상황이 될 것이며 ERC 20 토큰과 ETH가 있지만 다행히 SwapRouter 계약은 토큰을 쉽게 인출할 수 있는 여러 기능을 제공합니다.
ERC 20 토큰을 인출하려면 weepToken 기능을 사용할 수 있습니다 :

ETH를 인출하려면 RefundETH 함수를 사용할 수 있습니다 .

unwrapWETH 9 함수를 직접 호출하여 WETH를 ETH로 복원하고 추출할 수도 있습니다 .

위는 Uniswap V3 SwapRouter 계약에 대한 차익거래 분석입니다.
Uniswap V3 풀 계약의 코드를 분석한 결과 계약에서 다른 토큰을 인출할 수 있는 방법이 없으며 Uniswap V2 쌍 계약에서 잔액과 준비금 간에 차이가 없음을 발견했습니다.
스시스왑
SushiSwap은 Uniswap의 포크 프로젝트로 시작하여 이후 다양한 금융 서비스와 제품을 제공하는 독립적인 생태계로 성장했습니다.
SushiSwap은 Uniswap V2와 동일하므로 위의 Uniswap V2 차익거래 방법은 SushiSwap에도 적용됩니다.
SushiXSwap
SushiXSwap은 SushiSwap이 출시한 LayerZero를 기반으로 하는 풀체인 트랜잭션 프로토콜로, 지원되는 네트워크에는 Optimism , Arbitrum , Fantom , BNB Chain, Polygon 및 Avalanche 가 포함됩니다. 사용자는 지원되는 네트워크와 자산 간에 크로스체인 트랜잭션을 수행할 수 있습니다.
SushiXSwap 계약에서 토큰을 인출하는 방법은 무엇입니까?
SushiXSwap의 주요 기능은 일련의 연산을 제공하는 cook 함수를 통해 구현되며, 지원되는 연산 목록은 다음과 같습니다.

ACTION_DST_WITHDRAW_TOKEN 작업이 있으며 해당 코드는 다음과 같이 구현됩니다.

먼저 Cook 함수 에 전달된 데이터를 디코딩한 후 금액이 0인지 판단합니다. 0인 경우 해당 금액의 값을 컨트랙트의 ERC 20 토큰 잔액으로 설정합니다. 또는 ETH 잔액. 마지막으로 _transferTokens를 호출하여 토큰을 지정된 주소로 전송합니다.

따라서 Cook 함수 에 전달되는 액션과 데이터만 구성하면 됩니다 . 즉, 액션을 ACTION_DST_WITHDRAW_TOKEN 으로 설정 하고 전송하려는 토큰, 수신 주소 및 데이터 수량을 구성한 다음 전송할 수 있습니다. SushiXSwap 계약의 토큰.
스시 도시락 상자
Sushi BentoBox는 SushiSwap 생태계의 구성 요소입니다. BentoBox는 매우 유연한 탈중앙화 금융(DeFi) 금리 최적화 제품입니다. 간단히 말하면, 사용자가 보관하고, 빌리고, 이자를 얻을 수 있는 스마트 계약 플랫폼입니다. BentoBox의 주요 목적은 DeFi 분야에서 사용자의 이익을 최적화하는 것입니다.
이더리움의 BentoBox 계약에는 많은 수의 토큰이 저장되어 있는데, 이 계약에 차익거래의 여지가 있습니까?
BentoBox 계약에서 사용자는 입금 기능을 통해 입금 작업을 수행 할 수 있으며, 기능 구현은 다음과 같습니다.

사용자가 지정된 토큰 주소, 차변 주소, 수신 주소, 수량 및 지분 수를 전달하는 것을 볼 수 있습니다. 함수는 먼저 일련의 확인을 수행한 다음 금액 또는 지분을 변환합니다. 요점은 195-라인입니다. 198, 여기에서 확인했습니다: amount <= _tokenBalanceOf(token).sub(total.elastic) .
BentoBox 계약에서는 Uniswap 쌍 계약의 준비금과 유사하게 total.elastic을 사용하여 특정 토큰의 잔액을 기록하는데 경우에 따라 _tokenBalanceOf(token)과 차이가 있을 수 있습니다 . 여기에 입금 기능을 추가하면 실제로 BentoBox 계약에서 차액을 잔액으로 변환할 수 있습니다.
따라서 매개변수를 전달할 때 토큰을 차액이 있는 토큰 주소로 설정하고, 금액의 값을 차액으로 설정한 다음, from을 BentoBox 컨트랙트의 주소로 설정하고, 를 자신의 주소로 설정합니다. 207로 인해 해당 주소는 BentoBox 컨트랙트 주소이므로 전송이 되지 않으며 단지 total.elastic 과 _tokenBalanceOf(token) 의 값을 밸런스하여 컨트랙트의 to 주소의 잔액으로 변환합니다.
도도
DODO는 독창적인 PMM(Active Market Maker) 알고리즘을 사용하여 Web3 자산에 효율적인 온체인 유동성을 제공하는 분산형 거래 플랫폼입니다. DODO는 자체적으로 유동성을 제공할 뿐만 아니라 다른 거래소의 유동성을 집계합니다.
DODO에는 사용자가 DODO V2 Proxy 02 계약을 통해 토큰을 교환하는 일련의 계약이 있습니다. Uniswap Router 계약과 유사하게 이 계약에도 여러 가지 이유로 일부 토큰이 포함됩니다. 이 토큰을 어떻게 인출해야 합니까?
DODO V2 프록시 02
DODO V2 Proxy 02 계약에는 0x 및 1inch 와 같은 상환을 위해 DODO가 집계한 외부 플랫폼을 호출하는 데 사용되는 externalSwap 함수가 있습니다. 코드는 다음과 같이 구현됩니다.

라인 1719-1721은 들어오는 매개 변수를 확인한 다음 라인 1724는 fromToken이 ETH인지 확인합니다. 그렇지 않으면 호출자의 토큰이 계약으로 전송된 다음 승인됩니다. DODOAPPROVE 계약의 코드를 분석한 후 나중에 나는 우회하려면 fromTokenAmount를 0으로 설정해야 합니다.

그러면 호출된 외부 계약이 검증되고 화이트리스트에 있는 경우에만 호출할 수 있습니다. 여기서 swapTarget 및 calldataConcat는 사용자가 제어할 수 있으므로 swapTarget을 계약 주소 0x 또는 1inch로 설정한 다음 calldataConcat은 반환된 값이 true이고 후속 요구 확인을 통과할 수도 있도록 해당 계약의 보기 함수가 인코딩됩니다.

다음으로 계약의 모든 toToken이 호출자에게 전송됩니다. 여기의 toToken은 ERC 20 토큰 또는 ETH가 될 수 있습니다. 전송 후 최소 예상 금액이 확인됩니다. minReturnAmount 값을 매우 작은 값으로 설정합니다 . . 마지막 두 함수 호출은 관련이 없습니다.

위의 단계를 통해 DODO V2 Proxy 02 계약에서 ERC 20 토큰과 ETH를 인출할 수 있습니다.
1 인치
1inch는 사용자에게 최고의 토큰 교환 가격을 제공하기 위해 여러 DEX의 유동성을 집계하는 분산형 거래소(DEX) 집계기입니다. 1inch는 다양한 소스의 유동성을 통합함으로써 사용자가 거래를 최적화하고 플랫폼 전반에서 최적의 가격을 찾을 수 있도록 도와줍니다. 1inch의 스마트 계약은 다양한 분산형 거래소에서 자동으로 거래되므로 사용자는 서로 다른 거래소 간에 가장 좋은 가격과 가장 낮은 슬리피지를 쉽게 얻을 수 있습니다. 또한 1inch는 유동성 채굴 및 거버넌스 토큰과 같은 다른 기능도 제공합니다.
1inch의 주요 계약은 AggregationRouter이며 현재 V 4 및 V 5 버전이 더 일반적으로 사용됩니다. 이 두 계약에도 여러 가지 이유로 일부 토큰이 있습니다. 구성된 수신의 매개변수를 통해 계약의 매개변수를 추출할 수 있습니다. 기능.토큰의.
AggregationRouterV 5
AggregationRouterV 5 계약에는 스왑 기능이 있으며 구현은 다음과 같습니다.

desc에서 minReturnAmount를 확인한 후 desc에서 srcToken 및 dstToken을 가져옵니다. 다음 줄 986-997은 desc 구조에서 플래그 및 srcToken을 구성하여 무시할 수 있습니다.

그런 다음 _execute 함수를 실행하면 호출이 이루어지고 실행 상태가 확인됩니다. 실행자는 사용자에 의해 전달되므로 0 주소를 사용하여 이를 우회할 수 있습니다.

그런 다음 계약에서 dstToken의 잔액을 가져옵니다. desc에 플래그와 minReturnAmount를 구성하여 1007-1018행을 우회할 수 있습니다.

마지막으로 계약의 dstToken 잔액은 사용자가 제어하는 dstReceiver 주소로 전송됩니다.

위 단계를 통해 AggregationRouterV 5 계약에서 토큰을 인출하기 위해 스왑 함수에 전달된 매개변수를 구성할 수 있습니다.
집계RouterV 4
AggregationRouterV 4와 AggregationRouterV 5 사이에는 큰 차이가 없습니다 . AggregationRouterV 4에는 다음과 같이 구현되는 스왑 기능도 있습니다.

AggregationRouterV 5가 호출을 최적화하므로 AggregationRouterV 5와 동일한 방법을 사용하여 AggregationRouterV 4 계약에 저장된 토큰을 추출할 수 있다는 점을 제외하면 swap 함수의 구현은 AggregationRouterV 5와 동일하다는 것을 알 수 있습니다 .
요약하다
이 기사에서는 일부 탈중앙화 거래소 및 애그리게이터를 간략하게 소개하고 이들 중 가능한 차익 거래에 대해 논의합니다. 계약 코드 수준에서 차익 거래의 원리를 분석합니다. 그러나 실제로 성공할 수 있는지 여부는 여전히 GAS, 노드 속도 등
참고자료
회사 소개
Eocene Research에서는 블록체인에 대해 알고 있거나 모르는 모든 것 뒤에 숨어 있는 의도와 보안에 대한 통찰력을 제공하고 모든 개인과 조직이 당시에는 꿈도 꾸지 못했던 복잡한 질문에 답할 수 있도록 지원합니다.





