BARU: Helius mengakuisisi Light Protocol
Kemacetan Solana: Cara Terbaik Mengirim Transaksi Solana
Blog/Dasar-Dasar

Kemacetan Solana: Cara Terbaik Mengirim Transaksi Solana

Insinyur IntegrasiHet Dagli di XHet Dagli di LinkedIn
Bacaan 5 menit

Pendahuluan

"Simulasi transaksi gagal: Blockhash tidak ditemukan." "Gagal mengirim transaksi." Pesan kesalahan ini sudah terlalu sering dijumpai. Kemacetan jaringan telah mengubah transaksi paling dasar sekalipun menjadi permainan untung-untungan. Masalah ini sebenarnya tidak perlu terjadi.

Panduan ini membahas strategi sederhana untuk menangani periode lalu lintas tinggi secara efektif agar transaksi Anda berhasil diproses. Kami akan membahas pendekatan menyeluruh untuk menangani kemacetan jaringan, termasuk biaya prioritas, pengoptimalan unit komputasi, dan trik rahasia eksklusif Helius agar transaksi Anda selalu berhasil diproses.

Dalam panduan ini, kita akan membahas:

  • Menggunakan transaksi terserialisasi untuk biaya prioritas
  • Menggunakan kunci akun untuk biaya prioritas
  • Strategi biaya prioritas tingkat lanjut
  • Teknik pengoptimalan transaksi
  • Memanfaatkan endpoint dengan stake untuk menjamin pengiriman

Biaya Prioritas

Biaya prioritas berfungsi sebagai mekanisme penawaran yang memungkinkan Anda menunjukkan tingkat kepentingan transaksi kepada validator. Biaya ini, yang dihitung dalam micro-lamport per unit komputasi, ditentukan oleh akun tertentu yang berinteraksi dengan transaksi Anda sehingga menciptakan pasar biaya independen untuk setiap akun. Dengan menetapkan biaya ini secara strategis berdasarkan kemacetan khusus akun, Anda dapat meningkatkan peluang transaksi untuk disertakan dalam blok berikutnya secara signifikan.

Selanjutnya, kita akan membahas cara menetapkan biaya prioritas dengan benar melalui berbagai pendekatan menggunakan Priority Fee API dari Helius:

Transaksi Terserialisasi

Metode paling praktis untuk menetapkan biaya prioritas adalah menggunakan transaksi terserialisasi. Transaksi terserialisasi adalah representasi biner dari transaksi yang dikonversi menjadi buffer berformat wire agar dapat dikirimkan melalui jaringan.

  1. Serialisasikan transaksi Anda dan teruskan ke API:
Kode
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;
  1. Tambahkan biaya yang direkomendasikan ke transaksi Anda — urutan instruksi tidak menjadi masalah:
Kode
transaction.add(
  ComputeBudgetProgram.setComputeUnitPrice({
    microLamports: priorityFee
  })
);

Kunci Akun

Pendekatan alternatifnya adalah memberikan daftar kunci akun yang terlibat dalam transaksi kepada Priority Fee API:‍

  1. Ekstrak kunci akun dari transaksi Anda:
Kode
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());
  1. Teruskan kunci akun ke Priority Fee API:
Kode
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;
  1. Tambahkan biaya yang direkomendasikan ke transaksi Anda:
Kode
transaction.add(
  ComputeBudgetProgram.setComputeUnitPrice({
    microLamports: priorityFee
  })
);

Meskipun kedua metode dapat digunakan, metode transaksi terserialisasi lebih direkomendasikan. Penggunaan kunci akun mengharuskan Anda melacak dan menyertakan semua akun yang relevan secara manual. Hal ini dapat menghasilkan perkiraan biaya yang tidak akurat jika ada akun yang terlewat. 

Metode transaksi terserialisasi menghilangkan risiko ini dengan otomatis menyertakan semua akun yang diperlukan dan memberikan perkiraan biaya yang lebih akurat berdasarkan konteks transaksi secara lengkap.

Strategi Biaya Prioritas Tingkat Lanjut

Untuk sebagian besar skenario, penggunaan transaksi terserialisasi dengan biaya prioritas yang direkomendasikan sudah memadai. Namun, untuk kontrol yang lebih terperinci, Priority Fee API memungkinkan Anda meminta perkiraan untuk berbagai tingkat prioritas dan mengaktifkan evaluasi slot kosong.

Tingkat Prioritas

Berikut contoh cara meminta semua tingkat biaya prioritas:

Kode
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);

Tindakan ini akan mengembalikan objek dengan berbagai tingkat prioritas:

Kode
{
  "priorityFeeLevels": {
    "min": 10000.0,
    "low": 10000.0,
    "medium": 10000.0,
    "high": 100000.0,
    "veryHigh": 5483924.800000011,
    "unsafeMax": 8698904817.0
  }
}

