Solana Web3.js versi 2.x: Peningkatan besar pada pustaka JavaScript yang kaya fitur
Solana Web3.js sebagai pustaka JavaScript yang kuat, resmi merilis versi 2.x pada bulan November tahun ini. Pembaruan kali ini membawa perubahan signifikan, mari kita ringkas beberapa pembaruan utama.
Meskipun versi 2.x baru saja diluncurkan dan tingkat penggunaannya belum menyebar, banyak pustaka yang umum digunakan juga belum melakukan migrasi. Namun, memahami perubahan ini lebih awal akan sangat membantu dalam persiapan untuk pembaruan di masa depan.
Perbandingan Versi
Tak dapat disangkal, versi lama lebih sederhana dan langsung dalam penggunaan. Versi 1.x hanya mencakup satu paket @solana/web3.js, semua fungsionalitas terpusat di dalamnya. Ini didasarkan pada desain kelas, membungkus banyak operasi umum. Misalnya, kelas Connection menyediakan puluhan metode, hampir mencakup semua fungsionalitas yang diperlukan pengembang. Selain itu, buku masak Solana juga menyediakan banyak contoh kode, memudahkan pengembang untuk mencari fungsionalitas yang dibutuhkan.
Namun, desain ini juga membawa beberapa masalah. Meskipun fungsi yang sebenarnya digunakan oleh pengembang mungkin hanya sebagian kecil dari semuanya, seluruh kode pustaka akan diunduh ke perangkat pengguna, dan karena jumlah kode pustaka yang besar, ini dapat memakan waktu tertentu.
Sebagai perbandingan, versi 2.x mengadopsi pemikiran desain modular. Tim resmi membagi repositori kode yang ada menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, dan lain-lain. Sementara itu, versi baru ini meninggalkan implementasi berbasis kelas dan lebih banyak menggunakan pendekatan fungsi tunggal. Desain ini sangat membantu dalam mengoptimalkan 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 hampir semuanya dapat mencapai optimasi ukuran hingga 30%, dan jika hanya menggunakan sedikit fitur, proporsi optimasi bisa lebih tinggi.
Perubahan ini juga meningkatkan tuntutan terhadap kualitas dokumentasi tim Solana, bagaimana membuat pengembang cepat menemukan fungsi yang dibutuhkan menjadi masalah penting. Saat ini, setidaknya nama paket memiliki semantik yang baik, sehingga dari namanya saja kita bisa memahami kegunaannya secara garis besar. Ini dapat mengurangi kesulitan migrasi bagi pengembang.
Tentu saja, karena baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif sedikit. Selain itu, karena versi baru cenderung menggunakan fitur bawaan runtime (seperti menghasilkan pasangan kunci), deskripsi tentang bagian-bagian ini dalam dokumentasi kurang memadai, yang menyebabkan beberapa bagian mungkin membingungkan bagi para pengembang.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Ini mungkin tidak penting bagi banyak pengguna, tetapi melihat serangan rantai pasokan yang terjadi pada versi @solana/web3.js 1.95.5 dan 1.95.6 awal bulan Desember tahun ini, lebih banyak input dan ketergantungan eksternal secara signifikan dapat meningkatkan 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, setidaknya saat ini versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
terhubung
Seperti yang disebutkan sebelumnya, versi 1.x menyediakan banyak metode melalui Connection. Namun, fungsi utamanya adalah dengan mengonfigurasi alamat permintaan RPC untuk membuat pengirim permintaan, dan kemudian mengirimkan berbagai permintaan melalui pengirim tersebut.
Di 2.x, pendekatan yang lebih fungsional digunakan untuk implementasi:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat kita memanggil "sendAndConfirmTransaction" untuk mengirim transaksi, permintaan HTTPS akan secara otomatis dibuat, dan koneksi WSS akan dibangun, berlangganan status transaksi, dan setelah transaksi dikonfirmasi, hash transaksi akan dikembalikan.
pasangan kunci
Bagian yang terkait dengan kunci publik dan kunci privat juga mengalami perubahan besar. Kelas Keypair dan PublicKey yang umum digunakan dalam versi 1.x tidak lagi ada, digantikan oleh beberapa fungsi.
Misalnya, Anda dapat menggunakan "await generateKeyPair()" untuk menghasilkan pasangan kunci, sedangkan sebelumnya pasangan kunci dihasilkan langsung melalui "Keypair.generate()".
Anda mungkin telah memperhatikan bahwa generateKeyPair yang baru mengembalikan Promise, bukan seperti sebelumnya yang langsung mengembalikan pasangan kunci. Ini karena implementasi baru memanfaatkan API Kripto Web JavaScript sebanyak mungkin, menggunakan implementasi Ed25519 asli. Banyak metode API Kripto Web bersifat asinkron. Namun, perubahan ini bukanlah hal yang tidak dapat diterima, di akhir tahun 2024, para pengembang JavaScript sudah sangat familiar dengan Promise.
Kirim transaksi
Pengguna 1.x mungkin sudah sangat familiar dengan dua kelas "Transaction" dan "VersionedTransaction". Pada awalnya, memahami hubungan antara keduanya saat mengenal Solana bisa membingungkan.
Pada versi 2.x, kedua kelas ini juga tidak ada lagi.
Metode terkait System Program yang disediakan dalam versi lama juga tidak ada lagi, sehingga semua metode statis pada kelas "SystemProgram" perlu diimpor dari tempat lain.
Misalnya perintah "transfer", perlu memanggil fungsi "getTransferSolInstruction" dari "@solana-program/system".
Karena tidak lagi menyediakan class, Web3.js menyediakan bentuk "pipe" yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penerapan fungsi transfer yang sebelumnya ada di versi 1.x menggunakan fungsi pipe:
javascript
import { pipe } from "@solana/web3.js";
import { getTransferSolInstruction } from "@solana/system-program";
Dapat ditemukan bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui RPC Provider yang kami definisikan untuk menghasilkan fungsi unik, dan kemudian memanggil fungsi tersebut untuk memulai transaksi. Jika dibandingkan dengan versi 1.x, jumlah kode meningkat, tetapi keuntungannya adalah kustomisasi menjadi lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian dikonfirmasi hasil transaksinya melalui langganan WSS RPC. Dapat dirasakan bahwa cara baru ini sangat bergantung pada WSS, percaya bahwa aplikasi WSS di masa depan akan semakin luas, ini juga benar-benar meningkatkan tuntutan terhadap stabilitas layanan penyedia RPC.
React
Menariknya, proyek @solana/web3.js juga mencakup sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook dengan fungsi bawaan seperti signIn.
Ringkasan
Rilis versi 2.x dari @solana/web3.js sepenuhnya mencerminkan komitmen tim Solana untuk terus berkembang dan meningkatkan. Ini memberikan pengembang cara yang efisien, fleksibel, dan dapat disesuaikan untuk berinteraksi dengan jaringan Solana, yang membantu mendorong adopsi dan perkembangan platform tersebut.
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.
11 Suka
Hadiah
11
6
Bagikan
Komentar
0/400
RetiredMiner
· 08-01 03:21
Sudah berumur tapi masih mengutak-atik versi baru
Lihat AsliBalas0
IntrovertMetaverse
· 07-31 08:40
Upgrade cepat, hanya saja tidak ada yang menggunakannya.
Lihat AsliBalas0
LeverageAddict
· 07-29 23:23
Membunuh tim proyek lama
Lihat AsliBalas0
OnchainHolmes
· 07-29 23:22
Akhirnya menunggu, sudah pergi.
Lihat AsliBalas0
TokenVelocityTrauma
· 07-29 23:21
Upgrade dan sejenisnya terlalu merepotkan, selamat tinggal.
Solana Web3.js versi 2.x mengalami peningkatan besar: desain modular meningkatkan kinerja dan keamanan
Solana Web3.js versi 2.x: Peningkatan besar pada pustaka JavaScript yang kaya fitur
Solana Web3.js sebagai pustaka JavaScript yang kuat, resmi merilis versi 2.x pada bulan November tahun ini. Pembaruan kali ini membawa perubahan signifikan, mari kita ringkas beberapa pembaruan utama.
Meskipun versi 2.x baru saja diluncurkan dan tingkat penggunaannya belum menyebar, banyak pustaka yang umum digunakan juga belum melakukan migrasi. Namun, memahami perubahan ini lebih awal akan sangat membantu dalam persiapan untuk pembaruan di masa depan.
Perbandingan Versi
Tak dapat disangkal, versi lama lebih sederhana dan langsung dalam penggunaan. Versi 1.x hanya mencakup satu paket @solana/web3.js, semua fungsionalitas terpusat di dalamnya. Ini didasarkan pada desain kelas, membungkus banyak operasi umum. Misalnya, kelas Connection menyediakan puluhan metode, hampir mencakup semua fungsionalitas yang diperlukan pengembang. Selain itu, buku masak Solana juga menyediakan banyak contoh kode, memudahkan pengembang untuk mencari fungsionalitas yang dibutuhkan.
Namun, desain ini juga membawa beberapa masalah. Meskipun fungsi yang sebenarnya digunakan oleh pengembang mungkin hanya sebagian kecil dari semuanya, seluruh kode pustaka akan diunduh ke perangkat pengguna, dan karena jumlah kode pustaka yang besar, ini dapat memakan waktu tertentu.
Sebagai perbandingan, versi 2.x mengadopsi pemikiran desain modular. Tim resmi membagi repositori kode yang ada menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, dan lain-lain. Sementara itu, versi baru ini meninggalkan implementasi berbasis kelas dan lebih banyak menggunakan pendekatan fungsi tunggal. Desain ini sangat membantu dalam mengoptimalkan 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 hampir semuanya dapat mencapai optimasi ukuran hingga 30%, dan jika hanya menggunakan sedikit fitur, proporsi optimasi bisa lebih tinggi.
Perubahan ini juga meningkatkan tuntutan terhadap kualitas dokumentasi tim Solana, bagaimana membuat pengembang cepat menemukan fungsi yang dibutuhkan menjadi masalah penting. Saat ini, setidaknya nama paket memiliki semantik yang baik, sehingga dari namanya saja kita bisa memahami kegunaannya secara garis besar. Ini dapat mengurangi kesulitan migrasi bagi pengembang.
Tentu saja, karena baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif sedikit. Selain itu, karena versi baru cenderung menggunakan fitur bawaan runtime (seperti menghasilkan pasangan kunci), deskripsi tentang bagian-bagian ini dalam dokumentasi kurang memadai, yang menyebabkan beberapa bagian mungkin membingungkan bagi para pengembang.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Ini mungkin tidak penting bagi banyak pengguna, tetapi melihat serangan rantai pasokan yang terjadi pada versi @solana/web3.js 1.95.5 dan 1.95.6 awal bulan Desember tahun ini, lebih banyak input dan ketergantungan eksternal secara signifikan dapat meningkatkan 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, setidaknya saat ini versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
terhubung
Seperti yang disebutkan sebelumnya, versi 1.x menyediakan banyak metode melalui Connection. Namun, fungsi utamanya adalah dengan mengonfigurasi alamat permintaan RPC untuk membuat pengirim permintaan, dan kemudian mengirimkan berbagai permintaan melalui pengirim tersebut.
Di 2.x, pendekatan yang lebih fungsional digunakan untuk implementasi:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat kita memanggil "sendAndConfirmTransaction" untuk mengirim transaksi, permintaan HTTPS akan secara otomatis dibuat, dan koneksi WSS akan dibangun, berlangganan status transaksi, dan setelah transaksi dikonfirmasi, hash transaksi akan dikembalikan.
pasangan kunci
Bagian yang terkait dengan kunci publik dan kunci privat juga mengalami perubahan besar. Kelas Keypair dan PublicKey yang umum digunakan dalam versi 1.x tidak lagi ada, digantikan oleh beberapa fungsi.
Misalnya, Anda dapat menggunakan "await generateKeyPair()" untuk menghasilkan pasangan kunci, sedangkan sebelumnya pasangan kunci dihasilkan langsung melalui "Keypair.generate()".
Anda mungkin telah memperhatikan bahwa generateKeyPair yang baru mengembalikan Promise, bukan seperti sebelumnya yang langsung mengembalikan pasangan kunci. Ini karena implementasi baru memanfaatkan API Kripto Web JavaScript sebanyak mungkin, menggunakan implementasi Ed25519 asli. Banyak metode API Kripto Web bersifat asinkron. Namun, perubahan ini bukanlah hal yang tidak dapat diterima, di akhir tahun 2024, para pengembang JavaScript sudah sangat familiar dengan Promise.
Kirim transaksi
Pengguna 1.x mungkin sudah sangat familiar dengan dua kelas "Transaction" dan "VersionedTransaction". Pada awalnya, memahami hubungan antara keduanya saat mengenal Solana bisa membingungkan.
Pada versi 2.x, kedua kelas ini juga tidak ada lagi.
Metode terkait System Program yang disediakan dalam versi lama juga tidak ada lagi, sehingga semua metode statis pada kelas "SystemProgram" perlu diimpor dari tempat lain.
Misalnya perintah "transfer", perlu memanggil fungsi "getTransferSolInstruction" dari "@solana-program/system".
Karena tidak lagi menyediakan class, Web3.js menyediakan bentuk "pipe" yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penerapan fungsi transfer yang sebelumnya ada di versi 1.x menggunakan fungsi pipe:
javascript import { pipe } from "@solana/web3.js"; import { getTransferSolInstruction } from "@solana/system-program";
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ dari: senderPublicKey, ke: recipientPublicKey, jumlah: lamports, })), setComputeUnitLimit(200_000), addSignature(senderSignature) );
const signature = await sendAndConfirmTransaction(rpc, transaction);
Dapat ditemukan bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui RPC Provider yang kami definisikan untuk menghasilkan fungsi unik, dan kemudian memanggil fungsi tersebut untuk memulai transaksi. Jika dibandingkan dengan versi 1.x, jumlah kode meningkat, tetapi keuntungannya adalah kustomisasi menjadi lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian dikonfirmasi hasil transaksinya melalui langganan WSS RPC. Dapat dirasakan bahwa cara baru ini sangat bergantung pada WSS, percaya bahwa aplikasi WSS di masa depan akan semakin luas, ini juga benar-benar meningkatkan tuntutan terhadap stabilitas layanan penyedia RPC.
React
Menariknya, proyek @solana/web3.js juga mencakup sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook dengan fungsi bawaan seperti signIn.
Ringkasan
Rilis versi 2.x dari @solana/web3.js sepenuhnya mencerminkan komitmen tim Solana untuk terus berkembang dan meningkatkan. Ini memberikan pengembang cara yang efisien, fleksibel, dan dapat disesuaikan untuk berinteraksi dengan jaringan Solana, yang membantu mendorong adopsi dan perkembangan platform tersebut.