
Tắc nghẽn Solana: Cách gửi giao dịch Solana hiệu quả nhất
Cạnh tranh trong mọi giao dịch với Sender, dịch vụ gửi giao dịch có độ trễ cực thấp. Đọc tài liệu để đưa giao dịch Solana vào block nhanh hơn và tạo lợi thế giao dịch.
Giới thiệu
"Mô phỏng giao dịch thất bại: Không tìm thấy blockhash." "Không thể gửi giao dịch." Những thông báo lỗi này đã trở nên quá quen thuộc. Tình trạng tắc nghẽn mạng khiến ngay cả các giao dịch cơ bản cũng trở thành trò may rủi. Điều này không đáng xảy ra.
Hướng dẫn này trình bày các chiến lược đơn giản để xử lý hiệu quả những giai đoạn có lưu lượng cao, giúp đảm bảo giao dịch được đưa vào block. Chúng ta sẽ tìm hiểu các phương pháp toàn diện để xử lý tình trạng tắc nghẽn mạng, bao gồm phí ưu tiên, tối ưu hóa đơn vị tính toán và một bí quyết độc quyền của Helius giúp giao dịch luôn được đưa vào block.
Trong hướng dẫn này, chúng ta sẽ tìm hiểu:
- Sử dụng giao dịch được tuần tự hóa để thiết lập phí ưu tiên
- Sử dụng khóa tài khoản để thiết lập phí ưu tiên
- Các chiến lược phí ưu tiên nâng cao
- Các kỹ thuật tối ưu hóa giao dịch
- Tận dụng endpoint có stake để đảm bảo giao dịch được chuyển đến
Phí ưu tiên
Phí ưu tiên đóng vai trò như một cơ chế đấu giá, cho phép bạn báo hiệu tầm quan trọng của giao dịch cho các validator. Các khoản phí này được tính bằng micro-lamport trên mỗi đơn vị tính toán và được xác định theo những tài khoản cụ thể mà giao dịch tương tác, từ đó tạo ra thị trường phí độc lập cho từng tài khoản. Bằng cách thiết lập phí một cách chiến lược dựa trên mức độ tắc nghẽn của từng tài khoản, bạn có thể tăng đáng kể khả năng giao dịch được đưa vào block tiếp theo.
Tiếp theo, chúng ta sẽ xem cách thiết lập phí ưu tiên chính xác bằng nhiều phương pháp với Priority Fee API của Helius:
Giao dịch được tuần tự hóa
Cách đơn giản nhất để thiết lập phí ưu tiên là sử dụng giao dịch được tuần tự hóa. Giao dịch được tuần tự hóa là biểu diễn nhị phân của một giao dịch, được chuyển đổi thành bộ đệm định dạng truyền dẫn để có thể truyền qua mạng.
- Tuần tự hóa giao dịch và truyền giao dịch đó vào API:
const serializedTx = transaction.serialize();
const response = await fetch(heliusEndpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 'helius-example',
method: 'getPriorityFeeEstimate',
params: [{
transaction: serializedTx,
options: { recommended: true }
}]
}),
});
const { result } = await response.json();
const priorityFee = result.priorityFeeEstimate;- Thêm mức phí được đề xuất vào giao dịch — thứ tự các lệnh không quan trọng:
transaction.add(
ComputeBudgetProgram.setComputeUnitPrice({
microLamports: priorityFee
})
);Khóa tài khoản
Một phương pháp khác là cung cấp cho Priority Fee API danh sách khóa tài khoản liên quan đến giao dịch:
- Trích xuất khóa tài khoản từ giao dịch:
const transaction = new Transaction();
// Add your instructions to the transaction
// Extract all account keys from the transaction
const accountKeys = transaction.compileMessage().accountKeys;
// Convert PublicKeys to base58 strings
const publicKeys = accountKeys.map(key => key.toBase58());- Truyền các khóa tài khoản vào Priority Fee API:
const response = await fetch(heliusEndpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 'helius-example',
method: 'getPriorityFeeEstimate',
params: [{
accountKeys: publicKeys,
options: { recommended: true }
}]
}),
});
const { result } = await response.json();
const priorityFee = result.priorityFeeEstimate;- Thêm mức phí được đề xuất vào giao dịch:
transaction.add(
ComputeBudgetProgram.setComputeUnitPrice({
microLamports: priorityFee
})
);Mặc dù cả hai phương pháp đều hoạt động, phương pháp sử dụng giao dịch được tuần tự hóa vẫn được khuyến nghị. Khi sử dụng khóa tài khoản, bạn phải theo dõi và cung cấp thủ công tất cả tài khoản liên quan. Nếu bỏ sót bất kỳ tài khoản nào, mức phí ước tính có thể không chính xác.
Phương pháp sử dụng giao dịch được tuần tự hóa loại bỏ rủi ro này bằng cách tự động cung cấp tất cả tài khoản cần thiết và đưa ra mức phí ước tính chính xác hơn dựa trên toàn bộ ngữ cảnh giao dịch.
Các chiến lược phí ưu tiên nâng cao
Trong hầu hết trường hợp, chỉ cần sử dụng giao dịch được tuần tự hóa với mức phí ưu tiên được đề xuất. Tuy nhiên, để kiểm soát chi tiết hơn, Priority Fee API cho phép bạn yêu cầu mức ước tính cho nhiều cấp độ ưu tiên và bật tính năng đánh giá slot trống.
Cấp độ ưu tiên
Sau đây là ví dụ về cách yêu cầu tất cả cấp độ phí ưu tiên:
const response = await fetch(heliusEndpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 'helius-example',
method: 'getPriorityFeeEstimate',
params: [{
transaction: serializedTx,
options: {
includeAllPriorityFeeLevels: true
}
}]
}),
});
const { result } = await response.json();
console.log(result.priorityFeeLevels);Thao tác này sẽ trả về một đối tượng chứa các cấp độ ưu tiên khác nhau:
{
"priorityFeeLevels": {
"min": 10000.0,
"low": 10000.0,
"medium": 10000.0,
"high": 100000.0,
"veryHigh": 5483924.800000011,
"unsafeMax": 8698904817.0
}
}Các cấp độ ưu tiên tương ứng với những phân vị khác nhau của phí giao dịch gần đây:
min: Phân vị thứ 0low: Phân vị thứ 25medium: Phân vị thứ 50high: Phân vị thứ 75veryHigh: Phân vị thứ 95unsafeMax: Phân vị thứ 100 (hãy thận trọng khi sử dụng)
Để tiếp tục cải thiện tỷ lệ giao dịch được đưa vào block, hãy cân nhắc sử dụng cấp độ ưu tiên high hoặc very high. Tuy nhiên, hãy thận trọng khi sử dụng các cấp độ ưu tiên cao hơn, đặc biệt là veryHigh và unsafeMax, vì chúng có thể làm tăng đáng kể chi phí giao dịch.
Khi sử dụng tùy chọn recommended: true, API sẽ trả về phí ưu tiên trung bình (phân vị thứ 50) nếu mức phí này cao hơn 10.000. Nếu mức trung bình thấp hơn 10.000, API sẽ trả về 10.000. Điều này đảm bảo phí ưu tiên cơ sở cho các giao dịch của bạn.
Đánh giá slot trống
Một bản cập nhật gần đây của Priority Fee API cho phép ước tính phí thông minh hơn bằng cách xem xét các slot trống. Khi các block không chứa giao dịch nào cho một tài khoản cụ thể, bạn có thể cấu hình API để đánh giá các slot này là có mức phí bằng 0, qua đó cung cấp mức ước tính chính xác hơn khi hoạt động mạng ở mức thấp:
const response = await fetch(heliusEndpoint, {
method: 'POST',
headers: { 'Content-Type': 'application/json' },
body: JSON.stringify({
jsonrpc: '2.0',
id: 'helius-example',
method: 'getPriorityFeeEstimate',
params: [{
transaction: serializedTx,
options: {
recommended: true,
evaluateEmptySlotAsZero: true
}
}]
}),
});Khi bật evaluateEmptySlotAsZero, API sẽ:
- Xác định các block không có giao dịch cho tài khoản của bạn
- Tính các slot trống này là có mức phí bằng 0
- Điều chỉnh mức ước tính xuống khi độ tắc nghẽn thấp
- Tránh trả phí quá cao khi hoạt động mạng ở mức thấp
Các chiến lược tối ưu hóa giao dịch
Ngoài phí ưu tiên, quá trình tối ưu hóa giao dịch còn bao gồm một số thành phần chính phối hợp với nhau để cải thiện tỷ lệ giao dịch được đưa vào block:
Quản lý đơn vị tính toán
- Sử dụng Helius SDK để lấy số đơn vị tính toán tối ưu cho giao dịch:
const response = await helius.rpc.getComputeUnits({
transaction: serializedTransaction
});
const computeUnits = response.computeUnits;- Thêm giới hạn đơn vị tính toán vào giao dịch:
transaction.add(
ComputeBudgetProgram.setComputeUnitLimit({
units: computeUnits
})
);Mức cam kết
Đối với hầu hết ứng dụng, mức cam kết processed mang lại sự cân bằng tốt nhất. Mức này:
- Cung cấp thời gian xác nhận nhanh nhất
- Đảm bảo đủ mức độ bảo mật cho hầu hết trường hợp sử dụng
- Giảm nguy cơ blockhash hết hạn
- Giảm thiểu giao dịch bị loại bỏ khi mạng tắc nghẽn
Luôn sử dụng cùng một mức cam kết khi gửi và xác nhận giao dịch để duy trì hành vi nhất quán cho ứng dụng.
Cấu hình RPC
Đặt maxRetries thành 0 và triển khai logic thử lại riêng để kiểm soát tốt hơn quá trình gửi lại giao dịch. Sử dụng skipPreflight: true để giảm độ trễ. Cách này đặc biệt hữu ích trong những giai đoạn mạng tắc nghẽn nghiêm trọng:
const signature = await connection.sendTransaction(transaction, {
maxRetries: 0,
skipPreflight: true
});Sử dụng endpoint có stake
Endpoint có stake của Helius cung cấp quyền truy cập trực tiếp, được đảm bảo vào các kết nối có stake, giúp loại bỏ nhu cầu tối ưu hóa phí ưu tiên theo cách thủ công:
const connection = new Connection(
'https://staked.helius-rpc.com?api-key=YOUR_API_KEY'
);
// Transaction will be processed with optimal priority
const signature = await connection.sendTransaction(transaction);Endpoint có stake:
- Cung cấp băng thông có stake được đảm bảo
- Giảm số giao dịch thất bại khi mạng tắc nghẽn
- Tăng tốc độ truyền giao dịch qua hạ tầng chuyên dụng
Kết luận
Sử dụng phí ưu tiên hiệu quả là yếu tố thiết yếu để đưa giao dịch lên Solana thành công, đặc biệt khi mạng tắc nghẽn. Bằng cách tận dụng Helius Priority Fee API và triển khai các chiến lược đã trình bày, bạn có thể cải thiện đáng kể tỷ lệ giao dịch thành công trong khi vẫn cân bằng chi phí. Hãy luôn cập nhật thông tin và thích ứng với điều kiện mạng để đạt kết quả tối ưu.
Nếu đã đọc đến đây, cảm ơn bạn! Chúng tôi hy vọng hướng dẫn này đã giúp bạn hiểu cách tối ưu hóa giao dịch trên Solana. Hãy đăng ký nhận bản tin để không bỏ lỡ bất kỳ thông tin cập nhật nào về những tính năng mới trên Solana.
Sẵn sàng tìm hiểu sâu hơn?
Khám phá các bài viết mới nhất trên blog Helius và tiếp tục hành trình với Solana ngay hôm nay.
Bài viết liên quan
Đăng ký nhận tin từ Helius
Luôn cập nhật những thông tin mới nhất về phát triển Solana và nhận thông báo khi chúng tôi đăng bài


