Solana Web3.js 2.x: Bab Baru Pemrograman Fungsional
Perpustakaan Solana Web3.js resmi merilis versi 2.x pada bulan November tahun ini. Dibandingkan dengan versi 1.x, versi baru ini mengalami perubahan signifikan dalam struktur dan cara penggunaan. Artikel ini akan merangkum perubahan utama ini untuk membantu pengembang mempersiapkan kemungkinan migrasi di masa depan.
Perbandingan Versi
Penggunaan versi 1.x relatif sederhana, hanya diperlukan satu paket @solana/web3.js untuk mencakup semua fungsi. Ini didasarkan pada desain kelas, seperti kelas Connection, yang menawarkan puluhan metode, hampir mencakup semua fungsi yang diperlukan oleh pengembang. Namun, desain ini juga membawa beberapa masalah, seperti ukuran kode yang terlalu besar, meskipun pengembang hanya menggunakan sedikit fungsi, seluruh perpustakaan akan diunduh ke perangkat pengguna.
Versi 2.x mengambil pendekatan yang berbeda. Tim resmi membagi repositori kode menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, dan lainnya. Versi baru ini meninggalkan implementasi berbasis kelas dan beralih ke penggunaan fungsi tunggal, yang menguntungkan untuk optimasi saat membangun kode JavaScript. Kode yang tidak digunakan akan dihapus dan tidak akan diunduh ke perangkat pengguna. Menurut statistik resmi, DApp yang menggunakan versi baru biasanya dapat mencapai optimasi ukuran hingga 30%, dan jika hanya menggunakan sedikit fungsi, proporsi optimasi bisa lebih tinggi.
Perubahan ini menuntut kualitas dokumentasi yang lebih tinggi dari tim Solana. Bagaimana membantu pengembang dengan cepat menemukan fungsi yang diperlukan menjadi masalah kunci. Saat ini, penamaan setiap paket memiliki semantik yang baik, sehingga dari namanya bisa diperkirakan kegunaannya, yang dalam beberapa hal mengurangi kesulitan migrasi bagi pengembang.
Namun, karena versi 2.x baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif sedikit. Versi baru cenderung menggunakan fungsi bawaan runtime (seperti menghasilkan pasangan kunci), tetapi dokumentasi tentang hal ini kurang, yang mungkin membingungkan beberapa pengembang.
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 versi @solana/web3.js 1.95.5 dan 1.95.6 pada awal Desember 2023, lebih banyak input dan ketergantungan eksternal akan secara signifikan meningkatkan kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang memutuskan untuk lebih banyak menggunakan fungsi bawaan, menghilangkan ketergantungan eksternal dan pengenalan Polyfills. Saat ini, versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
menghubungkan
Pada versi 2.x, implementasi koneksi menggunakan pendekatan yang lebih fungsional:
javascript
import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
Saat memanggil sendAndConfirmTransaction untuk mengirim transaksi, secara otomatis akan memulai permintaan HTTPS dan membangun koneksi WSS untuk berlangganan status transaksi, dan setelah transaksi dikonfirmasi, mengembalikan hash transaksi.
pasangan kunci
Dalam versi 2.x, kelas Keypair dan PublicKey yang ada sebelumnya telah digantikan oleh beberapa fungsi. Misalnya, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan lagi Keypair.generate() sebelumnya.
generateKeyPair yang baru mengembalikan Promise, ini karena implementasi baru memanfaatkan API Web Crypto JavaScript sebisa mungkin, menggunakan implementasi Ed25519 asli. Banyak metode dari API Web Crypto bersifat asinkron.
Kirim transaksi
Versi 2.x tidak lagi menggunakan kelas Transaction dan VersionedTransaction. Metode terkait Program Sistem juga tidak lagi ada, dan perlu diimpor dari tempat lain. Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Versi baru menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penggunaan fungsi pipe untuk mengimplementasikan fitur transfer.
javascript
import { pipe } from '@solana/functional';
import { getTransferSolInstruction } from '@solana/programs';
Dibandingkan dengan versi 1.x, jumlah kode sedikit meningkat, tetapi menawarkan kustomisasi yang lebih kuat.
Dukungan React
Proyek @solana/web3.js juga mencakup sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook, dilengkapi dengan fungsi-fungsi 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 cara yang efisien, fleksibel, dan dapat disesuaikan bagi para pengembang 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.
11 Suka
Hadiah
11
6
Bagikan
Komentar
0/400
OPsychology
· 4jam yang lalu
Cepat sekali menggulung, siapa yang belum menulis beberapa baris kode?
Lihat AsliBalas0
ShibaSunglasses
· 15jam yang lalu
Akhirnya dioptimalkan, Kuka lama tidak berfungsi.
Lihat AsliBalas0
MetaverseHobo
· 15jam yang lalu
Akhirnya wawasan berharga datang
Lihat AsliBalas0
GateUser-00be86fc
· 15jam yang lalu
Pembaruan web3.js benar-benar telah tiba
Lihat AsliBalas0
GameFiCritic
· 15jam yang lalu
Aku tidak bisa mengikuti kecepatan pengembangan sol.
Lihat AsliBalas0
BlockchainDecoder
· 15jam yang lalu
Dari segi implementasi fungsional, peningkatan kinerja seharusnya berada di kisaran 15-20%
Solana Web3.js 2.x dirilis: Refactor pemrograman fungsional membawa peningkatan kinerja
Solana Web3.js 2.x: Bab Baru Pemrograman Fungsional
Perpustakaan Solana Web3.js resmi merilis versi 2.x pada bulan November tahun ini. Dibandingkan dengan versi 1.x, versi baru ini mengalami perubahan signifikan dalam struktur dan cara penggunaan. Artikel ini akan merangkum perubahan utama ini untuk membantu pengembang mempersiapkan kemungkinan migrasi di masa depan.
Perbandingan Versi
Penggunaan versi 1.x relatif sederhana, hanya diperlukan satu paket @solana/web3.js untuk mencakup semua fungsi. Ini didasarkan pada desain kelas, seperti kelas Connection, yang menawarkan puluhan metode, hampir mencakup semua fungsi yang diperlukan oleh pengembang. Namun, desain ini juga membawa beberapa masalah, seperti ukuran kode yang terlalu besar, meskipun pengembang hanya menggunakan sedikit fungsi, seluruh perpustakaan akan diunduh ke perangkat pengguna.
Versi 2.x mengambil pendekatan yang berbeda. Tim resmi membagi repositori kode menjadi beberapa modul kecil, seperti @solana/accounts, @solana/codecs, @solana/rpc, dan lainnya. Versi baru ini meninggalkan implementasi berbasis kelas dan beralih ke penggunaan fungsi tunggal, yang menguntungkan untuk optimasi saat membangun kode JavaScript. Kode yang tidak digunakan akan dihapus dan tidak akan diunduh ke perangkat pengguna. Menurut statistik resmi, DApp yang menggunakan versi baru biasanya dapat mencapai optimasi ukuran hingga 30%, dan jika hanya menggunakan sedikit fungsi, proporsi optimasi bisa lebih tinggi.
Perubahan ini menuntut kualitas dokumentasi yang lebih tinggi dari tim Solana. Bagaimana membantu pengembang dengan cepat menemukan fungsi yang diperlukan menjadi masalah kunci. Saat ini, penamaan setiap paket memiliki semantik yang baik, sehingga dari namanya bisa diperkirakan kegunaannya, yang dalam beberapa hal mengurangi kesulitan migrasi bagi pengembang.
Namun, karena versi 2.x baru saja dirilis, banyak proyek yang belum melakukan migrasi. Contoh tentang versi 2.x di Solana Cookbook juga relatif sedikit. Versi baru cenderung menggunakan fungsi bawaan runtime (seperti menghasilkan pasangan kunci), tetapi dokumentasi tentang hal ini kurang, yang mungkin membingungkan beberapa pengembang.
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 versi @solana/web3.js 1.95.5 dan 1.95.6 pada awal Desember 2023, lebih banyak input dan ketergantungan eksternal akan secara signifikan meningkatkan kemungkinan terjadinya insiden keamanan. Dengan dirilisnya versi 2.x, tim pengembang memutuskan untuk lebih banyak menggunakan fungsi bawaan, menghilangkan ketergantungan eksternal dan pengenalan Polyfills. Saat ini, versi 2.x telah menghilangkan semua ketergantungan eksternal.
Poin Perubahan Penting
menghubungkan
Pada versi 2.x, implementasi koneksi menggunakan pendekatan yang lebih fungsional:
javascript import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
Saat memanggil sendAndConfirmTransaction untuk mengirim transaksi, secara otomatis akan memulai permintaan HTTPS dan membangun koneksi WSS untuk berlangganan status transaksi, dan setelah transaksi dikonfirmasi, mengembalikan hash transaksi.
pasangan kunci
Dalam versi 2.x, kelas Keypair dan PublicKey yang ada sebelumnya telah digantikan oleh beberapa fungsi. Misalnya, sekarang Anda dapat menggunakan await generateKeyPair() untuk menghasilkan pasangan kunci, bukan lagi Keypair.generate() sebelumnya.
generateKeyPair yang baru mengembalikan Promise, ini karena implementasi baru memanfaatkan API Web Crypto JavaScript sebisa mungkin, menggunakan implementasi Ed25519 asli. Banyak metode dari API Web Crypto bersifat asinkron.
Kirim transaksi
Versi 2.x tidak lagi menggunakan kelas Transaction dan VersionedTransaction. Metode terkait Program Sistem juga tidak lagi ada, dan perlu diimpor dari tempat lain. Misalnya, instruksi transfer sekarang perlu memanggil fungsi getTransferSolInstruction dari @solana-program/system.
Versi baru menyediakan bentuk pipe yang umum digunakan dalam pemrograman fungsional. Berikut adalah contoh penggunaan fungsi pipe untuk mengimplementasikan fitur transfer.
javascript import { pipe } from '@solana/functional'; import { getTransferSolInstruction } from '@solana/programs';
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ dari: senderPublicKey, ke: recipientPublicKey, jumlah: lamports, })) );
const signature = await sendAndConfirmTransaction(rpc, transaction, signers);
Dibandingkan dengan versi 1.x, jumlah kode sedikit meningkat, tetapi menawarkan kustomisasi yang lebih kuat.
Dukungan React
Proyek @solana/web3.js juga mencakup sebuah pustaka bernama @solana/react, yang menyediakan beberapa React Hook, dilengkapi dengan fungsi-fungsi 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 cara yang efisien, fleksibel, dan dapat disesuaikan bagi para pengembang untuk berinteraksi dengan jaringan Solana, yang diharapkan dapat mendorong adopsi dan perkembangan platform tersebut.