Cảnh báo rủi ro: Đề phòng huy động vốn bất hợp pháp dưới danh nghĩa 'tiền điện tử' và 'blockchain'. — Năm cơ quan bao gồm Ủy ban Giám sát Ngân hàng và Bảo hiểm
Tìm kiếm
Đăng nhập
简中
繁中
English
日本語
한국어
ภาษาไทย
Tiếng Việt
BTC
ETH
HTX
SOL
BNB
Xem thị trường
Xác định các cơ hội kinh doanh chênh lệch giá trong DeFi thông qua mã
Eocene
特邀专栏作者
2023-04-20 07:00
Bài viết này có khoảng 3018 từ, đọc toàn bộ bài viết mất khoảng 5 phút
Bài viết này sẽ phân tích các cơ hội chênh lệch giá mà một số sàn giao dịch phi tập trung và công cụ tổng hợp có thể có đối với mã hợp đồng.

Tổng quan

Tài chính phi tập trung (tiếng Anh: Decentralized Finance, thường được gọi là DeFi) là một loại hình tài chính được tạo ra trên chuỗi khối, không dựa vào các tổ chức tài chính như công ty môi giới, sàn giao dịch hay ngân hàng để cung cấp các công cụ tài chính mà sử dụng trí thông minh trên chuỗi khối để hợp đồng thực hiện các hoạt động tài chính. Có rất nhiều cơ hội chênh lệch giá trong DeFi, bao gồm nhưng không giới hạn ở thanh lý và chênh lệch giá chênh lệch. Bài viết này sẽ phân tích các cơ hội chênh lệch giá mà một số sàn giao dịch phi tập trung (DEX) và bộ tổng hợp (Aggregators) có thể có trên mã hợp đồng.

phân tích

Uniswap

phân tích

Uniswap V2 Router

Uniswap là một nền tảng giao dịch tiền điện tử phi tập trung áp dụng mô hình Nhà tạo lập thị trường tự động (AMM). Hiện tại có hai phiên bản phổ biến là Uniswap V2 và Uniswap V3. Chúng tôi sẽ lần lượt phân tích các cơ hội chênh lệch giá có thể có trong các phiên bản đó.

Trong Uniswap V2, người dùng thường tương tác với hợp đồng Pair và hợp đồng Factory thông qua hợp đồng Bộ định tuyến. Nói chung, Bộ định tuyến chỉ chuyển mã thông báo trong các giao dịch chứ không lưu trữ mã thông báo, tuy nhiên, do nhiều lý do, chẳng hạn như airdrop và lỗi chuyển, một số mã thông báo nhất định được lưu trữ trong hợp đồng Bộ định tuyến. Vậy làm thế nào để rút các token này?

Bằng cách phân tích mã của hợp đồng Uniswap V2 Router 02, người ta thấy rằng có một hàm removeLiquidityETHSupportingFeeOnTransferTokens:

Chức năng này được sử dụng để loại bỏ tính thanh khoản trong đó một trong các mã thông báo là WETH. Địa chỉ được chuyển vào khi hàm removeLiquidity được gọi nội bộ là địa chỉ(this), nghĩa là hai mã thông báo sẽ được chuyển đến hợp đồng Bộ định tuyến trước, và sau đó Hợp đồng bộ định tuyến sau đó chuyển hai mã thông báo đến địa chỉ đã chỉ định. Mặc dù số lượng WETH được chuyển ở đây được trả lại bởi removeLiquidity và không thể sửa đổi, nhưng số lượng Mã thông báo khác được chuyển là balanceOf(address(this)), là số dư của mã thông báo trong hợp đồng Bộ định tuyến.

Do đó, theo phân tích ở trên, chúng ta có thể có được một quy trình chênh lệch giá:

  • Người ta theo dõi rằng có các mã thông báo ERC 20 trong hợp đồng Bộ định tuyến 02;

  • Người ta theo dõi rằng có các mã thông báo ERC 20 trong hợp đồng Bộ định tuyến 02;

  • Gọi addLiquidityETH để thêm tính thanh khoản của mã thông báo ERC 20 và WETH;

Gọi removeLiquidityETHSupportingFeeOnTransferTokens để xóa tính thanh khoản.

  • giới hạn:

  • Nếu mã thông báo chưa có thanh khoản với WETH trước đó, nó sẽ mất một lượng nhỏ thanh khoản (MINIMUM_LIQUIDITY) khi thêm thanh khoản lần đầu tiên;

