Solana Web3.js versi 2.x: Fitur yang lebih kuat, kinerja yang lebih dioptimalkan
Solana Web3.js sebagai perpustakaan JavaScript yang kaya fitur, secara resmi meluncurkan versi 2.x pada bulan November tahun ini. Versi baru ini mengalami perubahan signifikan dibandingkan dengan versi 1.x, artikel ini akan merangkum perubahan utamanya.
Meskipun versi 2.x baru saja dirilis dan penggunaan masih rendah, banyak pustaka yang banyak digunakan juga belum beralih, tetapi memahami perubahan ini akan membantu dalam pekerjaan migrasi di masa depan.
Perbandingan Versi
Versi 1.x mudah digunakan, hanya memiliki satu paket: @solana/web3.js, semua fungsinya terpusat di dalamnya. Ini didasarkan pada desain kelas, mengemas banyak operasi yang umum digunakan. Misalnya, kelas Connection menyediakan puluhan metode, hampir mencakup semua fungsi yang dibutuhkan pengembang.
Namun, desain ini juga membawa beberapa masalah. Meskipun fitur yang sebenarnya digunakan oleh pengembang mungkin hanya merupakan sebagian kecil, seluruh kode sumber akan diunduh ke perangkat pengguna, dan karena jumlah kodenya yang besar, ini dapat menyebabkan waktu pemuatan yang cukup lama.
Sebagai perbandingan, versi 2.x membagi repositori kode 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 meninggalkan implementasi berbasis kelas dan lebih banyak menggunakan pendekatan fungsi tunggal. Desain ini mendukung optimalisasi saat membangun kode JavaScript, kode yang tidak digunakan akan dihapus dan tidak akan diunduh ke perangkat pengguna. Statistik dari dokumentasi resmi menunjukkan bahwa DApp yang menggunakan versi baru biasanya dapat memperoleh optimalisasi ukuran sebesar 30%, dan jika hanya menggunakan sedikit fungsi, rasio optimalisasi mungkin lebih tinggi.
Perubahan ini memberikan tantangan baru bagi tim Solana dalam penulisan dokumentasi, bagaimana membuat pengembang cepat menemukan fungsi yang dibutuhkan menjadi masalah penting. Namun, saat ini tampaknya penamaan berbagai paket memiliki semantik yang baik, sehingga dari namanya saja kita bisa memahami secara garis besar kegunaannya, yang pada gilirannya mengurangi kesulitan migrasi bagi pengembang.
Karena versi baru baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga cukup 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 mungkin membuat pengembang merasa bingung.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Hal ini mungkin tidak terlalu 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, semakin banyak input dan ketergantungan eksternal akan secara signifikan meningkatkan kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang Web3.js memutuskan untuk lebih banyak menggunakan fungsi bawaan, menghapus 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
terhubung
Dalam versi 1.x, Connection menyediakan banyak metode. Namun, fungsi utamanya adalah membuat pengirim permintaan melalui pengaturan alamat permintaan RPC, dan kemudian mengirimkan berbagai permintaan melalui pengirim tersebut.
Versi 2.x mengadopsi cara yang lebih fungsional untuk diimplementasikan:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat memanggil sendAndConfirmTransaction untuk mengirim transaksi, permintaan HTTPS akan secara otomatis diajukan dan koneksi WSS akan dibangun untuk berlangganan status transaksi. 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, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, sementara sebelumnya langsung menggunakan Keypair.generate().
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 yang asli. Banyak metode dalam Web Crypto API bersifat asinkron. Namun, perubahan ini bukanlah hal yang tidak dapat diterima, pada akhir tahun 2024 ini, pengembang JavaScript sudah sangat familiar dengan Promise.
mengirim transaksi
Kelas Transaction dan VersionedTransaction dalam versi 1.x tidak ada lagi di versi 2.x.
Metode terkait System Program yang disediakan dalam versi lama juga tidak ada lagi, jadi semua metode statis pada kelas SystemProgram perlu diimpor dari tempat lain.
Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Karena kelas tidak lagi disediakan, 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-program/system";
Dapat dilihat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui RPC Provider yang kami definisikan untuk menghasilkan fungsi unik, 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 dikonfirmasi melalui langganan WSS RPC. Dapat dirasakan bahwa cara baru ini sangat bergantung pada WSS, percaya bahwa aplikasi WSS di masa depan akan semakin luas, yang memang menuntut stabilitas layanan dari penyedia RPC.
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
Rilisan versi 2.x dari @solana/web3.js dengan jelas 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.
14 Suka
Hadiah
14
6
Bagikan
Komentar
0/400
BrokenDAO
· 07-17 17:49
Upgrade itu keren, tapi siapa yang berani melompat pertama kali?
Lihat AsliBalas0
MetaverseVagabond
· 07-17 17:47
Stabil sekarang, menulis kode jadi lebih nyaman.
Lihat AsliBalas0
NonFungibleDegen
· 07-17 17:42
bullish af pada solana sejujurnya... v2 akan mengirimnya ser
Lihat AsliBalas0
GasFeeNightmare
· 07-17 17:39
Malam-malam masih memantau pergerakan gas sol... Kapan bisa turun ke 1gwei?
Solana Web3.js 2.x dirilis: Desain modular meningkatkan kinerja dan keamanan
Solana Web3.js versi 2.x: Fitur yang lebih kuat, kinerja yang lebih dioptimalkan
Solana Web3.js sebagai perpustakaan JavaScript yang kaya fitur, secara resmi meluncurkan versi 2.x pada bulan November tahun ini. Versi baru ini mengalami perubahan signifikan dibandingkan dengan versi 1.x, artikel ini akan merangkum perubahan utamanya.
Meskipun versi 2.x baru saja dirilis dan penggunaan masih rendah, banyak pustaka yang banyak digunakan juga belum beralih, tetapi memahami perubahan ini akan membantu dalam pekerjaan migrasi di masa depan.
Perbandingan Versi
Versi 1.x mudah digunakan, hanya memiliki satu paket: @solana/web3.js, semua fungsinya terpusat di dalamnya. Ini didasarkan pada desain kelas, mengemas banyak operasi yang umum digunakan. Misalnya, kelas Connection menyediakan puluhan metode, hampir mencakup semua fungsi yang dibutuhkan pengembang.
Namun, desain ini juga membawa beberapa masalah. Meskipun fitur yang sebenarnya digunakan oleh pengembang mungkin hanya merupakan sebagian kecil, seluruh kode sumber akan diunduh ke perangkat pengguna, dan karena jumlah kodenya yang besar, ini dapat menyebabkan waktu pemuatan yang cukup lama.
Sebagai perbandingan, versi 2.x membagi repositori kode 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 meninggalkan implementasi berbasis kelas dan lebih banyak menggunakan pendekatan fungsi tunggal. Desain ini mendukung optimalisasi saat membangun kode JavaScript, kode yang tidak digunakan akan dihapus dan tidak akan diunduh ke perangkat pengguna. Statistik dari dokumentasi resmi menunjukkan bahwa DApp yang menggunakan versi baru biasanya dapat memperoleh optimalisasi ukuran sebesar 30%, dan jika hanya menggunakan sedikit fungsi, rasio optimalisasi mungkin lebih tinggi.
Perubahan ini memberikan tantangan baru bagi tim Solana dalam penulisan dokumentasi, bagaimana membuat pengembang cepat menemukan fungsi yang dibutuhkan menjadi masalah penting. Namun, saat ini tampaknya penamaan berbagai paket memiliki semantik yang baik, sehingga dari namanya saja kita bisa memahami secara garis besar kegunaannya, yang pada gilirannya mengurangi kesulitan migrasi bagi pengembang.
Karena versi baru baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga cukup 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 mungkin membuat pengembang merasa bingung.
Fitur penting lainnya dari versi 2.x adalah tanpa ketergantungan. Hal ini mungkin tidak terlalu 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, semakin banyak input dan ketergantungan eksternal akan secara signifikan meningkatkan kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang Web3.js memutuskan untuk lebih banyak menggunakan fungsi bawaan, menghapus 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
terhubung
Dalam versi 1.x, Connection menyediakan banyak metode. Namun, fungsi utamanya adalah membuat pengirim permintaan melalui pengaturan alamat permintaan RPC, dan kemudian mengirimkan berbagai permintaan melalui pengirim tersebut.
Versi 2.x mengadopsi cara yang lebih fungsional untuk diimplementasikan:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Saat memanggil sendAndConfirmTransaction untuk mengirim transaksi, permintaan HTTPS akan secara otomatis diajukan dan koneksi WSS akan dibangun untuk berlangganan status transaksi. 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, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, sementara sebelumnya langsung menggunakan Keypair.generate().
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 yang asli. Banyak metode dalam Web Crypto API bersifat asinkron. Namun, perubahan ini bukanlah hal yang tidak dapat diterima, pada akhir tahun 2024 ini, pengembang JavaScript sudah sangat familiar dengan Promise.
mengirim transaksi
Kelas Transaction dan VersionedTransaction dalam versi 1.x tidak ada lagi di versi 2.x.
Metode terkait System Program yang disediakan dalam versi lama juga tidak ada lagi, jadi semua metode statis pada kelas SystemProgram perlu diimpor dari tempat lain.
Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Karena kelas tidak lagi disediakan, 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-program/system";
const transaction = pipe( createTransaction({ version: 0 }), addInstruction( getTransferSolInstruction({ fromPublicKey, toPublicKey, lamports, }) ) );
Dapat dilihat bahwa transaksi tidak lagi dimulai melalui Connection, melainkan melalui RPC Provider yang kami definisikan untuk menghasilkan fungsi unik, 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 dikonfirmasi melalui langganan WSS RPC. Dapat dirasakan bahwa cara baru ini sangat bergantung pada WSS, percaya bahwa aplikasi WSS di masa depan akan semakin luas, yang memang menuntut stabilitas layanan dari penyedia RPC.
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
Rilisan versi 2.x dari @solana/web3.js dengan jelas 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.