Trong 'rừng tối' của Solana, khi bạn nhận được tín hiệu cập nhật tài khoản từ mô-đun Scout, cuộc cạnh tranh đã bước vào những mili giây cuối cùng. Nếu bạn vẫn cần gửi giao dịch trở lại nút RPC để 'mô phỏng (Simulate)' nhằm lấy báo giá, thì khi bạn nhận được kết quả, cơ hội thường đã bị những đối thủ thực hiện tính toán ngay tại chỗ giành lấy.

Một Searcher chuyên nghiệp thực sự sẽ không bao giờ chờ phản hồi từ RPC. Họ sẽ duy trì một bản sao trạng thái AMM trong bộ nhớ cục bộ và ngay lập tức tính toán giá tối ưu bằng mô hình toán học ngay khi nhận được dữ liệu nhị phân.

Bài viết này sẽ phân tích cách xây dựng động cơ định giá cục bộ hiệu quả cho Raydium (CPMM) và Orca (CLMM).

1. Tư tưởng cốt lõi: Tính toán cục bộ vs. Mô phỏng RPC

1.1 Tại sao chọn định giá cục bộ?

  • Độ trễ cực thấp: Mô phỏng RPC thường mất 50ms-200ms, trong khi tính toán toán học thuần túy cục bộ chỉ mất vài micro giây.

  • Khả năng song song: Tính toán cục bộ không tiêu tốn tài nguyên của nút RPC, có thể nhanh chóng thực hiện định giá toàn bộ hàng ngàn đường dẫn套利 trong tích tắc.

  • Tính xác định: Bằng cách phân tích dữ liệu tài khoản nguyên bản (Account Data), bạn có thể kiểm soát trạng thái ở cấp độ sâu hơn so với mô phỏng.

2. Raydium (CPMM): Nghệ thuật của tích hằng số

Vòng quỹ tiêu chuẩn của Raydium tuân theo công thức kinh điển x×y=k. Mặc dù logic đơn giản, nhưng trong triển khai kỹ thuật cần xử lý sai lệch nhỏ về độ chính xác và phí.

2.1 Công thức báo giá cốt lõi

Trong kịch bản có phí, công thức tính phiên bản số nguyên của amount_out là:

  1. Đầu vào có phí: AmountInwith_fee = AmountIn × (FeeDenominator − FeeNumerator)

  2. Tính toán đầu ra: AmountOut = AmountInwith_fee × Reserveout / (Reservein × FeeDenominator + AmountInwith_fee)

2.2 Cuộc chiến độ chính xác: Tính cần thiết của U256

Trên Solana, số lượng token thường là u64. Nhưng khi tính toán tử số (Numerator) theo công thức trên, việc nhân hai số u64 lớn sẽ ngay lập tức gây tràn bộ nhớ.

  • Giải pháp: Giới thiệu U256 ở tầng tính toán trung gian. Mặc dù thư viện chính thức của Rust không cung cấp trực tiếp, nhưng thông qua macro uint hoặc thư viện primitive-types, chúng ta có thể đảm bảo độ chính xác tuyệt đối trong các tình huống biến động cực cao (đầu vào lớn).

3. Orca Whirlpool (CLMM): Phân tích tinh vi về dòng chảy tập trung

So với CPMM, mô hình dòng chảy tập trung (CLMM) của Orca phức tạp hơn nhiều. Nó không chỉ liên quan đến giá mà còn đến Tick (khoảng giá) và độ sâu dòng chảy.

3.1 Cách biểu diễn giá: Q64.64 sqrtPrice

Orca sử dụng giá căn bậc hai (sqrtPrice) và lưu trữ dưới dạng số dấu phẩy động Q64.64.

  • Công thức: Price = (sqrtPriceX64^264)^2

  • Trong quá trình phân tích, chúng ta cần xử lý số nguyên siêu lớn 128 bit, bằng cách sử dụng toán tử dịch bit để trích xuất giá trị thực sự của giá.

3.2 Phân tích nhanh: Phương pháp cắt Offset

Cấu trúc tài khoản Whirlpool của Orca rất lớn (bao gồm nhiều nhóm phần thưởng, tham số phí, v.v.), nếu sử dụng giải mã đầy đủ (Borsh Deserialize), tổn thất hiệu suất sẽ rất lớn.
Giải pháp tối ưu công nghiệp:
Trực tiếp xác định vị trí bằng Offset (độ lệch) trên dữ liệu nhị phân tài khoản. Vì cấu trúc quỹ là cố định, chúng ta có thể cắt đoạn và đọc trực tiếp các byte quan trọng:

  • data[49..65] -> Dòng chảy (Liquidity)

  • data[65..81] -> Giá (sqrtPrice)

  • data[81..85] -> Tick hiện tại
    Phương pháp này nhanh hơn 10 lần so với phân tích toàn bộ.