Tingkat prioritas tersebut sesuai dengan berbagai persentil biaya transaksi terbaru:

  • min: persentil ke-0
  • low: persentil ke-25
  • medium: persentil ke-50
  • high: persentil ke-75
  • veryHigh: persentil ke-95
  • unsafeMax: persentil ke-100 (gunakan dengan hati-hati)

Untuk lebih meningkatkan tingkat keberhasilan pemrosesan transaksi, pertimbangkan penggunaan tingkat prioritas high atau very high. Namun, berhati-hatilah saat menggunakan tingkat prioritas yang lebih tinggi, khususnya veryHigh dan unsafeMax, karena tingkat tersebut dapat meningkatkan biaya transaksi secara signifikan.‍

Evaluasi Slot Kosong

Pembaruan terbaru pada Priority Fee API memungkinkan perkiraan biaya yang lebih cerdas dengan mempertimbangkan slot kosong. Saat blok tidak memuat transaksi untuk akun tertentu, Anda dapat mengonfigurasi API untuk mengevaluasi slot tersebut sebagai slot dengan biaya nol, sehingga menghasilkan perkiraan yang lebih akurat saat aktivitas jaringan rendah:

Kode
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
      }
    }]
  }),
});

Saat evaluateEmptySlotAsZero diaktifkan, API akan:

  • Mengidentifikasi blok tanpa transaksi untuk akun Anda
  • Menghitung slot kosong tersebut sebagai slot dengan biaya nol
  • Menurunkan perkiraan saat kemacetan rendah
  • Mencegah pembayaran berlebih saat aktivitas jaringan rendah

Strategi Pengoptimalan Transaksi

Selain biaya prioritas, pengoptimalan transaksi melibatkan beberapa komponen utama yang bekerja bersama untuk meningkatkan tingkat keberhasilan pemrosesan:

Pengelolaan Unit Komputasi

  1. Gunakan Helius SDK untuk mendapatkan unit komputasi yang optimal bagi transaksi Anda:‍
Kode
const response = await helius.rpc.getComputeUnits({
  transaction: serializedTransaction
});

const computeUnits = response.computeUnits;
  1. Tambahkan batas unit komputasi ke transaksi Anda:
Kode
transaction.add(
  ComputeBudgetProgram.setComputeUnitLimit({
    units: computeUnits
  })
);

Tingkat Commitment

‍Untuk sebagian besar aplikasi, penggunaan tingkat commitment processed memberikan keseimbangan terbaik. Tingkat ini:

  • Memberikan waktu konfirmasi tercepat
  • Menyediakan keamanan yang memadai untuk sebagian besar kasus penggunaan
  • Mengurangi risiko kedaluwarsa hash blok
  • Meminimalkan transaksi yang dibatalkan saat terjadi kemacetan

Selalu gunakan tingkat commitment yang sama untuk mengirim dan mengonfirmasi transaksi agar perilaku aplikasi Anda tetap konsisten.

Konfigurasi RPC

Atur maxRetries ke 0 dan terapkan logika percobaan ulang Anda sendiri agar memiliki kontrol lebih baik atas pengiriman ulang transaksi. Gunakan skipPreflight: true untuk mengurangi latensi. Hal ini sangat berguna selama periode kemacetan tinggi:

Kode
const signature = await connection.sendTransaction(transaction, {
  maxRetries: 0,
  skipPreflight: true
});

Menggunakan Endpoint dengan Stake

Endpoint dengan stake dari Helius menyediakan akses langsung dan terjamin ke koneksi dengan stake, sehingga tidak perlu mengoptimalkan biaya prioritas secara manual:

Kode
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 dengan stake tersebut:

  • Memberikan bandwidth dengan stake yang terjamin
  • Mengurangi kegagalan transaksi saat terjadi kemacetan
  • Menawarkan propagasi transaksi yang lebih cepat melalui infrastruktur khusus

Kesimpulan

Penggunaan biaya prioritas secara efektif sangat penting agar transaksi berhasil diproses di Solana, terutama saat terjadi kemacetan jaringan. Dengan memanfaatkan Helius Priority Fee API dan menerapkan strategi yang dibahas, Anda dapat meningkatkan tingkat keberhasilan transaksi secara signifikan sambil tetap mempertimbangkan keseimbangan biaya. Terus ikuti perkembangan dan sesuaikan strategi dengan kondisi jaringan untuk memperoleh hasil yang optimal.

Jika Anda telah membaca sampai sejauh ini, terima kasih! Kami harap panduan ini membantu Anda memahami cara mengoptimalkan transaksi di Solana. Pastikan Anda berlangganan nawala kami agar tidak pernah melewatkan kabar terbaru tentang perkembangan di Solana. 

Siap mempelajari lebih lanjut?

Jelajahi artikel terbaru di blog Helius dan lanjutkan perjalanan Solana Anda hari ini.

Berlangganan Helius

Ikuti perkembangan terbaru dalam pengembangan Solana dan dapatkan pembaruan saat kami memublikasikan postingan

Gambar diperbesar