Solana Web3.js 2.x versi: 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 1.x, versi baru ini membawa serangkaian perubahan besar, artikel ini akan merangkum perubahan utamanya.
Meskipun versi 2.x baru saja dirilis dan penggunaan masih belum umum, banyak pustaka yang banyak digunakan juga belum bermigrasi. Namun, memahami perubahan ini di awal akan sangat bermanfaat untuk pekerjaan migrasi di masa depan.
Perbandingan Versi
Tidak dapat disangkal, versi lama lebih sederhana dan langsung digunakan. Versi 1.x hanya terdiri dari satu paket @solana/web3.js, semua fungsi terpusat di dalamnya. Ini didasarkan pada desain kelas, membungkus banyak operasi yang umum digunakan. Misalnya, kelas Connection menyediakan puluhan metode yang hampir mencakup semua fungsi yang dibutuhkan pengembang. Selain itu, contoh kode yang kaya dalam buku masak Solana juga memberikan kemudahan besar bagi pengembang.
Namun, desain ini juga membawa beberapa masalah: meskipun fungsi yang sebenarnya digunakan oleh pengembang mungkin hanya sebagian kecil, seluruh pustaka kode akan diunduh ke perangkat pengguna, dan karena jumlah kode pustaka yang besar, ini dapat menyebabkan waktu pemuatan yang cukup lama.
Sebagai perbandingan, versi 2.x mengadopsi pendekatan 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 lainnya. Sementara itu, versi baru meninggalkan implementasi berbasis kelas dan beralih ke penggunaan fungsi tunggal, yang sangat membantu dalam mengoptimalkan pembangunan 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 jika hanya menggunakan sedikit fitur, rasio optimasi bisa lebih tinggi.
Perubahan ini juga meningkatkan tuntutan terhadap kualitas dokumentasi tim Solana. Bagaimana cara membuat pengembang dengan cepat menemukan fungsi yang dibutuhkan menjadi masalah kunci. Saat ini, tampaknya penamaan setiap paket memiliki semantik yang baik, sehingga dari namanya saja dapat diperkirakan kegunaannya, yang pada gilirannya mengurangi kesulitan migrasi bagi pengembang.
Namun, karena versi baru baru saja dirilis, banyak proyek yang belum menyelesaikan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif terbatas. Selain itu, versi baru cenderung menggunakan fungsi bawaan runtime (seperti menghasilkan pasangan kunci), tetapi deskripsi tentang bagian-bagian ini dalam dokumentasi tidak cukup rinci, yang dapat membuat pengembang merasa bingung.
Fitur penting lainnya dari versi 2.x adalah ketergantungan nol. Hal ini mungkin tidak terlalu berdampak pada pengguna biasa, tetapi melihat serangan rantai pasokan yang terjadi pada awal Desember tahun ini di versi @solana/web3.js 1.95.5 dan 1.95.6, terlalu banyak input dan ketergantungan eksternal dapat secara signifikan meningkatkan risiko kejadian keamanan. Dengan rilis versi 2.x, tim pengembang Web3.js memutuskan untuk lebih memanfaatkan fitur bawaan, mengurangi ketergantungan eksternal dan pengenalan Polyfills. Meskipun mungkin ada perubahan di masa depan, saat ini versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
menghubungkan
Dalam versi 1.x, kelas Connection menyediakan banyak metode. Namun, fungsi intinya tetap untuk membuat pengirim permintaan dengan mengonfigurasi alamat permintaan RPC, dan kemudian mengirim berbagai permintaan melalui pengirim tersebut.
Versi 2.x menggunakan cara yang lebih fungsional untuk mengimplementasikan fungsi ini:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat kita memanggil sendAndConfirmTransaction untuk mengirim transaksi, itu akan secara otomatis memulai permintaan HTTPS dan membangun koneksi WSS untuk berlangganan status transaksi, dan setelah transaksi dikonfirmasi, mengembalikan hash transaksi.
pasangan kunci
Bagian yang terkait dengan kunci publik dan kunci pribadi juga mengalami perubahan besar. Kelas Keypair dan PublicKey yang biasa digunakan dalam versi 1.x tidak lagi ada, digantikan oleh beberapa fungsi.
Misalnya, Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan Keypair.generate() sebelumnya.
Perlu dicatat bahwa generateKeyPair yang baru mengembalikan Promise, bukan langsung mengembalikan pasangan kunci. Ini karena implementasi baru memanfaatkan Web Crypto API JavaScript sebisa mungkin, menggunakan implementasi Ed25519 asli. Banyak metode dari Web Crypto API bersifat asinkron. Namun, bagi pengembang JavaScript yang akrab dengan Promise, perubahan ini seharusnya tidak sulit untuk diadaptasi.
kirim transaksi
Kelas Transaction dan VersionedTransaction di versi 1.x tidak ada lagi di 2.x.
Metode terkait Program Sistem yang disediakan dalam versi lama juga tidak ada lagi, metode statis pada kelas SystemProgram perlu diimpor dari tempat lain.
Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction di @solana-program/system.
Karena tidak lagi menyediakan kelas, Web3.js menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penerapan 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 RPC Provider yang kami definisikan untuk menghasilkan fungsi tertentu, dan kemudian memanggil fungsi tersebut untuk memulai transaksi. Dibandingkan dengan versi 1.x, jumlah kode telah meningkat, tetapi kustomisasi menjadi lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian dikonfirmasi hasil transaksinya melalui langganan WSS RPC. Kita dapat merasakan bahwa cara baru ini sangat bergantung pada WSS, dan percaya bahwa aplikasi WSS di masa depan akan semakin luas, yang juga menuntut stabilitas layanan dari penyedia RPC.
Dukungan React
Perlu dicatat bahwa dalam proyek @solana/web3.js juga terdapat sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook dengan fungsi bawaan seperti signIn.
Ringkasan
Peluncuran versi 2.x dari @solana/web3.js menunjukkan komitmen tim Solana terhadap pengembangan dan perbaikan yang berkelanjutan. Versi baru ini memberikan pengembang cara yang efisien, fleksibel, dan dapat disesuaikan untuk berinteraksi dengan jaringan Solana, yang diharapkan dapat mendorong adopsi dan perkembangan platform tersebut.
This page may contain third-party content, which is provided for information purposes only (not representations/warranties) and should not be considered as an endorsement of its views by Gate, nor as financial or professional advice. See Disclaimer for details.
7 Suka
Hadiah
7
5
Bagikan
Komentar
0/400
RugPullSurvivor
· 16jam yang lalu
Mengubah sama saja dengan tidak mengubah... lebih baik menulis ulang semuanya.
Solana Web3.js versi 2.x: Peningkatan besar dalam desain modular dan pemrograman fungsional
Solana Web3.js 2.x versi: 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 1.x, versi baru ini membawa serangkaian perubahan besar, artikel ini akan merangkum perubahan utamanya.
Meskipun versi 2.x baru saja dirilis dan penggunaan masih belum umum, banyak pustaka yang banyak digunakan juga belum bermigrasi. Namun, memahami perubahan ini di awal akan sangat bermanfaat untuk pekerjaan migrasi di masa depan.
Perbandingan Versi
Tidak dapat disangkal, versi lama lebih sederhana dan langsung digunakan. Versi 1.x hanya terdiri dari satu paket @solana/web3.js, semua fungsi terpusat di dalamnya. Ini didasarkan pada desain kelas, membungkus banyak operasi yang umum digunakan. Misalnya, kelas Connection menyediakan puluhan metode yang hampir mencakup semua fungsi yang dibutuhkan pengembang. Selain itu, contoh kode yang kaya dalam buku masak Solana juga memberikan kemudahan besar bagi pengembang.
Namun, desain ini juga membawa beberapa masalah: meskipun fungsi yang sebenarnya digunakan oleh pengembang mungkin hanya sebagian kecil, seluruh pustaka kode akan diunduh ke perangkat pengguna, dan karena jumlah kode pustaka yang besar, ini dapat menyebabkan waktu pemuatan yang cukup lama.
Sebagai perbandingan, versi 2.x mengadopsi pendekatan 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 lainnya. Sementara itu, versi baru meninggalkan implementasi berbasis kelas dan beralih ke penggunaan fungsi tunggal, yang sangat membantu dalam mengoptimalkan pembangunan 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 jika hanya menggunakan sedikit fitur, rasio optimasi bisa lebih tinggi.
Perubahan ini juga meningkatkan tuntutan terhadap kualitas dokumentasi tim Solana. Bagaimana cara membuat pengembang dengan cepat menemukan fungsi yang dibutuhkan menjadi masalah kunci. Saat ini, tampaknya penamaan setiap paket memiliki semantik yang baik, sehingga dari namanya saja dapat diperkirakan kegunaannya, yang pada gilirannya mengurangi kesulitan migrasi bagi pengembang.
Namun, karena versi baru baru saja dirilis, banyak proyek yang belum menyelesaikan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif terbatas. Selain itu, versi baru cenderung menggunakan fungsi bawaan runtime (seperti menghasilkan pasangan kunci), tetapi deskripsi tentang bagian-bagian ini dalam dokumentasi tidak cukup rinci, yang dapat membuat pengembang merasa bingung.
Fitur penting lainnya dari versi 2.x adalah ketergantungan nol. Hal ini mungkin tidak terlalu berdampak pada pengguna biasa, tetapi melihat serangan rantai pasokan yang terjadi pada awal Desember tahun ini di versi @solana/web3.js 1.95.5 dan 1.95.6, terlalu banyak input dan ketergantungan eksternal dapat secara signifikan meningkatkan risiko kejadian keamanan. Dengan rilis versi 2.x, tim pengembang Web3.js memutuskan untuk lebih memanfaatkan fitur bawaan, mengurangi ketergantungan eksternal dan pengenalan Polyfills. Meskipun mungkin ada perubahan di masa depan, saat ini versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
menghubungkan
Dalam versi 1.x, kelas Connection menyediakan banyak metode. Namun, fungsi intinya tetap untuk membuat pengirim permintaan dengan mengonfigurasi alamat permintaan RPC, dan kemudian mengirim berbagai permintaan melalui pengirim tersebut.
Versi 2.x menggunakan cara yang lebih fungsional untuk mengimplementasikan fungsi ini:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat kita memanggil sendAndConfirmTransaction untuk mengirim transaksi, itu akan secara otomatis memulai permintaan HTTPS dan membangun koneksi WSS untuk berlangganan status transaksi, dan setelah transaksi dikonfirmasi, mengembalikan hash transaksi.
pasangan kunci
Bagian yang terkait dengan kunci publik dan kunci pribadi juga mengalami perubahan besar. Kelas Keypair dan PublicKey yang biasa digunakan dalam versi 1.x tidak lagi ada, digantikan oleh beberapa fungsi.
Misalnya, Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan Keypair.generate() sebelumnya.
Perlu dicatat bahwa generateKeyPair yang baru mengembalikan Promise, bukan langsung mengembalikan pasangan kunci. Ini karena implementasi baru memanfaatkan Web Crypto API JavaScript sebisa mungkin, menggunakan implementasi Ed25519 asli. Banyak metode dari Web Crypto API bersifat asinkron. Namun, bagi pengembang JavaScript yang akrab dengan Promise, perubahan ini seharusnya tidak sulit untuk diadaptasi.
kirim transaksi
Kelas Transaction dan VersionedTransaction di versi 1.x tidak ada lagi di 2.x.
Metode terkait Program Sistem yang disediakan dalam versi lama juga tidak ada lagi, metode statis pada kelas SystemProgram perlu diimpor dari tempat lain.
Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction di @solana-program/system.
Karena tidak lagi menyediakan kelas, Web3.js menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penerapan 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: penerima, lamports: jumlah })) );
const signature = await sendAndConfirmTransaction(rpc, transaction, [senderKeypair]);
Dapat dilihat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui RPC Provider yang kami definisikan untuk menghasilkan fungsi tertentu, dan kemudian memanggil fungsi tersebut untuk memulai transaksi. Dibandingkan dengan versi 1.x, jumlah kode telah meningkat, tetapi kustomisasi menjadi lebih kuat.
Transaksi dimulai melalui HTTPS RPC, kemudian dikonfirmasi hasil transaksinya melalui langganan WSS RPC. Kita dapat merasakan bahwa cara baru ini sangat bergantung pada WSS, dan percaya bahwa aplikasi WSS di masa depan akan semakin luas, yang juga menuntut stabilitas layanan dari penyedia RPC.
Dukungan React
Perlu dicatat bahwa dalam proyek @solana/web3.js juga terdapat sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook dengan fungsi bawaan seperti signIn.
Ringkasan
Peluncuran versi 2.x dari @solana/web3.js menunjukkan komitmen tim Solana terhadap pengembangan dan perbaikan yang berkelanjutan. Versi baru ini memberikan pengembang cara yang efisien, fleksibel, dan dapat disesuaikan untuk berinteraksi dengan jaringan Solana, yang diharapkan dapat mendorong adopsi dan perkembangan platform tersebut.