4. Thiết kế kiến trúc: Tầng báo giá Quote

Để chiến lược (Strategy) không cần quan tâm đến sự khác biệt toán học giữa các DEX khác nhau, chúng ta cần xây dựng một động cơ báo giá thống nhất:

flowchart LR
RawData[Data tài khoản nguyên bản] -->|Phân tích| AMMState[Ảnh chụp bộ nhớ AMM]
AMMState -->|Số tiền đầu vào| LocalMath[Mô hình toán học cục bộ]
LocalMath -->|Kết quả đầu ra| AmountOut[Thông tin báo giá cấu trúc]

subgraph "Tầng tính toán cục bộ"
LocalMath
AMMState
end

Động cơ này sẽ duy trì trạng thái cân bằng kho (Vault Balance) của quỹ theo thời gian thực. Khi Scout phát hiện bất kỳ thay đổi nào ở một kho nào đó, động cơ báo giá sẽ lập tức tính toán lại toàn bộ đường dẫn báo giá cho cặp token này.

5. Tối ưu hóa kỹ thuật: Tận dụng từng chi tiết để tăng tốc độ

  1. Tính toán không cấp phát bộ nhớ: Trong quá trình tính toán尽量 tránh phân bổ bộ nhớ (Heap Allocation), sử dụng các kiểu dữ liệu nguyên thủy trên ngăn xếp (stack).

  2. Yêu cầu RPC theo lô: Mặc dù định giá là cục bộ, nhưng số dư kho vẫn cần đồng bộ. Sử dụng getMultipleAccounts để lấy đồng thời tất cả trạng thái Vault liên quan, giảm số lần giao tiếp mạng.

  3. Tiền tính toán: Đối với các tham số cố định như tỷ lệ phí, hãy hoàn thành việc phân tích trong giai đoạn khởi động lạnh, đừng tính toán lặp lại trong đường dẫn nóng (Hot Path) mỗi mili giây.

6. Trình diễn kỹ thuật: Logic báo giá CPMM (phiên bản Python)

Mặc dù môi trường sản xuất theo đuổi hiệu suất tối đa của Rust, nhưng logic toán học cốt lõi có thể được minh họa rõ ràng bằng Python:

# Mô phỏng tính toán báo giá cục bộ hiệu suất cao
def tính_toán_ước_lượng_local(số_lượng_đầu_vào, res_in, res_out, tỷ_lệ_phí=0.0025):
"""
Báo giá cục bộ CPMM: x * y = k
"""
# Mô phỏng tính toán U256, tránh tràn
tử_số_phí = int(tỷ_lệ_phí * 10000)
mẫu_số_phí = 10000

# 1. Tính toán đầu vào hiệu quả sau khi trừ phí
số_lượng_đầu_vào_có_phí = số_lượng_đầu_vào * (mẫu_số_phí - tử_số_phí)

# 2. Tính toán đầu ra theo công thức
tử số = số lượng đầu vào có phí * res_out
mẫu số = (res_in * mẫu phí) + số lượng đầu vào có phí

số lượng đầu ra = tử số // mẫu số

# 3. Tính toán tác động giá (Price Impact)
tác động giá = (số lượng đầu ra / res_out) nếu res_out > 0 mà không thì 1

trả về số lượng đầu ra, tác động giá

# Mô phỏng: Đổi 1 SOL thành USDC, quỹ có 1000 SOL / 100.000 USDC
out, impact = tính_toán_ước_lượng_local(1 10*9, 1000 10*9, 100000 10*6)
in(f"[*] Dự đoán đầu ra: {out / 10**6} USDC")
in(f"[*] Tác động giá: {impact:.4%}")

7. Kết luận: Tính toán là lợi nhuận

Trong thế giới Solana MEV, khả năng định giá cục bộ quyết định cấp độ cạnh tranh của bạn.

  • Người chơi sơ cấp phụ thuộc vào mô phỏng RPC, chỉ có thể ăn phần còn lại.

  • Người chơi trung cấp triển khai định giá cục bộ CPMM.

  • Người chơi cao cấp có thể phân tích chính xác từng Tick của CLMM và kết hợp Jito để thực hiện套利 nguyên tử.

Thông báo bước tiếp theo

Bây giờ chúng ta đã có 'cái mắt (Scout)' và 'bộ não (AMM Math)', bước tiếp theo là phần thú vị nhất: Làm thế nào để xây dựng chiến lược套利 xuyên DEX (Strategy)? Trước tình huống phức tạp với nhiều đường đi, nhiều giao thức, làm sao để tìm ra con đường sinh lời nhất?

Bài viết được viết bởi Levi.eth. Trên Solana, mỗi công thức toán học được tối ưu hóa đều có thể chuyển thành lợi nhuận thực tế trên chuỗi.

JTO
JTOUSDT
0.3954
-4.21%
SOL
SOLUSDT
141.93
-1.29%