---
title: Token swap transaction 분석
tags:
description:
---
# Swap transaction 분석
* 메타마스크에 있는 스왑기능을 이용해 USDC를 ETH로 스왑한 transaction을 분석해보자.
* etherscan에 transaction hash를 검색해 detail을 어떻게 보는지 예제로 이해해보기.
## Overview

* Highlighted event를 표시해 준다.
주요 event는 Uniswap V3를 통해 300USDC를 0.144ETH로 swap 한것.
## Transaction 분석

* From 에는 내 지갑 주소가 적혀있고 해당 주소에서 Metamask: Swap Router라는 이름의 contract를 호출해 transaction을 내보냈다. 세부내용까지 확인할 수 있다.
1. 0.144WETH가 0xExchange Proxy에 transfer 됨.
1-1. 0xExchange Proxy가 무엇인지 contract를 타고가 보니 아래와 같이 contract에 링크되어있는 사이트를 발견! ( [0x.org](https://www.0x.org/) )

해당 사이트를 들어가 보니 아래와 같은 문구를 통해서 0x는 Defi 관련 API를 제공해주는 solution이라는 걸 알수 있다.

최적의 가격과 슬리피지를 찾아주는 녀석인 것 같다.

토큰 스왑시 code를 간결하게 해주는 API라고 한다.

1-2. 그럼 Proxy가 무엇이냐?
[Proxy Contract 관련 medium글](https://medium.com/onther-tech/upgradeable-smart-contract-applications-using-proxy-patterns-2053a5780287)
이미 배포된 컨트랙트는 새로 업그레이드 할 수 없지만 Proxy Contract 아키텍쳐를 이용하면 가능하게 된다고 한다.

유저가 요청한 message call을 Logic contract로 redirect시키는 녀석이다. 최신의 logic contract 주소와 버전 정보를 데이터로 가지고 있다.
2. 위 정보들을 조합해 유추해 보았을 때 0x의 API를 통해 최적의 가격을 찾고 300USDC에 해당하는 가치의 0.144WETH를 Proxy로 전송하고 Proxy는 logic contract를 호출하는 것으로 이해할 수 있다.
3. MetaMask: DS Proxy로 0.0012ETH가 전송되는것으로 보아 logic contract에서 메타마스크 쪽으로 수수료를 보내는 것으로 보인다. 메타마스크 라우터를 사용하는데 드는 비용인 것 같다.
4. 최종적으로 logic contract에서 내 주소로 swap된 ETH를 전송한다.
## Tokens Transferred

1. 내 주소에서 logic contract로 300USDC가 전송

2. Uniswap V3의 USDC-WETH pool에서 0x: Exchange Proxy로 0.144WETH를 전송
3. logic contract에서 Uniswap V3의 USDC-WETH pool로 300USDC 전송
## 참고 사이트
* [etherscan에서의 swap transaction](https://etherscan.io/tx/0xcef55a2811d71e980392748d02a0780d65edd0af763b323ceee46b18ef4a2f8e)
* [Proxy Contract 관련 medium글](https://medium.com/onther-tech/upgradeable-smart-contract-applications-using-proxy-patterns-2053a5780287)
* [Defi API solution 0x.org](https://www.0x.org/)
<style>
html, body, .ui-content {
background-color: #333;
color: #ddd;
}
.markdown-body h1,
.markdown-body h2,
.markdown-body h3,
.markdown-body h4,
.markdown-body h5,
.markdown-body h6 {
color: #ddd;
}
.markdown-body h1,
.markdown-body h2 {
border-bottom-color: #ffffff69;
}
.markdown-body h1 .octicon-link,
.markdown-body h2 .octicon-link,
.markdown-body h3 .octicon-link,
.markdown-body h4 .octicon-link,
.markdown-body h5 .octicon-link,
.markdown-body h6 .octicon-link {
color: #fff;
}
.markdown-body img {
background-color: transparent;
}
.ui-toc-dropdown .nav>.active:focus>a, .ui-toc-dropdown .nav>.active:hover>a, .ui-toc-dropdown .nav>.active>a {
color: white;
border-left: 2px solid white;
}
.expand-toggle:hover,
.expand-toggle:focus,
.back-to-top:hover,
.back-to-top:focus,
.go-to-bottom:hover,
.go-to-bottom:focus {
color: white;
}
.ui-toc-dropdown {
background-color: #333;
}
.ui-toc-label.btn {
background-color: #191919;
color: white;
}
.ui-toc-dropdown .nav>li>a:focus,
.ui-toc-dropdown .nav>li>a:hover {
color: white;
border-left: 1px solid white;
}
.markdown-body blockquote {
color: #bcbcbc;
}
.markdown-body table tr {
background-color: #5f5f5f;
}
.markdown-body table tr:nth-child(2n) {
background-color: #4f4f4f;
}
.markdown-body code,
.markdown-body tt {
color: #eee;
background-color: rgba(230, 230, 230, 0.36);
}
a,
.open-files-container li.selected a {
color: #5EB7E0;
}
</style>