Solana Web3.js versi 2.x: Pembaruan besar untuk pustaka JavaScript yang kaya fitur
Solana Web3.js sebagai sebuah pustaka JavaScript yang kuat, secara resmi meluncurkan versi 2.x pada bulan November. Dibandingkan dengan 1.x, versi baru ini membawa banyak perubahan signifikan, artikel ini akan memberikan gambaran utama tentang pembaruan tersebut.
Meskipun versi 2.x baru saja dirilis dan saat ini penggunaannya tidak tinggi, banyak pustaka yang banyak digunakan belum bermigrasi, tetapi memahami perubahan ini sangat penting untuk pekerjaan migrasi di masa depan.
Perbandingan Versi
Tidak dapat disangkal, versi lama lebih sederhana dan langsung digunakan. Versi 1.x hanya mencakup satu paket @solana/web3.js, yang mencakup semua fungsi. Ini didasarkan pada desain kelas, membungkus banyak operasi yang umum digunakan. Misalnya, kelas Connection menyediakan puluhan metode, hampir mencakup semua fungsi yang dibutuhkan pengembang. Selain itu, kode contoh yang kaya dalam buku masak Solana memberikan kenyamanan yang besar bagi pengembang.
Namun, desain ini juga membawa beberapa masalah. Meskipun fitur yang sebenarnya digunakan oleh pengembang mungkin hanya merupakan sebagian kecil, seluruh kode perpustakaan akan diunduh ke perangkat pengguna, dan karena jumlah kode dalam perpustakaan yang sangat besar, ini dapat menyebabkan sedikit keterlambatan saat memuat.
Versi 2.x mengambil pendekatan yang berbeda. Tim resmi membagi repositori kode yang ada menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, dan @solana/transactions. Pada saat yang sama, versi baru ini meninggalkan implementasi berbasis kelas dan lebih banyak menggunakan pendekatan fungsi tunggal. Perubahan ini sangat menguntungkan bagi optimasi saat membangun kode JavaScript, kode yang tidak digunakan akan dihapus dan tidak akan diunduh ke perangkat pengguna. Menurut statistik dari dokumentasi resmi, DApp yang menggunakan versi baru umumnya dapat mencapai optimasi ukuran sebesar 30%, dan untuk aplikasi yang hanya menggunakan sedikit fungsi, rasio optimasi bahkan lebih tinggi.
Perubahan ini juga meningkatkan tuntutan terhadap kualitas dokumentasi tim Solana. Bagaimana cara membuat pengembang cepat menemukan fungsi yang diperlukan menjadi masalah kunci. Saat ini, tampaknya nama paket versi baru memiliki semantik yang baik, sehingga dari namanya saja sudah bisa dipahami secara garis besar kegunaannya, yang pada tingkat tertentu mengurangi kesulitan migrasi bagi pengembang.
Namun, karena versi baru baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif sedikit. Selain itu, versi baru cenderung menggunakan fungsi bawaan runtime (seperti menghasilkan pasangan kunci), tetapi deskripsi tentang bagian-bagian ini dalam dokumentasi kurang memadai, yang dapat menyebabkan kebingungan bagi pengembang dalam beberapa aspek.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Ini mungkin tidak terlalu penting bagi banyak pengguna, tetapi mengingat serangan rantai pasokan yang terjadi pada versi @solana/web3.js 1.95.5 dan 1.95.6 awal bulan Desember tahun ini, mengurangi input dan ketergantungan eksternal dapat secara signifikan mengurangi kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang Web3.js memutuskan untuk lebih banyak menggunakan fungsi bawaan, menghilangkan ketergantungan eksternal dan pengenalan Polyfills. Meskipun mungkin ada perubahan di masa depan, saat ini versi 2.x telah menghilangkan semua ketergantungan eksternal.
Perubahan Utama
cara koneksi
Dalam versi 1.x, kelas Connection menyediakan banyak metode. Fungsinya yang utama adalah untuk membuat pengirim permintaan dengan mengonfigurasi alamat permintaan RPC, kemudian mengirim berbagai permintaan melalui pengirim tersebut.
Versi 2.x menggunakan pendekatan yang lebih fungsional:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat memanggil sendAndConfirmTransaction untuk mengirim transaksi, permintaan HTTPS akan secara otomatis dibuat, dan koneksi WSS akan dibangun untuk berlangganan status transaksi. Setelah transaksi dikonfirmasi, hash transaksi akan dikembalikan.
pengolahan kunci pasangan
Pengolahan yang terkait dengan kunci publik dan kunci pribadi juga telah mengalami perubahan signifikan. Kelas Keypair dan PublicKey yang umum digunakan dalam versi 1.x tidak lagi ada, digantikan oleh serangkaian fungsi.
Misalnya, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan Keypair.generate() sebelumnya.
Perlu dicatat bahwa generateKeyPair yang baru mengembalikan sebuah Promise, bukan langsung mengembalikan pasangan kunci. Ini karena implementasi baru memanfaatkan Web Crypto API JavaScript sebanyak mungkin, menggunakan implementasi Ed25519 asli. Banyak metode dari Web Crypto API bersifat asinkron. Namun, bagi pengembang JavaScript modern yang akrab dengan Promise, perubahan ini tidak sulit untuk diterima.
Pengiriman transaksi
Kelas Transaction dan VersionedTransaction yang familiar di versi 1.x tidak ada lagi di 2.x.
Metode terkait System Program yang disediakan dalam versi lama juga tidak lagi dipertahankan, sehingga metode statis pada kelas SystemProgram perlu diimpor dari tempat lain.
Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Karena tidak lagi menyediakan kelas, Web3.js menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penggunaan fungsi pipe untuk mengimplementasikan fungsi transfer yang sebelumnya ada di 1.x:
javascript
import { pipe } from "@solana/web3.js";
import { getTransferSolInstruction } from "@solana/system-program";
Dapat dilihat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui penyedia RPC yang kami definisikan untuk menghasilkan fungsi tertentu, kemudian memanggil fungsi tersebut untuk memulai transaksi. Dibandingkan dengan versi 1.x, jumlah kode sedikit meningkat, tetapi memberikan kustomisasi yang lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian dikonfirmasi melalui langganan WSS RPC. Terasa bahwa cara baru ini lebih bergantung pada WSS, percaya bahwa aplikasi WSS di masa depan akan semakin luas, ini juga menuntut stabilitas layanan yang lebih tinggi dari penyedia RPC.
Dukungan React
Perlu dicatat bahwa proyek @solana/web3.js juga mencakup sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook, dengan fitur bawaan seperti signIn.
Ringkasan
Rilis versi 2.x dari @solana/web3.js sepenuhnya menunjukkan komitmen tim Solana untuk perbaikan dan pengembangan yang berkelanjutan. Versi baru ini memberikan cara yang efisien, fleksibel, dan dapat disesuaikan bagi para pengembang untuk berinteraksi dengan jaringan Solana, yang membantu mendorong adopsi dan perkembangan platform tersebut. Meskipun saat ini masih dalam tahap awal, dengan lebih banyak proyek yang bermigrasi dan adaptasi komunitas, dipastikan bahwa versi 2.x akan memainkan peran yang lebih besar di masa depan.
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
Pembaruan besar versi 2.x Solana Web3.js: pemisahan fungsi dan peningkatan kinerja tanpa ketergantungan
Solana Web3.js versi 2.x: Pembaruan besar untuk pustaka JavaScript yang kaya fitur
Solana Web3.js sebagai sebuah pustaka JavaScript yang kuat, secara resmi meluncurkan versi 2.x pada bulan November. Dibandingkan dengan 1.x, versi baru ini membawa banyak perubahan signifikan, artikel ini akan memberikan gambaran utama tentang pembaruan tersebut.
Meskipun versi 2.x baru saja dirilis dan saat ini penggunaannya tidak tinggi, banyak pustaka yang banyak digunakan belum bermigrasi, tetapi memahami perubahan ini sangat penting untuk pekerjaan migrasi di masa depan.
Perbandingan Versi
Tidak dapat disangkal, versi lama lebih sederhana dan langsung digunakan. Versi 1.x hanya mencakup satu paket @solana/web3.js, yang mencakup semua fungsi. Ini didasarkan pada desain kelas, membungkus banyak operasi yang umum digunakan. Misalnya, kelas Connection menyediakan puluhan metode, hampir mencakup semua fungsi yang dibutuhkan pengembang. Selain itu, kode contoh yang kaya dalam buku masak Solana memberikan kenyamanan yang besar bagi pengembang.
Namun, desain ini juga membawa beberapa masalah. Meskipun fitur yang sebenarnya digunakan oleh pengembang mungkin hanya merupakan sebagian kecil, seluruh kode perpustakaan akan diunduh ke perangkat pengguna, dan karena jumlah kode dalam perpustakaan yang sangat besar, ini dapat menyebabkan sedikit keterlambatan saat memuat.
Versi 2.x mengambil pendekatan yang berbeda. Tim resmi membagi repositori kode yang ada menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, dan @solana/transactions. Pada saat yang sama, versi baru ini meninggalkan implementasi berbasis kelas dan lebih banyak menggunakan pendekatan fungsi tunggal. Perubahan ini sangat menguntungkan bagi optimasi saat membangun kode JavaScript, kode yang tidak digunakan akan dihapus dan tidak akan diunduh ke perangkat pengguna. Menurut statistik dari dokumentasi resmi, DApp yang menggunakan versi baru umumnya dapat mencapai optimasi ukuran sebesar 30%, dan untuk aplikasi yang hanya menggunakan sedikit fungsi, rasio optimasi bahkan lebih tinggi.
Perubahan ini juga meningkatkan tuntutan terhadap kualitas dokumentasi tim Solana. Bagaimana cara membuat pengembang cepat menemukan fungsi yang diperlukan menjadi masalah kunci. Saat ini, tampaknya nama paket versi baru memiliki semantik yang baik, sehingga dari namanya saja sudah bisa dipahami secara garis besar kegunaannya, yang pada tingkat tertentu mengurangi kesulitan migrasi bagi pengembang.
Namun, karena versi baru baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif sedikit. Selain itu, versi baru cenderung menggunakan fungsi bawaan runtime (seperti menghasilkan pasangan kunci), tetapi deskripsi tentang bagian-bagian ini dalam dokumentasi kurang memadai, yang dapat menyebabkan kebingungan bagi pengembang dalam beberapa aspek.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Ini mungkin tidak terlalu penting bagi banyak pengguna, tetapi mengingat serangan rantai pasokan yang terjadi pada versi @solana/web3.js 1.95.5 dan 1.95.6 awal bulan Desember tahun ini, mengurangi input dan ketergantungan eksternal dapat secara signifikan mengurangi kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang Web3.js memutuskan untuk lebih banyak menggunakan fungsi bawaan, menghilangkan ketergantungan eksternal dan pengenalan Polyfills. Meskipun mungkin ada perubahan di masa depan, saat ini versi 2.x telah menghilangkan semua ketergantungan eksternal.
Perubahan Utama
cara koneksi
Dalam versi 1.x, kelas Connection menyediakan banyak metode. Fungsinya yang utama adalah untuk membuat pengirim permintaan dengan mengonfigurasi alamat permintaan RPC, kemudian mengirim berbagai permintaan melalui pengirim tersebut.
Versi 2.x menggunakan pendekatan yang lebih fungsional:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat memanggil sendAndConfirmTransaction untuk mengirim transaksi, permintaan HTTPS akan secara otomatis dibuat, dan koneksi WSS akan dibangun untuk berlangganan status transaksi. Setelah transaksi dikonfirmasi, hash transaksi akan dikembalikan.
pengolahan kunci pasangan
Pengolahan yang terkait dengan kunci publik dan kunci pribadi juga telah mengalami perubahan signifikan. Kelas Keypair dan PublicKey yang umum digunakan dalam versi 1.x tidak lagi ada, digantikan oleh serangkaian fungsi.
Misalnya, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan Keypair.generate() sebelumnya.
Perlu dicatat bahwa generateKeyPair yang baru mengembalikan sebuah Promise, bukan langsung mengembalikan pasangan kunci. Ini karena implementasi baru memanfaatkan Web Crypto API JavaScript sebanyak mungkin, menggunakan implementasi Ed25519 asli. Banyak metode dari Web Crypto API bersifat asinkron. Namun, bagi pengembang JavaScript modern yang akrab dengan Promise, perubahan ini tidak sulit untuk diterima.
Pengiriman transaksi
Kelas Transaction dan VersionedTransaction yang familiar di versi 1.x tidak ada lagi di 2.x.
Metode terkait System Program yang disediakan dalam versi lama juga tidak lagi dipertahankan, sehingga metode statis pada kelas SystemProgram perlu diimpor dari tempat lain.
Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Karena tidak lagi menyediakan kelas, Web3.js menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penggunaan fungsi pipe untuk mengimplementasikan fungsi transfer yang sebelumnya ada di 1.x:
javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana/system-program";
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ fromPubkey: pengirim, toPubkey: recipient, lamports: jumlah })) );
const signature = await rpc.sendTransaction(transaction);
Dapat dilihat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui penyedia RPC yang kami definisikan untuk menghasilkan fungsi tertentu, kemudian memanggil fungsi tersebut untuk memulai transaksi. Dibandingkan dengan versi 1.x, jumlah kode sedikit meningkat, tetapi memberikan kustomisasi yang lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian dikonfirmasi melalui langganan WSS RPC. Terasa bahwa cara baru ini lebih bergantung pada WSS, percaya bahwa aplikasi WSS di masa depan akan semakin luas, ini juga menuntut stabilitas layanan yang lebih tinggi dari penyedia RPC.
Dukungan React
Perlu dicatat bahwa proyek @solana/web3.js juga mencakup sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook, dengan fitur bawaan seperti signIn.
Ringkasan
Rilis versi 2.x dari @solana/web3.js sepenuhnya menunjukkan komitmen tim Solana untuk perbaikan dan pengembangan yang berkelanjutan. Versi baru ini memberikan cara yang efisien, fleksibel, dan dapat disesuaikan bagi para pengembang untuk berinteraksi dengan jaringan Solana, yang membantu mendorong adopsi dan perkembangan platform tersebut. Meskipun saat ini masih dalam tahap awal, dengan lebih banyak proyek yang bermigrasi dan adaptasi komunitas, dipastikan bahwa versi 2.x akan memainkan peran yang lebih besar di masa depan.