Solana Web3.js versi 2.x: Pengalaman pemrograman fungsional yang sepenuhnya baru
Solana Web3.js sebagai pustaka JavaScript yang kaya fitur, secara resmi merilis versi 2.x pada bulan November tahun ini. Dibandingkan dengan versi 1.x sebelumnya, versi baru ini mengalami perubahan yang cukup signifikan. Artikel ini akan merangkum perubahan utamanya.
Meskipun versi 2.x baru saja dirilis dan penggunaannya belum meluas, banyak pustaka yang umum digunakan juga belum beralih, tetapi memahami perubahan ini akan sangat bermanfaat untuk pekerjaan migrasi di masa depan.
Perbandingan Versi
Tak dapat dipungkiri, versi lama lebih sederhana dan langsung digunakan. Versi 1.x hanya mencakup satu paket @solana/web3.js, semua fungsi terkonsentrasi di dalamnya. Ini didasarkan pada desain kelas, membungkus banyak operasi umum. Misalnya, kelas Connection, menyediakan puluhan metode, hampir mencakup semua fungsi yang diperlukan pengembang.
Namun, desain ini juga membawa beberapa masalah. Meskipun fitur yang sebenarnya digunakan oleh pengembang mungkin hanya merupakan sebagian kecil, seluruh kode akan diunduh ke perangkat pengguna, dan karena jumlah kode dalam pustaka yang besar, ini dapat memakan waktu.
Sebagai perbandingan, versi 2.x memecah kode sumber yang ada menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, dan lain-lain. Pada saat yang sama, versi baru ini mengabaikan implementasi berbasis kelas, lebih banyak menggunakan pendekatan fungsi tunggal, yang sangat membantu dalam 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 pada dasarnya dapat mencapai optimasi ukuran sebesar 30%, dan jika hanya menggunakan sedikit fungsi, proporsi optimasinya mungkin lebih tinggi.
Ini menuntut kualitas dokumentasi yang lebih tinggi dari tim Solana, dan bagaimana membuat pengembang dengan cepat menemukan fungsi yang diperlukan menjadi topik yang penting. Saat ini, tampaknya nama paket memiliki semantik yang baik, sehingga dari namanya saja kita dapat memahami kegunaannya secara umum, yang dalam beberapa hal mengurangi kesulitan dalam migrasi bagi pengembang.
Karena 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 dokumentasi kurang menjelaskan fungsi-fungsi ini, yang menyebabkan pengembang mungkin merasa bingung dalam beberapa aspek.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Ini mungkin tidak terlalu penting bagi banyak pengguna, tetapi melihat serangan rantai pasokan yang terjadi pada awal Desember tahun ini di versi @solana/web3.js 1.95.5 dan 1.95.6, lebih banyak input dan ketergantungan eksternal akan sangat meningkatkan kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang Web3.js memutuskan untuk lebih banyak menggunakan fungsi asli, menghapus ketergantungan eksternal dan pengenalan Polyfills. Mungkin akan ada perubahan di masa depan, tetapi setidaknya saat ini, versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
Terhubung
Dalam versi 1.x, kelas Connection menyediakan banyak metode. Namun, fungsi intinya adalah untuk membuat pengirim permintaan melalui konfigurasi alamat permintaan RPC, kemudian mengirim berbagai permintaan melalui pengirim tersebut.
Versi 2.x menggunakan pendekatan yang lebih fungsional untuk mewujudkan fungsi ini. Misalnya, ketika memanggil sendAndConfirmTransaction untuk mengirimkan transaksi, permintaan HTTPS akan otomatis dibuat dan koneksi WSS akan dibangun untuk 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 signifikan. Dua kelas yang umum digunakan dalam versi 1.x, Keypair dan PublicKey, tidak lagi ada dan telah digantikan oleh beberapa fungsi.
Misalnya, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan Keypair.generate() sebelumnya. Perlu dicatat bahwa generateKeyPair yang baru mengembalikan Promise, ini karena implementasi baru memanfaatkan Web Crypto API JavaScript sebisa mungkin, menggunakan implementasi Ed25519 native. Banyak metode Web Crypto API bersifat asinkron. Namun, perubahan ini bukanlah hal yang tidak dapat diterima, pada tahun 2024 yang akan segera berakhir ini, para pengembang JavaScript sudah sangat akrab dengan Promise.
Kirim transaksi
Dua kelas Transaction dan VersionedTransaction yang dikenal oleh pengguna versi 1.x tidak lagi ada di versi 2.x.
Metode terkait System Program yang disediakan dalam versi lama tidak lagi ada, sehingga semua metode statis pada kelas SystemProgram perlu diimpor dari tempat lain. Misalnya, instruksi transfer perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Karena class tidak lagi disediakan, Web3.js menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Pengembang dapat menggunakan fungsi pipe untuk mewujudkan fungsi transfer yang sebelumnya ada di versi 1.x.
Perlu dicatat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui penyedia RPC yang ditentukan untuk menghasilkan fungsi khusus, lalu memanggil fungsi tersebut untuk memulai transaksi. Dibandingkan dengan versi 1.x, jumlah kode meningkat, tetapi kustomisasi menjadi lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian konfirmasi hasil transaksi dilakukan melalui langganan WSS RPC. Metode baru ini sangat bergantung pada WSS, dan saya percaya bahwa penggunaan WSS di masa depan akan semakin luas, yang juga menuntut stabilitas layanan yang lebih tinggi dari penyedia RPC.
React
Perlu dicatat bahwa proyek @solana/web3.js juga menyertakan sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook dan memiliki fungsi bawaan seperti signIn.
Ringkasan
Peluncuran versi 2.x dari @solana/web3.js mencerminkan komitmen tim Solana untuk terus berkembang dan memperbaiki. 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.
19 Suka
Hadiah
19
6
Bagikan
Komentar
0/400
CoffeeNFTrader
· 07-18 21:26
Optimasi kinerja? Habis pergi.
Lihat AsliBalas0
ShamedApeSeller
· 07-18 19:03
Lihat apa? Saya masih menggunakan v1.
Lihat AsliBalas0
MemeCoinSavant
· 07-15 21:50
menurut model statistik saya, pergeseran paradigma ini berdasarkan af ngl
Lihat AsliBalas0
MEVHunterZhang
· 07-15 21:45
Akhirnya menunggu rekonstruksi, sudah lama menunggu.
Rilis versi 2.x Solana Web3.js: Rekonstruksi pemrograman fungsional membawa optimisasi yang signifikan
Solana Web3.js versi 2.x: Pengalaman pemrograman fungsional yang sepenuhnya baru
Solana Web3.js sebagai pustaka JavaScript yang kaya fitur, secara resmi merilis versi 2.x pada bulan November tahun ini. Dibandingkan dengan versi 1.x sebelumnya, versi baru ini mengalami perubahan yang cukup signifikan. Artikel ini akan merangkum perubahan utamanya.
Meskipun versi 2.x baru saja dirilis dan penggunaannya belum meluas, banyak pustaka yang umum digunakan juga belum beralih, tetapi memahami perubahan ini akan sangat bermanfaat untuk pekerjaan migrasi di masa depan.
Perbandingan Versi
Tak dapat dipungkiri, versi lama lebih sederhana dan langsung digunakan. Versi 1.x hanya mencakup satu paket @solana/web3.js, semua fungsi terkonsentrasi di dalamnya. Ini didasarkan pada desain kelas, membungkus banyak operasi umum. Misalnya, kelas Connection, menyediakan puluhan metode, hampir mencakup semua fungsi yang diperlukan pengembang.
Namun, desain ini juga membawa beberapa masalah. Meskipun fitur yang sebenarnya digunakan oleh pengembang mungkin hanya merupakan sebagian kecil, seluruh kode akan diunduh ke perangkat pengguna, dan karena jumlah kode dalam pustaka yang besar, ini dapat memakan waktu.
Sebagai perbandingan, versi 2.x memecah kode sumber yang ada menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, dan lain-lain. Pada saat yang sama, versi baru ini mengabaikan implementasi berbasis kelas, lebih banyak menggunakan pendekatan fungsi tunggal, yang sangat membantu dalam 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 pada dasarnya dapat mencapai optimasi ukuran sebesar 30%, dan jika hanya menggunakan sedikit fungsi, proporsi optimasinya mungkin lebih tinggi.
Ini menuntut kualitas dokumentasi yang lebih tinggi dari tim Solana, dan bagaimana membuat pengembang dengan cepat menemukan fungsi yang diperlukan menjadi topik yang penting. Saat ini, tampaknya nama paket memiliki semantik yang baik, sehingga dari namanya saja kita dapat memahami kegunaannya secara umum, yang dalam beberapa hal mengurangi kesulitan dalam migrasi bagi pengembang.
Karena 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 dokumentasi kurang menjelaskan fungsi-fungsi ini, yang menyebabkan pengembang mungkin merasa bingung dalam beberapa aspek.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Ini mungkin tidak terlalu penting bagi banyak pengguna, tetapi melihat serangan rantai pasokan yang terjadi pada awal Desember tahun ini di versi @solana/web3.js 1.95.5 dan 1.95.6, lebih banyak input dan ketergantungan eksternal akan sangat meningkatkan kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang Web3.js memutuskan untuk lebih banyak menggunakan fungsi asli, menghapus ketergantungan eksternal dan pengenalan Polyfills. Mungkin akan ada perubahan di masa depan, tetapi setidaknya saat ini, versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
Terhubung
Dalam versi 1.x, kelas Connection menyediakan banyak metode. Namun, fungsi intinya adalah untuk membuat pengirim permintaan melalui konfigurasi alamat permintaan RPC, kemudian mengirim berbagai permintaan melalui pengirim tersebut.
Versi 2.x menggunakan pendekatan yang lebih fungsional untuk mewujudkan fungsi ini. Misalnya, ketika memanggil sendAndConfirmTransaction untuk mengirimkan transaksi, permintaan HTTPS akan otomatis dibuat dan koneksi WSS akan dibangun untuk 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 signifikan. Dua kelas yang umum digunakan dalam versi 1.x, Keypair dan PublicKey, tidak lagi ada dan telah digantikan oleh beberapa fungsi.
Misalnya, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan Keypair.generate() sebelumnya. Perlu dicatat bahwa generateKeyPair yang baru mengembalikan Promise, ini karena implementasi baru memanfaatkan Web Crypto API JavaScript sebisa mungkin, menggunakan implementasi Ed25519 native. Banyak metode Web Crypto API bersifat asinkron. Namun, perubahan ini bukanlah hal yang tidak dapat diterima, pada tahun 2024 yang akan segera berakhir ini, para pengembang JavaScript sudah sangat akrab dengan Promise.
Kirim transaksi
Dua kelas Transaction dan VersionedTransaction yang dikenal oleh pengguna versi 1.x tidak lagi ada di versi 2.x.
Metode terkait System Program yang disediakan dalam versi lama tidak lagi ada, sehingga semua metode statis pada kelas SystemProgram perlu diimpor dari tempat lain. Misalnya, instruksi transfer perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Karena class tidak lagi disediakan, Web3.js menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Pengembang dapat menggunakan fungsi pipe untuk mewujudkan fungsi transfer yang sebelumnya ada di versi 1.x.
Perlu dicatat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui penyedia RPC yang ditentukan untuk menghasilkan fungsi khusus, lalu memanggil fungsi tersebut untuk memulai transaksi. Dibandingkan dengan versi 1.x, jumlah kode meningkat, tetapi kustomisasi menjadi lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian konfirmasi hasil transaksi dilakukan melalui langganan WSS RPC. Metode baru ini sangat bergantung pada WSS, dan saya percaya bahwa penggunaan WSS di masa depan akan semakin luas, yang juga menuntut stabilitas layanan yang lebih tinggi dari penyedia RPC.
React
Perlu dicatat bahwa proyek @solana/web3.js juga menyertakan sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook dan memiliki fungsi bawaan seperti signIn.
Ringkasan
Peluncuran versi 2.x dari @solana/web3.js mencerminkan komitmen tim Solana untuk terus berkembang dan memperbaiki. Ini memberikan pengembang cara yang efisien, fleksibel, dan dapat disesuaikan untuk berinteraksi dengan jaringan Solana, yang membantu mendorong adopsi dan perkembangan platform tersebut.