Một pool nằm trong 60 dòng đầu bảng khối lượng 24 giờ của GeckoTerminal trên BNB Chain. Bảng ghi nhận 59.958.000 đô khối lượng.
Đọc số dư của pool đó tại 13 mốc trải đều quanh cùng khoảng 24 giờ mà con số kia nói tới: cả 13 mốc, phía WBNB đều nằm trong khoảng 0,00261 – 0,00265 WBNB, tức khoảng 1,6 đô.
Hỏi router của chính PancakeSwap: bán lượng token được chính pool đó định giá 10.000 đô vào đó thì đổi được bao nhiêu? Nó báo 1,58 đô.
Không phải chuyện riêng lệnh lớn
Với lượng token được pool định giá 100 đô, router cũng chỉ báo 1,55 đô. Cửa ra bị chặn ở toàn bộ lượng USDT hoặc WBNB đang nằm trong pool: đổ vào bao nhiêu token cũng không vượt qua chỗ đó.
Hai pool khác trong 60 dòng đầu cũng vậy. Với lượng token được chính từng pool định giá 1.000 đô, router báo 6,55 đô và 8,87 đô. Ba dòng này cộng lại là 83,9 triệu đô khối lượng 24 giờ trên bảng.
| Pool | Bảng ghi khối lượng 24h | 100 đô → | 1.000 đô → | 10.000 đô → |
|---|---|---|---|---|
| SH / WBNB | 59.958.000 đô | 1,5524 đô | 1,5744 đô | 1,5767 đô |
| CCSC / USDT | 19.950.652 đô | 6,1873 đô | 6,5531 đô | 6,5921 đô |
| AXIOM / WBNB | 4.005.249 đô | 8,2111 đô | 8,8681 đô | 8,9396 đô |
Phép đo có hỏng không
Cùng phép hỏi đó trên một pool lớn của chính bảng — USDT/WBNB — cho ra 997,4758 đô trên 1.000, tức 99,75%, mức hụt rất gần phần phí 0,25%. Phép hỏi này trả về gần trọn giá trị đầu vào khi pool có lượng USDT hoặc WBNB lớn. Vậy kết quả vài đô ở ba pool trên không phải do cách hỏi luôn cho ra số nhỏ.
Cách tự kiểm
Một pool chỉ trả được thứ nó đang giữ. Con số dưới đây không phải desk tự tính: nó là báo giá trả thẳng từ getAmountsOut() của router PancakeSwap V2, hỏi tại đúng block.
Đây là báo giá theo trạng thái pool, không phải một giao dịch đã chạy. Nếu token có cơ chế thu phí hoặc hạn chế khi bán, lệnh thật có thể ra khác; bài chưa đo lớp đó.
curl -sS https://bsc-mainnet.public.blastapi.io -H 'content-type: application/json' -d '{"jsonrpc":"2.0","id":1,"method":"eth_call","params":[{"to":"0x10ed43c718714eb63d5aa57b78b54704e256024e","data":"0xd06ca61f00000000000000000000000000000000000000000cdfcc396f9b090000000000000000000000000000000000000000000000000000000000000000000000000040000000000000000000000000000000000000000000000000000000000000000200000000000000000000000000000000da8d7b5f298ecaf396d6b8602ecbf8169002ee84000000000000000000000000bb4cdb9cbd36b01bd1cbaebf2de08d9173bc095c"},"0x6f67b0e"]}'
Nó trả về 2612402845449776, tức 0,002612402845449776 WBNB. Quy ra đô theo giá 603,53 đô một WBNB suy từ chính pool đối chứng: 1,5767 đô.
Lượng token đầu vào đó ở đâu ra. Hỏi số dư hai bên tại cùng block bằng getReserves(), tức đổi data thành 0x0902f1ac và to thành địa chỉ pool: pool giữ 0,002612815831046279 WBNB và 628.301,168919335 SH. Chia hai số đó ra giá một SH: 0,002612815831046279 / 628.301,168919335 = 4,158540458456043e-09 WBNB. Nhân với 603,53 được 2,509803922892e-06 đô một SH. Lấy 10.000 chia cho nó ra đúng 3.984.374.997,899152 SH — chính là lượng nằm trong lệnh trên.
Mười ba block đã đo: 0x6f38d15 0x6f3cb94 0x6f40a14 0x6f44893 0x6f48713 0x6f4c592 0x6f50411 0x6f54291 0x6f58110 0x6f5bf90 0x6f5fe0f 0x6f63c8f 0x6f67b0e. Giữ nguyên lượng SH trong lệnh trên và chỉ đổi block: qua cả 13 mốc báo giá nằm trong dải 1,5767 – 1,5969 đô.
Kiểm loại pool, vì cả cách tính dựa vào nó: đổi to thành địa chỉ pool và data thành 0xc45a0155. Cả ba pool, cộng pool đối chứng và chính router, đều trả về cùng một địa chỉ 0xca143ce3…0c73.
Kiểm máy chủ có đọc đúng block không. Hai block khác nhau được phép cho ra cùng một số dư nếu giữa chúng không có gì xảy ra, nên phải dùng một pool đã biết là có đổi: 牛来/USDT 0x6df7a84b…4136 phải trả 851.345,175565 USDT ở block 0x6f4c592 và 0,019271 USDT ở block 0x6f67b0e.
Điều gì làm bài này sai
Bốn ngưỡng, ghi trước khi đăng.
- Chạy lệnh trên tại block 116.816.654 mà router trả về khác đúng con số 2612402845449776 — số này tất định tại một block cố định, nên không có dung sai nào cả.
- Dựng lại lượng token đầu vào từ hai số dư in ở trên mà không ra đúng 3.984.374.997,899152 SH.
- Phép hỏi trên
USDT/WBNBcho ra ngoài dải 99,50% – 99,75%. Mức 99,75% là cao nhất có thể về lý thuyết vì phí đúng 0,25%; rơi dưới 99,50% ở mức 1.000 đô nghĩa là phép hỏi đang sai chứ không phải pool nông. - Một trong ba pool trả
factory()khác0xca143ce3…0c73, tức nó không thuộc loại pool mà bài mô tả.
Sai chỗ nào desk sửa ngay tại chỗ đó.
Không phải lời khuyên đầu tư. Số đo tại thời điểm ghi trong bài và có thể đã thay đổi.