Lompat ke konten utama

Menggunakan WebSockets

Alchemy
websockets
kueri
JavaScript
Pemula
Elan Halpern
1 Desember 2020
5 menit baca

Ini adalah panduan tingkat pemula untuk menggunakan WebSockets dan Alchemy guna membuat permintaan ke rantai blok Ethereum.

 (opens in a new tab)WebSockets vs. HTTP

Berbeda dengan HTTP, dengan WebSockets, Anda tidak perlu terus-menerus membuat permintaan saat menginginkan informasi tertentu. WebSockets mempertahankan koneksi jaringan untuk Anda (jika dilakukan dengan benar) dan mendengarkan perubahan.

Seperti halnya koneksi jaringan apa pun, Anda tidak boleh berasumsi bahwa WebSocket akan tetap terbuka selamanya tanpa gangguan, tetapi menangani koneksi yang terputus dan penyambungan kembali secara manual dengan benar bisa menjadi tantangan tersendiri. Kelemahan lain dari WebSockets adalah Anda tidak mendapatkan kode status HTTP dalam respons, melainkan hanya pesan kesalahan.

Web3 Alchemy (opens in a new tab) secara otomatis menambahkan penanganan untuk kegagalan dan percobaan ulang WebSocket tanpa memerlukan konfigurasi.

Coba sekarang

Cara termudah untuk menguji WebSockets adalah dengan menginstal alat baris perintah untuk membuat permintaan WebSocket seperti wscat (opens in a new tab). Menggunakan wscat, Anda dapat mengirim permintaan sebagai berikut:

Catatan: jika Anda memiliki akun Alchemy, Anda dapat mengganti demo dengan kunci API Anda sendiri. Daftar untuk mendapatkan akun Alchemy gratis di sini! (opens in a new tab)

wscat -c wss://eth-mainnet.ws.alchemyapi.io/ws/demo

>  {"jsonrpc":  "2.0", "id": 0, "method":  "eth_gasPrice"}

<  {"jsonrpc":  "2.0", "result":  "0xb2d05e00", "id": 0}

Cara menggunakan WebSockets

Untuk memulai, buka WebSocket menggunakan URL WebSocket untuk aplikasi Anda. Anda dapat menemukan URL WebSocket aplikasi Anda dengan membuka halaman aplikasi di dasbor Anda (opens in a new tab) dan mengeklik "View Key". Perhatikan bahwa URL aplikasi Anda untuk WebSockets berbeda dari URL-nya untuk permintaan HTTP, tetapi keduanya dapat ditemukan dengan mengeklik "View Key".

Where to find your WebSocket URL in your Alchemy dashboard

Semua API yang tercantum dalam Referensi API Alchemy (opens in a new tab) dapat digunakan melalui WebSocket. Untuk melakukannya, gunakan muatan (payload) yang sama yang akan dikirim sebagai badan permintaan HTTP POST, tetapi kirimkan muatan tersebut melalui WebSocket.

Dengan Web3

Beralih ke WebSockets saat menggunakan Pustaka klien seperti Web3 sangatlah mudah. Cukup berikan URL WebSocket alih-alih URL HTTP saat menginisiasi klien Web3 Anda. Sebagai contoh:

const web3 = new Web3("wss://eth-mainnet.ws.alchemyapi.io/ws/your-api-key")

web3.eth.getBlockNumber().then(console.log) // -> 7946893

API Langganan

Saat terhubung melalui WebSocket, Anda dapat menggunakan dua metode tambahan: eth_subscribe dan eth_unsubscribe. Metode ini akan memungkinkan Anda untuk mendengarkan peristiwa tertentu dan segera diberi tahu.

eth_subscribe

Membuat langganan baru untuk peristiwa yang ditentukan. Pelajari lebih lanjut tentang eth_subscribe (opens in a new tab).

Parameter

  1. Jenis langganan
  2. Parameter opsional

Argumen pertama menentukan jenis peristiwa yang akan didengarkan. Argumen kedua berisi opsi tambahan yang bergantung pada argumen pertama. Berbagai jenis deskripsi, opsinya, dan muatan peristiwanya dijelaskan di bawah ini.

Nilai Kembalian