Uniswap V2 Pair

Không có phương pháp nào được tìm thấy để trích xuất WETH và ETH trong hợp đồng Bộ định tuyến 02.

Hợp đồng Uniswap V2 Pair, được gọi là pool thanh khoản, lưu trữ hai loại mã thông báo cung cấp tính thanh khoản. Vì hợp đồng Pair sử dụng dự trữ để ghi lại số dư thay vì balanceOf(địa chỉ(this)), nên ai đó đã trực tiếp chuyển thanh khoản do nhầm lẫn. Sẽ có sự khác biệt giữa số dư và dự trữ khi các mã thông báo vĩnh viễn được đưa vào hợp đồng và có một chức năng cân bằng lướt qua trong hợp đồng Cặp, chúng ta có thể gọi chức năng này để trích xuất các mã thông báo chênh lệch:

Có thể thấy rằng chức năng này sẽ chuyển các mã thông báo chênh lệch giữa số dư và dự trữ của hai mã thông báo thanh khoản trong nhóm thanh khoản đến địa chỉ cần gửi.

Ngoài hai mã thông báo này trong nhóm thanh khoản, cũng sẽ có các mã thông báo ERC 20 khác do chuyển sai, airdrop, v.v. Làm cách nào để rút các mã thông báo này?

Sau khi phân tích mã của hợp đồng Cặp, người ta thấy rằng phần mã thông báo này không thể rút được, ngoại trừ một trường hợp: khi mã thông báo LP của nhóm tồn tại trong nhóm thanh khoản.

Uniswap V3 SwapRouter

Khi điều này xảy ra, chúng ta có thể gọi chức năng ghi của hợp đồng Cặp để loại bỏ tính thanh khoản và lấy ra hai mã thông báo thanh khoản tương ứng:

Hợp đồng SwapRouter của Uniswap V3 cũng sẽ có tình huống tương tự như Bộ định tuyến Uniswap V2, có mã thông báo ERC 20 và ETH, nhưng may mắn thay, hợp đồng SwapRouter cung cấp một số chức năng để tạo điều kiện khai thác mã thông báo.

Để rút mã thông báo ERC 20, chúng ta có thể sử dụng hàm wipeToken:

Để rút ETH, chúng ta có thể sử dụng chức năng hoàn lạiETH:

Bạn cũng có thể gọi trực tiếp hàm unwrapWETH 9 để khôi phục WETH thành ETH và giải nén nó:

Trên đây là phân tích chênh lệch giá của hợp đồng Uniswap V3 SwapRouter.

SushiSwap

Sau khi phân tích mã của hợp đồng Nhóm Uniswap V3, người ta thấy rằng không có cách nào để trích xuất các mã thông báo khác trong hợp đồng và không có sự khác biệt giữa số dư và dự trữ trong hợp đồng Cặp Uniswap V2.

SushiSwap khởi đầu là một nhánh của Uniswap và sau đó phát triển thành một hệ sinh thái độc lập cung cấp nhiều sản phẩm và dịch vụ tài chính khác nhau.

SushiXSwap

Vì SushiSwap giống với Uniswap V2 nên phương thức chênh lệch giá nêu trên cho Uniswap V2 cũng có thể áp dụng cho SushiSwap.

SushiXSwap là một giao thức giao dịch toàn chuỗi dựa trên LayerZero do SushiSwap khởi chạy. Các mạng được hỗ trợ bao gồm Optimism, Arbitrum, Fantom, BNB Chain, Polygon và Avalanche. Người dùng có thể thực hiện các giao dịch xuyên chuỗi giữa các mạng và tài sản được hỗ trợ.

Làm cách nào để rút mã thông báo trong hợp đồng SushiXSwap?

Các chức năng chính trong SushiXSwap được triển khai thông qua chức năng cook, cung cấp một loạt các thao tác và danh sách các thao tác được hỗ trợ như sau:

Trong số đó có một hoạt động ACTION_DST_WITHDRAW_TOKEN, có mã được triển khai như sau:

