--- title: Token swap transaction 분석 tags: description: --- # Swap transaction 분석 * 메타마스크에 있는 스왑기능을 이용해 USDC를 ETH로 스왑한 transaction을 분석해보자. * etherscan에 transaction hash를 검색해 detail을 어떻게 보는지 예제로 이해해보기. ## Overview ![](https://i.imgur.com/CZDh0V8.png) * Highlighted event를 표시해 준다. 주요 event는 Uniswap V3를 통해 300USDC를 0.144ETH로 swap 한것. ## Transaction 분석 ![](https://i.imgur.com/ON1rSsy.png) * From 에는 내 지갑 주소가 적혀있고 해당 주소에서 Metamask: Swap Router라는 이름의 contract를 호출해 transaction을 내보냈다. 세부내용까지 확인할 수 있다. 1. 0.144WETH가 0xExchange Proxy에 transfer 됨. 1-1. 0xExchange Proxy가 무엇인지 contract를 타고가 보니 아래와 같이 contract에 링크되어있는 사이트를 발견! ( [0x.org](https://www.0x.org/) ) ![](https://i.imgur.com/0Kqv8Pt.png) 해당 사이트를 들어가 보니 아래와 같은 문구를 통해서 0x는 Defi 관련 API를 제공해주는 solution이라는 걸 알수 있다. ![](https://i.imgur.com/1zmhFSu.png) 최적의 가격과 슬리피지를 찾아주는 녀석인 것 같다. ![](https://i.imgur.com/LHmlMvq.png) 토큰 스왑시 code를 간결하게 해주는 API라고 한다. ![](https://i.imgur.com/v4R6jvk.png) 1-2. 그럼 Proxy가 무엇이냐? [Proxy Contract 관련 medium글](https://medium.com/onther-tech/upgradeable-smart-contract-applications-using-proxy-patterns-2053a5780287) 이미 배포된 컨트랙트는 새로 업그레이드 할 수 없지만 Proxy Contract 아키텍쳐를 이용하면 가능하게 된다고 한다. ![](https://i.imgur.com/vLV2iOU.png) 유저가 요청한 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 ![](https://i.imgur.com/t0K2lj3.png) 1. 내 주소에서 logic contract로 300USDC가 전송 ![](https://i.imgur.com/l3uhnTs.png) 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>