ID langganan: ID ini akan dilampirkan pada setiap peristiwa yang diterima, dan juga dapat digunakan untuk membatalkan langganan menggunakan eth_unsubscribe.

Peristiwa langganan

Selama langganan aktif, Anda akan menerima peristiwa berupa objek dengan bidang-bidang berikut:

  • jsonrpc: Selalu "2.0"
  • method: Selalu "eth_subscription"
  • params: Sebuah objek dengan bidang-bidang berikut:
    • subscription: ID langganan yang dikembalikan oleh panggilan eth_subscribe yang membuat langganan ini.
    • result: Sebuah objek yang isinya bervariasi tergantung pada jenis langganan.

Jenis langganan

  1. alchemy_newFullPendingTransactions

Mengembalikan informasi transaksi untuk semua transaksi yang ditambahkan ke state tertunda. Jenis langganan ini berlangganan transaksi yang tertunda, mirip dengan panggilan Web3 standar web3.eth.subscribe("pendingTransactions"), tetapi berbeda karena ia memancarkan informasi transaksi lengkap alih-alih hanya hash transaksi.

Contoh:

  1. newHeads

Memancarkan peristiwa setiap kali header baru ditambahkan ke rantai, termasuk selama reorganisasi rantai.

Ketika reorganisasi rantai terjadi, langganan ini akan memancarkan peristiwa yang berisi semua header baru untuk rantai baru tersebut. Secara khusus, ini berarti Anda mungkin melihat beberapa header dipancarkan dengan ketinggian yang sama, dan ketika ini terjadi, header yang lebih baru harus dianggap sebagai yang benar setelah reorganisasi.

Contoh:

  1. logs

Memancarkan log yang merupakan bagian dari blok yang baru ditambahkan yang cocok dengan kriteria filter yang ditentukan.

Ketika reorganisasi rantai terjadi, log yang merupakan bagian dari blok pada rantai lama akan dipancarkan lagi dengan properti removed diatur ke true. Selanjutnya, log yang merupakan bagian dari blok pada rantai baru akan dipancarkan, yang berarti ada kemungkinan untuk melihat log untuk transaksi yang sama beberapa kali jika terjadi reorganisasi.

Parameter

  1. Sebuah objek dengan bidang-bidang berikut:
    • address (opsional): baik berupa string yang mewakili alamat atau array dari string tersebut.
      • Hanya log yang dibuat dari salah satu alamat ini yang akan dipancarkan.
    • topics: sebuah array penentu topik.
      • Setiap penentu topik dapat berupa null, string yang mewakili topik, atau array string.
      • Setiap posisi dalam array yang bukan null membatasi log yang dipancarkan hanya pada log yang memiliki salah satu topik yang diberikan di posisi tersebut.

Beberapa contoh spesifikasi topik:

  • []: Topik apa pun diizinkan.
  • [A]: A di posisi pertama (dan apa pun setelahnya).
  • [null, B]: Apa pun di posisi pertama dan B di posisi kedua (dan apa pun setelahnya).
  • [A, B]: A di posisi pertama dan B di posisi kedua (dan apa pun setelahnya).
  • [[A, B], [A, B]]: (A atau B) di posisi pertama dan (A atau B) di posisi kedua (dan apa pun setelahnya).

Contoh:

eth_unsubscribe

Membatalkan langganan yang ada sehingga tidak ada lagi peristiwa yang dikirim.

Parameter

  1. ID Langganan, seperti yang sebelumnya dikembalikan dari panggilan eth_subscribe.

Nilai Kembalian

true jika langganan berhasil dibatalkan, atau false jika tidak ada langganan dengan ID yang diberikan.

Contoh:

Permintaan

curl https://eth-mainnet.alchemyapi.io/v2/your-api-key
-X POST
-H "Content-Type: application/json"
-d '{"id": 1, "method": "eth_unsubscribe", "params": ["0x9cef478923ff08bf67fde6c64013158d"]}'

Hasil

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": true
}

Daftar dengan Alchemy (opens in a new tab) secara gratis, periksa dokumentasi kami (opens in a new tab), dan untuk berita terbaru, ikuti kami di Twitter (opens in a new tab).