LapTrinhBlockchain

Chia sẻ kiến thức về Lập Trình Blockchain

Kiến thức Blockchain, Nâng cao Kiến thức

Tìm hiểu Bot thực hiện nhiều giao dịch cùng lúc trên Base: 0xCF6A86850303F00064dE90e923490adA4dA37ca1

Tìm hiểu Bot spam giao dịch trên Base: 0xCF6A86850303F00064dE90e923490adA4dA37ca1

Tìm hiểu Bot spam giao dịch trên Base: 0xCF6A86850303F00064dE90e923490adA4dA37ca1

Chia sẻ bài viết
5
(88)

Bài viết này, chúng ta sẽ tìm hiểu về bot giao dịch 0xCF6A86850303F00064dE90e923490adA4dA37ca1 trên mạng lưới Base Network.

Đánh giá hành vi và dự đoán cách thực hiện Bot

Sau khi tìm hiểu bot này thì thấy cứ 1 vài phút sẽ có một giao dịch: 0xe4b96e577af67a8c94865af58ab56d77f752cfa6a1bdb21f548ab367a882909c, 0xc30f82e3632cd711b3b11bbd1a8b2d2e9cc55765c18156e9d00770752923f0fd, 0x031f658e46e104bbd0e4ef66c81d773bee5eea0e2dcda8e674407de1968dea00

Qua tìm hiểu các giao dịch thì nhận thấy:

  • Các giao dịch đều tiêu thụ rất nhiều Gas, Gas Used sử dụng từ khoảng 13M đến 26M. Điều này chứng tỏ bot tính toán rất nhiều => Khả năng cao scan đồng thời nhiều path trên Blockchain.
  • Gas Price cực nhỏ, khoảng 0.00001 Gwei => Do đó mặc dù execution nhiều nhưng phí trên L2 khá thấp. Phí chủ yếu là phí trên L1.
  • Dữ liệu đầu vài Calldata rất thấp, chỉ vài byte => Tối ưu phí trên L1
  • Hầu hết các giao dịch đều hiển thị biểu tượng Warnning và có thông báo “Although one or more Error Occurred [out of gas] Contract Execution Completed” => Điều này chứng tỏ contract có cài đặt cơ chế revert cho từng giao dịch đơn lẻ, giao dịch tổng thể vẫn thành công. Ví dụ nếu quét 100 path, thì những path đầu có cơ hội thực hiện transfer thì sẽ tốn nhiều Gas, khi đó các path cuối sẽ không đủ gas.
  • Xem chi tiết dữ liệu thì contract chính thực hiện giao dịch là 0xa1b39786882de81dc4309e406911d262761c3c82 => Vậy contract 0xCF6A86850303F00064dE90e923490adA4dA37ca1 giống như dạng Multicall.

Xem xét chi tiết giao dịch 0x031f658e46e104bbd0e4ef66c81d773bee5eea0e2dcda8e674407de1968dea00