Đầu tiên, giải mã dữ liệu được truyền vào chức năng cook, sau đó đánh giá xem số tiền có bằng 0 hay không. Nếu bằng 0, hãy đặt giá trị của số tiền thành số dư của mã thông báo ERC 20 của hợp đồng hoặc số dư của ETH. Cuối cùng gọi _transferTokens để chuyển token đến địa chỉ đã chỉ định:

Sushi BentoBox

Do đó, chúng ta chỉ cần xây dựng các hành động và dữ liệu được truyền vào chức năng nấu ăn, nghĩa là đặt các hành động thành ACTION_DST_WITHDRAW_TOKEN, xây dựng mã thông báo sẽ được chuyển, địa chỉ nhận và số lượng trong dữ liệu, sau đó chuyển mã thông báo vào hợp đồng SushiXSwap.

Sushi BentoBox là một thành phần trong hệ sinh thái SushiSwap. BentoBox là một sản phẩm tối ưu hóa tỷ lệ tài chính phi tập trung (DeFi) rất linh hoạt. Nói một cách đơn giản, nó là một nền tảng hợp đồng thông minh cho phép người dùng lưu trữ, vay và kiếm lãi. Mục đích chính của BentoBox là tối ưu hóa thu nhập của người dùng trong lĩnh vực DeFi.

Một số lượng lớn mã thông báo được lưu trữ trong hợp đồng BentoBox trên Ethereum, vậy có chỗ cho chênh lệch giá trong hợp đồng này không?

Trong hợp đồng BentoBox, người dùng có thể thực hiện các thao tác gửi tiền thông qua chức năng gửi tiền và việc thực hiện chức năng này như sau:<= _tokenBalanceOf(token).sub(total.elastic)。

Bạn có thể thấy rằng người dùng chuyển vào địa chỉ mã thông báo được chỉ định, địa chỉ ghi nợ, địa chỉ nhận, số lượng và số lượt chia sẻ. Trước tiên, hàm thực hiện một loạt kiểm tra, sau đó chuyển đổi số tiền hoặc lượt chia sẻ. Các điểm chính nằm trong các dòng 195-198, tại đây Đã kiểm tra: số tiền

Số dư của một token nhất định trong hợp đồng BentoBox được ghi lại bằng cách sử dụng total.elastic, tương tự như dự trữ trong hợp đồng Uniswap Pair, trong một số trường hợp sẽ có sự khác biệt với _tokenBalanceOf(token), chúng ta có thể sử dụng các đặc điểm của chức năng gửi tiền tại đây và chuyển đổi số tiền chênh lệch thành số dư của chính bạn trong hợp đồng BentoBox.

DODO

Do đó, khi chúng tôi chuyển tham số, chúng tôi đặt mã thông báo làm địa chỉ mã thông báo có chênh lệch, đặt giá trị của số tiền làm chênh lệch, sau đó đặt from làm địa chỉ của hợp đồng BentoBox và đặt thành địa chỉ của chính chúng tôi. , do Địa chỉ là địa chỉ của hợp đồng BentoBox nên sẽ không có chuyển nhượng, nhưng giá trị của total.elastic và _tokenBalanceOf(token) sẽ được cân bằng và chuyển thành số dư của địa chỉ trong hợp đồng.

DODO là một nền tảng giao dịch phi tập trung sử dụng thuật toán Nhà tạo lập thị trường chủ động (PMM) ban đầu để cung cấp tính thanh khoản trên chuỗi hiệu quả cho các tài sản Web3. DODO không chỉ tự cung cấp thanh khoản mà còn tổng hợp thanh khoản từ các sàn giao dịch khác.

DODO V2 Proxy 02 

DODO có một loạt hợp đồng, trong đó người dùng sẽ trao đổi mã thông báo thông qua hợp đồng DODO V2 Proxy 02. Tương tự như hợp đồng Bộ định tuyến Uniswap, hợp đồng này cũng có một số mã thông báo vì nhiều lý do, chúng tôi nên rút các mã thông báo này như thế nào?

Có một chức năng hoán đổi bên ngoài trong hợp đồng DODO V2 Proxy 02, được sử dụng để gọi nền tảng bên ngoài do DODO tổng hợp để trao đổi, chẳng hạn như 0x, 1inch và mã được triển khai như sau:

