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.

Seri Pemula Web3: Sekarang Upgrade @solana/web3.js 2.x Untuk Memulai Pemrograman Fungsional

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.

Web3 Pemula Seri: Sekarang Tingkatkan @solana/web3.js 2.x untuk Memulai Pemrograman Fungsional

Lihat Asli
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.
  • Hadiah
  • 6
  • Bagikan
Komentar
0/400
BrokenDAOvip
· 07-17 17:49
Upgrade itu keren, tapi siapa yang berani melompat pertama kali?
Lihat AsliBalas0
MetaverseVagabondvip
· 07-17 17:47
Stabil sekarang, menulis kode jadi lebih nyaman.
Lihat AsliBalas0
NonFungibleDegenvip
· 07-17 17:42
bullish af pada solana sejujurnya... v2 akan mengirimnya ser
Lihat AsliBalas0
GasFeeNightmarevip
· 07-17 17:39
Malam-malam masih memantau pergerakan gas sol... Kapan bisa turun ke 1gwei?
Lihat AsliBalas0
consensus_failurevip
· 07-17 17:37
tps yang tidak bisa dikunci
Lihat AsliBalas0
BlockImpostervip
· 07-17 17:25
on-chain hacker
Lihat AsliBalas0
  • Sematkan
Perdagangkan Kripto Di Mana Saja Kapan Saja
qrCode
Pindai untuk mengunduh aplikasi Gate
Komunitas
Bahasa Indonesia
  • 简体中文
  • English
  • Tiếng Việt
  • 繁體中文
  • Español
  • Русский
  • Français (Afrique)
  • Português (Portugal)
  • Bahasa Indonesia
  • 日本語
  • بالعربية
  • Українська
  • Português (Brasil)