Bây giờ chúng ta debug chi tiết giao dịch 0x031f658e46e104bbd0e4ef66c81d773bee5eea0e2dcda8e674407de1968dea00. Sau khi decode giao dịch thấy:

  • Dữ liệu gọi hàm liquidity(), slot0(), tickBitmap(), ticks(), getReserves() => Gồm cả hàm AMM V2 và V3
  • Với các Pool V3, hàm ticks()tickBitmap() được gọi rất nhiều, mỗi hàm phải được gọi tới hơn 900 lần (tickBitmap: 941 lần, ticks: 640 lần)
  • Các Pool V2, nó gọi hàm getAmountOut() của Router để tính amountOut
  • Với các Pool V3, nó gọi hàm quoteExactInputSingle() để tính amountOut => Mình nhớ rõ ràng hàm này không phải là hàm view thì sao có thể gọi được => Kiểm tra kỹ hơn hóa ra nó gọi tới contract UniswapV3StaticQuoter => Hóa ra có dự án xây dựng Static Quoter để tính amountOut: uniswap-v3-static-quoter. Một số dự án không có Static Quoter sẽ dùng trực tiếp Quoter của dự án gốc như PancakeV3.
  • Các sub trade trong giao dịch bị revert hầu hết đều “Out of gas” => Xem trong gethtrace2 sẽ thấy. Thường các lệnh “out of gas” này do truy vấn tới các pool v3 với quá nhiều số lần lặp để tính amountOut.
  • Giao dịch gồm nhiều trade, mỗi trade nó gọi hàm getAmountOut()quoteExactInputSingle() để kiểm tra, có lãi mới trade.
  • AmountIn fix cứng là 400 USDC, 0.18579422979 WETH => Khả năng fix cứng là 400$, lượng token WETH sẽ được tính bằng 400$/PriceWeth.
  • Thấy có 2 lệnh trên cùng path: USDbC-WETH-USDbC đều cho lợi nhuận => Do fix amount chứ không phải tính amount tối ưu, do đó có thể có nhiều lần trade 1 path đều có lợi nhuận
  • Trong lệnh fransferFrom() ở cuối cùng sẽ chuyển profit sang ví 0xc2B3e647Fb8Ede1FA8Bb513C62D4D305AE9d7028
Với Pool V3, hàm ticks() và tickBitmap() được gọi rất nhiều
2 lệnh trên cùng path: USDbC-WETH-USDbC
Lệnh chuyển lợi nhuận về ví

Xem xét chi tiết giao dịch 0xc30f82e3632cd711b3b11bbd1a8b2d2e9cc55765c18156e9d00770752923f0fd

Bây giờ chúng ta debug chi tiết giao dịch 0xc30f82e3632cd711b3b11bbd1a8b2d2e9cc55765c18156e9d00770752923f0fd. Sau khi decode giao dịch thấy về cơ bản gần giống giao dịch trên, có một số khác:

  • AmountIn fix cứng là 60 USDC, 0.00147839952 tBTC, 0.02780288137 WETH=> Khả năng fix cứng là 400$, lượng token WETH sẽ được tính bằng 400$/PriceWeth.

Kiểm tra xem balance của địa chỉ nhận profit 0xc2B3e647Fb8Ede1FA8Bb513C62D4D305AE9d7028

Bây giờ chúng ta truy vấn balance từ quá khứ đến hiện tại của ví 0xc2B3e647Fb8Ede1FA8Bb513C62D4D305AE9d7028. Để truy vấn balance trong quá khứ chúng ta sẽ dùng Hardhat để tạo một forking mainnet từ block mong muốn, chi tiết xem: Hướng dẫn tạo các “Forking mainnet” để sử dụng trên local cho các mạng dạng EVM

Ngoài check lại địa chỉ trên ta thấy địa chỉ trên bắt đầu có giao dịch từ block 6566780, block hiện tại là 7843209, đã qua 1,276,429 block. Cứ 2s sẽ có 1 block, vậy 1 ngày sẽ có 43,200 block.

Bạn nhớ rằng API của Web3 có chỗ trợ call lên blockchain để lấy thông tin ở 1 blocknumber bất kỳ:

Sau khi lấy dữ liệu thì thấy trong vòng 1 tháng, lợi nhuận đâu đó khoảng 1369$. Chi tiết dữ liệu xem ảnh dưới:

Lợi nhuận chủ yếu ở các đồng stable coin
Số liệu profit sau 1 tháng
Ảnh chụp balance theo từng ngày
Lợi nhuận theo ngày, có một số ngày âm

Tính thêm đến hết tháng 12/2023 thì nói chung đâu đó lợi nhuận khoảng hơn 1000$ / tháng.

Bài viết này có hữu ích với bạn?

Kích vào một biểu tượng ngôi sao để đánh giá bài viết!

Xếp hạng trung bình 5 / 5. Số phiếu: 88

Bài viết chưa có đánh giá! Hãy là người đầu tiên đánh giá bài viết này.

Trả lời

Giao diện bởi Anders Norén