Các dòng 1719-1721 đang kiểm tra các tham số đến và sau đó dòng 1724 đang kiểm tra xem fromToken có phải là ETH hay không. Nếu không, mã thông báo của người gọi sẽ được chuyển sang hợp đồng và sau đó được ủy quyền. Sau khi phân tích mã của hợp đồng DODOAPPROVE Sau đó, nó đã phát hiện ra rằng chỉ cần đặt fromTokenAmount thành 0 để bỏ qua:

Sau đó, hợp đồng bên ngoài sẽ được gọi sẽ được xác minh và chỉ những người trong danh sách trắng mới có thể được gọi. Người dùng có thể kiểm soát cả swapTarget và calldataConcat ở đây, vì vậy bạn có thể đặt swapTarget thành địa chỉ hợp đồng là 0x hoặc 1inch, sau đó đặt calldataConcat để Mã hóa chức năng xem của hợp đồng, để giá trị được trả về là đúng, cũng có thể vượt qua xác minh yêu cầu tiếp theo:

Thông qua các bước trên, chúng tôi có thể trích xuất mã thông báo ERC 20 và ETH trong hợp đồng DODO V2 Proxy 02.

1inch

tiêu đề phụ

1inch là một công cụ tổng hợp trao đổi phi tập trung (DEX), tập hợp thanh khoản từ nhiều DEX để cung cấp cho người dùng giá trao đổi mã thông báo tốt nhất. Bằng cách tích hợp thanh khoản từ các nguồn khác nhau, 1inch giúp người dùng tối ưu hóa giao dịch và tìm giá tốt nhất trên các nền tảng. Hợp đồng thông minh của 1inch tự động giao dịch giữa các sàn giao dịch phi tập trung khác nhau, cho phép người dùng dễ dàng nhận được mức giá tốt nhất và mức trượt giá thấp nhất giữa các sàn giao dịch khác nhau. Ngoài ra, 1inch cũng cung cấp các chức năng khác như khai thác thanh khoản và mã thông báo quản trị.

AggregationRouterV 5 

Hợp đồng chính của 1inch là AggregationRouter, hiện tại các phiên bản V 4 và V 5 được sử dụng nhiều hơn, hai hợp đồng này cũng có một số mã thông báo vì nhiều lý do, chúng ta có thể trích xuất các tham số trong hợp đồng bằng cách xây dựng các tham số trong hàm gửi mã thông báo.

Có một chức năng hoán đổi trong hợp đồng AggregationRouterV 5 và cách triển khai của nó như sau:

Sau khi xác minh minReturnAmount trong desc, lấy srcToken và dstToken từ desc và có thể bỏ qua các dòng tiếp theo 986-997 bằng cách xây dựng các cờ và srcToken trong cấu trúc desc:

Sau đó thực thi hàm _execute, nơi lệnh gọi sẽ được thực hiện và trạng thái thực thi sẽ được xác minh.Vì người thực thi được chuyển vào bởi người dùng, chúng ta có thể sử dụng địa chỉ 0 để bỏ qua nó tại đây:

Sau đó lấy số dư của dstToken trong hợp đồng. Các dòng 1007-1018 chúng ta có thể tạo cờ và minReturnAmount trong desc để bỏ qua:

Cuối cùng, số dư dstToken trong hợp đồng sẽ được chuyển đến địa chỉ dstReceiver, địa chỉ này cũng do người dùng kiểm soát:

AggregationRouterV 4 

Thông qua các bước trên, chúng ta có thể xây dựng các tham số được truyền cho chức năng hoán đổi để rút mã thông báo trong hợp đồng AggregationRouterV 5.

tiêu đề phụ

tóm tắt

tóm tắt

Bài viết này giới thiệu ngắn gọn về một số sàn giao dịch và công cụ tổng hợp phi tập trung, đồng thời thảo luận về chênh lệch giá có thể có giữa chúng và phân tích nguyên tắc chênh lệch giá từ cấp mã hợp đồng, nhưng thành công trong thực tế cũng liên quan đến nhiều yếu tố, chẳng hạn như GAS, tốc độ nút, v.v.

về chúng tôi

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.

tìm hiểu thêm:Website | Medium | Twitter

trao đổi
ETH
hợp đồng thông minh
tài chính
DeFi
DEX
Uniswap
1inch
DODO
Chào mừng tham gia cộng đồng chính thức của Odaily
Nhóm đăng ký
https://t.me/Odaily_News
Tài khoản chính thức
https://twitter.com/OdailyChina