> ## Documentation Index
> Fetch the complete documentation index at: https://www.helius.dev/docs/llms.txt
> Use this file to discover all available pages before exploring further.

# Penyiapan Node Khusus Solana: Panduan Lengkap untuk Memulai

> Panduan lengkap untuk menyiapkan node khusus Solana Anda dengan streaming gRPC, plugin Yellowstone, dan konfigurasi optimal untuk data blockchain.

## Cara Memesan Node Khusus

Node Khusus dapat dipesan langsung dari [portal pengembang](https://dashboard.helius.dev/dedicated-nodes) pada tab Dedicated Nodes.

<Frame caption="Order a dedicated node from your Helius dashboard">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-order.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=eadf4de4e3908e93fd59aa289cab4fca" alt="Order a dedicated node from your Helius dashboard" width="1914" height="954" data-path="images/dedicated-nodes-order.png" />
</Frame>

### Jenis Node

Jenis node yang Anda pilih bergantung pada kebutuhan Anda. Karena kami tidak menerapkan batas laju, performa node Anda akan sepenuhnya bergantung pada spesifikasinya.

**Untuk aplikasi streaming gRPC** (kasus penggunaan utama), semua jenis node akan memberikan performa yang baik.

<Warning>
  **Penting**: Meskipun [`getProgramAccounts`](/docs/id/api-reference/rpc/http/getprogramaccounts) didukung, node khusus tidak dioptimalkan untuk panggilan ini. Penggunaan berat dapat memengaruhi performa node atau bahkan menyebabkan kegagalan node. Gunakan paket bersama Anda untuk kueri `getProgramAccounts` karena paket tersebut memiliki pengindeks khusus yang membuat panggilan ini jauh lebih cepat dan lebih andal.
</Warning>

<Frame caption="Choose your dedicated node's type and location">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-type-and-location.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=3405ddb182f616be9e50c6d7acb43299" alt="Choose your dedicated node's type and location" width="2812" height="1274" data-path="images/dedicated-nodes-type-and-location.png" />
</Frame>

### Lokasi Node

Kami menyediakan node di berbagai wilayah: Amerika Utara (Pittsburgh, Newark, Salt Lake City, Los Angeles, Vancouver); Eropa (Dublin, London, Amsterdam, Frankfurt); dan Asia (Tokyo, Singapura) untuk memastikan cakupan geografis terbaik dengan infrastruktur Solana global.

Untuk latensi optimal, pilih node yang paling dekat dengan server Anda. Node Anda akan diterapkan dalam waktu tiga jam setelah pembayaran.

### Klien Node

Anda dapat menyesuaikan node dengan memilih jenis klien—Agave atau Jito Labs (fork dari Agave dengan metode tambahan `simulateBundle`)

<Frame caption="Select your dedicated node's client type">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-client-type.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=351033efab719a4f3ce647468ccad8e6" alt="Select your dedicated node's client type" width="1468" height="484" data-path="images/dedicated-nodes-client-type.png" />
</Frame>

<Note>
  Node khusus **tidak dapat** mengirim Jito Bundles sendiri. Untuk mengirim Jito Bundles, Anda harus menggunakan Jito API, yang menangani pengemasan dan pengiriman bundle melalui sistem Jito.
</Note>

### Plugin Geyser (Direkomendasikan)

**Kami sangat menyarankan Anda menambahkan Plugin Geyser [Yellowstone](https://github.com/helius-labs/yellowstone-grpc)**, yang merupakan kasus penggunaan utama untuk node khusus. Plugin ini menyediakan [streaming gRPC](/docs/id/grpc) berperforma tinggi untuk slot, blok, transaksi, dan pembaruan akun.

<Frame caption="Select the Yellowstone gRPC Geyser Plugin (Recommended)">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/dedicated-nodes-geyser-plugin.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=dcc31d0cb8f15a5246818c47411f6cc6" alt="Select the Yellowstone gRPC Geyser Plugin (Recommended)" width="1450" height="492" data-path="images/dedicated-nodes-geyser-plugin.png" />
</Frame>

<Note>
  **Praktik Terbaik**: Node khusus dioptimalkan untuk streaming gRPC. Gunakan paket bersama Anda untuk pengiriman transaksi, kueri arsip, dan operasi RPC yang kompleks.
</Note>

### Opsi Pembayaran

Anda dapat membayar dengan mata uang fiat atau kripto (USDC). Setelah pembayaran berhasil, node Anda akan diterapkan dalam waktu 3 jam.

Untuk penagihan, pembayaran fiat akan memperoleh diskon pada tagihan bulan berikutnya berdasarkan jumlah hari yang diperlukan untuk menyediakan node. Untuk pembayaran kripto, siklus penagihan dimulai setelah node dikirimkan.

### Demo

<iframe width="560" height="315" src="https://www.youtube.com/embed/KjgUzY_3dsQ?si=r3aKXpc_H6b7hnqE" title="YouTube video player" frameborder="0" allow="accelerometer; autoplay; clipboard-write; encrypted-media; gyroscope; picture-in-picture; web-share" referrerpolicy="strict-origin-when-cross-origin" allowfullscreen />

## Memulai

Setelah Node Khusus Anda disiapkan dan siap digunakan (status: **Succeeded**), Anda dapat mulai menggunakannya.

## Menghubungkan ke node khusus Anda

### Streaming gRPC (Kasus Penggunaan Utama)

**Node khusus dioptimalkan untuk streaming gRPC melalui Plugin Geyser Yellowstone.** Ini adalah cara utama dan yang direkomendasikan untuk menggunakan node khusus Anda.

<Info>
  **Pertimbangkan LaserStream untuk Streaming gRPC**: LaserStream menawarkan performa dan keandalan yang lebih baik serta fitur lanjutan seperti pemutaran ulang riwayat selama 48 jam untuk streaming gRPC. LaserStream direkomendasikan untuk 99% kasus penggunaan streaming. [Bandingkan LaserStream dengan Node Khusus](/docs/id/laserstream/laserstream-vs-dedicated-nodes) untuk mengevaluasi solusi terbaik bagi kebutuhan Anda, atau [mulai gunakan LaserStream](https://dashboard.helius.dev/laserstream) dari Dasbor Helius Anda.
</Info>

### RPC Dasar dan WebSocket (Fungsionalitas Terbatas)

Setiap node khusus juga menyediakan fungsionalitas RPC dasar, tetapi dengan sejumlah batasan. **Untuk aplikasi produksi, kombinasikan node khusus dengan paket bersama.**

Di sini kami menggunakan Solana web3.js untuk memanggil [`getSlot`](/docs/id/api-reference/rpc/http/getslot) menggunakan node khusus kami:

```javascript theme={"system"}
// Using @solana/web3.js
const { Connection } = require('@solana/web3.js');

const connection = new Connection('https://liveried-grazings-gxzjabdgqa-dedicated.helius-rpc.com?api-key=465964ff-f718-47d2-a51c-66ddcce332d7');

// Get the current slot
const getSlot = async () => {
    const slot = await connection.getSlot();
    console.log('Current slot:', slot);
};

getSlot();
```

Berikut cara menyiapkan koneksi WebSocket native untuk melakukan streaming slot baru:

```javascript theme={"system"}
const Websocket = require('ws');
const ws = new Websocket('wss://liveried-grazings-gxzjabdgqa-dedicated.helius-rpc.com?api-key=465964ff-f718-47d2-a51c-66ddcce332d7	');

ws.onopen = () => {
    ws.send(JSON.stringify({
        jsonrpc: '2.0',
        id: 1,
        method: 'slotSubscribe'
    }));
};

ws.onmessage = (event) => {
    console.log(JSON.parse(event.data));
};
```

<Warning>
  **Ingat**: Contoh RPC di atas hanya ditujukan untuk fungsionalitas dasar. Batasan node khusus:

  * [`sendTransaction`](/docs/id/api-reference/rpc/http/sendtransaction) didukung tetapi tidak dioptimalkan—sebagian besar transaksi tidak akan berhasil masuk (gunakan paket bersama Anda untuk pengiriman transaksi yang andal)
  * Tidak ada kueri data arsip (gunakan paket bersama Anda)
  * [`getProgramAccounts`](/docs/id/api-reference/rpc/http/getprogramaccounts) didukung tetapi tidak dioptimalkan—penggunaan berat dapat memengaruhi performa atau menyebabkan kegagalan node (gunakan paket bersama Anda untuk keandalan)

  **Kasus penggunaan utama**: Gunakan penyiapan streaming gRPC di bawah ini untuk mendapatkan performa optimal.
</Warning>

### Menyiapkan Plugin Geyser

Untuk mulai menggunakan plugin Geyser, Anda perlu mengkloning repositori Yellowstone:

```shell theme={"system"}
git clone https://github.com/helius-labs/yellowstone-grpc.git
```

#### Menggunakan CLI

```sh theme={"system"}
cd yellowstone-grpc/examples/rust/
cargo run --bin client -- -e "https://liveried-grazings-gxzjabdgqa-dedicated-lb.helius-rpc.com:2053" --x-token 42f03938-1daa-4162-a457-bb551ecaf590 subscribe --slots
```

Setelah selesai, Anda akan melihat output slot baru di terminal. Jangan lupa mengganti URL dan Token dengan milik Anda sendiri.

<Frame caption="Terminal output of new slots">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/slots.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=370b4cbd02fd7ff8811bd9d63ed4976c" alt="Terminal log output from the Yellowstone gRPC client showing a stream of slot updates with processed, confirmed, and finalized statuses" width="667" height="288" data-path="images/slots.png" />
</Frame>

### Contoh TypeScript

Contoh ini melakukan streaming semua transaksi Raydium secara langsung dalam format JSON:

```typescript theme={"system"}
import Client, { CommitmentLevel, SubscribeRequest } from "@triton-one/yellowstone-grpc";
import * as bs58 from 'bs58';

const processBuffers = (obj: any): any =>
  !obj ? obj :
  Buffer.isBuffer(obj) || obj instanceof Uint8Array ? bs58.encode(obj) :
  Array.isArray(obj) ? obj.map(processBuffers) :
  typeof obj === 'object' ? Object.fromEntries(Object.entries(obj).map(([k, v]) => [k, processBuffers(v)])) :
  obj;

const main = async () => {
  const client = new Client("grpc_url", 
    "x_token", 
    { "grpc.max_receive_message_length": 64 * 1024 * 1024 });

  const stream = await client.subscribe();
  const write = (req: SubscribeRequest) => new Promise<void>((resolve, reject) => 
    stream.write(req, (err) => err ? reject(err) : resolve()));

  stream.on("data", (data) => {
    try { console.log(JSON.stringify(processBuffers(data), null, 2)); }
    catch (e) { console.error('Error:', e); }
  });

  await write({
    slots: {},
    accounts: {},
    accountsDataSlice: [],
    transactions: {
      allRaydiumTxs: {
        accountInclude: ["675kPX9MHTjS2zt1qfr1NYHuzeLXfQM9H24wFSUt1Mp8"],
        accountExclude: [],
        accountRequired: [],
      }
    },
    blocks: {},
    blocksMeta: {},
    entry: {},
    commitment: CommitmentLevel.PROCESSED,
  });

  setInterval(() => write({
    ping: { id: 1 },
    accounts: {},
    accountsDataSlice: [],
    transactions: {},
    blocks: {},
    blocksMeta: {},
    entry: {},
    slots: {},
  }).catch(console.error), 30000);

  await new Promise<void>((resolve, reject) => {
    stream.on("error", (e) => { console.error("Stream error:", e); reject(e); stream.end(); });
    stream.on("end", resolve);
    stream.on("close", resolve);
  });
};

main().catch(console.error);
```

<Frame caption="Example output of a partial Raydium transaction">
  <img src="https://mintcdn.com/helius/RGuN9Tphu9J_7kRM/images/raydium-tx.png?fit=max&auto=format&n=RGuN9Tphu9J_7kRM&q=85&s=e11b512cd7851eb33be9e425eaf1a0c8" alt="JSON output of a Raydium transaction streamed over gRPC, showing the allRaydiumTxs filter, signature, account keys, and instructions" width="1778" height="1147" data-path="images/raydium-tx.png" />
</Frame>
