Solana Web3.js phiên bản 2.x: Phân tách chức năng và tối ưu hóa hiệu suất
Solana Web3.js là một thư viện JavaScript đa chức năng, đã chính thức phát hành phiên bản 2.x vào tháng 11. So với phiên bản 1.x, phiên bản mới đã có nhiều thay đổi lớn. Bài viết này sẽ tóm tắt những thay đổi chính.
Mặc dù phiên bản 2.x vừa được phát hành, mức sử dụng vẫn chưa phổ biến, nhiều thư viện được sử dụng rộng rãi vẫn chưa được di chuyển, nhưng việc hiểu những thay đổi này sẽ giúp ích cho công việc di chuyển trong tương lai.
So sánh phiên bản
Phiên bản cũ sử dụng tương đối đơn giản, chỉ bao gồm một gói @solana/web3.js, tất cả các chức năng đều tập trung trong đó. Nó dựa trên thiết kế lớp, bao gói nhiều thao tác thông dụng. Ví dụ, lớp Connection cung cấp hàng chục phương thức, gần như bao quát tất cả các chức năng mà nhà phát triển cần. Ngoài ra, nhiều mã ví dụ có sẵn trong sách nấu ăn Solana cũng mang lại tiện lợi cho các nhà phát triển.
Tuy nhiên, thiết kế này cũng mang lại một số vấn đề. Mặc dù các chức năng mà nhà phát triển thực sự sử dụng có thể chỉ chiếm một phần rất nhỏ, nhưng toàn bộ mã nguồn sẽ được tải xuống thiết bị của người dùng, do kích thước mã của thư viện khá lớn, điều này có thể tốn một khoảng thời gian nhất định.
Phiên bản 2.x đã áp dụng một chiến lược khác. Nhóm chính thức đã chia nhỏ kho mã nguồn ban đầu thành một số mô-đun nhỏ hơn, chẳng hạn như @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, v.v. Đồng thời, họ đã từ bỏ việc triển khai dựa trên lớp và thay vào đó sử dụng cách tiếp cận dựa trên hàm đơn. Sự thay đổi này giúp tối ưu hóa khi xây dựng mã JavaScript, mã không được sử dụng sẽ bị xóa và không được tải xuống thiết bị của người dùng. Theo thống kê từ tài liệu chính thức, việc sử dụng phiên bản mới của DApp cơ bản có thể đạt được 30% tối ưu hóa kích thước, nếu chỉ sử dụng một số tính năng ít ỏi, tỷ lệ tối ưu hóa có thể còn cao hơn.
Sự thay đổi này đặt ra yêu cầu cao hơn về chất lượng tài liệu của đội ngũ Solana, việc làm thế nào để giúp các nhà phát triển nhanh chóng tìm thấy chức năng cần thiết trở thành một chủ đề quan trọng. Hiện tại, tên gói có tính nghĩa khá tốt, từ tên gọi có thể hiểu được phần nào mục đích của chúng, điều này ở một mức độ nào đó đã giảm bớt độ khó cho việc di chuyển của các nhà phát triển.
Do vì phiên bản mới vừa được phát hành không lâu, nhiều dự án vẫn chưa thực hiện việc di chuyển. Ví dụ về phiên bản 2.x trên Solana Cookbook cũng tương đối ít. Hơn nữa, phiên bản mới có xu hướng sử dụng các tính năng tích hợp sẵn trong thời gian chạy (chẳng hạn như tạo cặp khóa), nhưng mô tả về điều này trong tài liệu là không đủ, dẫn đến việc một số nơi nhà phát triển có thể cảm thấy bối rối.
Một đặc điểm quan trọng khác của phiên bản 2.x là không có phụ thuộc. Điều này có thể không quan trọng với nhiều người dùng, nhưng khi xem xét cuộc tấn công chuỗi cung ứng xảy ra vào đầu tháng 12 năm nay trên các phiên bản @solana/web3.js 1.95.5 và 1.95.6, việc có nhiều đầu vào và phụ thuộc bên ngoài sẽ làm tăng đáng kể khả năng xảy ra sự cố bảo mật. Với việc phát hành phiên bản 2.x, nhóm phát triển Web3.js đã quyết định sử dụng nhiều hơn các tính năng gốc, loại bỏ việc đưa vào phụ thuộc bên ngoài và Polyfills. Mặc dù có thể có sự thay đổi trong tương lai, nhưng hiện tại phiên bản 2.x đã loại bỏ tất cả các phụ thuộc bên ngoài.
Điểm thay đổi quan trọng
kết nối
Trong phiên bản 1.x, lớp Connection cung cấp một loạt các phương thức. Chức năng chính của nó là tạo ra một bộ gửi yêu cầu thông qua việc cấu hình địa chỉ yêu cầu RPC, sau đó gửi các yêu cầu khác nhau thông qua nó.
Phiên bản 2.x đã áp dụng cách tiếp cận hàm nhiều hơn.
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Khi gọi sendAndConfirmTransaction để gửi giao dịch, sẽ tự động phát động yêu cầu HTTPS và thiết lập kết nối WSS để đăng ký trạng thái giao dịch, và sau khi giao dịch được xác nhận, sẽ trả về hash giao dịch.
cặp khóa
Phần liên quan đến khóa công khai và khóa riêng tư cũng đã có những thay đổi lớn. Các lớp Keypair và PublicKey thường được sử dụng trong phiên bản 1.x không còn tồn tại, mà đã được thay thế bằng một số hàm.
Ví dụ, bạn có thể sử dụng await generateKeyPair() để tạo cặp khóa, thay vì Keypair.generate() trước đây.
Hàm generateKeyPair mới trả về một Promise, điều này là do việc triển khai mới tận dụng tối đa Web Crypto API của JavaScript, sử dụng triển khai Ed25519 nguyên bản. Nhiều phương thức của Web Crypto API là bất đồng bộ. Tuy nhiên, sự thay đổi này sẽ không gây quá nhiều khó khăn cho các nhà phát triển JavaScript quen thuộc với Promise.
gửi giao dịch
Các lớp Transaction và VersionedTransaction thường được sử dụng trong phiên bản 1.x không còn tồn tại trong phiên bản 2.x.
Các phương pháp liên quan đến System Program được cung cấp trong phiên bản cũ cũng không còn tồn tại, các phương thức tĩnh trên lớp SystemProgram cần được nhập từ nơi khác.
Ví dụ, lệnh transfer cần gọi hàm getTransferSolInstruction trong @solana-program/system.
Do không còn cung cấp class nữa, Web3.js đã cung cấp hình thức pipe thường được sử dụng trong lập trình hàm. Dưới đây là ví dụ về việc sử dụng hàm pipe để thực hiện chức năng chuyển tiền của phiên bản 1.x.
javascript
import { pipe } from "@solana/functional";
import { getTransferSolInstruction } from "@solana/system";
import {
createSolanaRpc,
gửiGiaoDịch,
setTransactionFeePayer,
createTransaction,
appendTransactionInstruction,
} từ "@solana/web3.js";
So với phiên bản 1.x, số lượng mã đã tăng lên, nhưng tính tùy chỉnh mạnh mẽ hơn.
Giao dịch được khởi động qua HTTPS RPC, sau đó xác nhận kết quả giao dịch thông qua việc đăng ký WSS RPC. Cách mới này phụ thuộc nhiều hơn vào WSS, điều này cũng đặt ra yêu cầu cao hơn về độ ổn định dịch vụ của nhà cung cấp RPC.
React
Dự án @solana/web3.js còn bao gồm một thư viện có tên là @solana/react, cung cấp một số React Hook, tích hợp các chức năng như signIn.
Tóm tắt
Việc phát hành phiên bản 2.x của @solana/web3.js thể hiện cam kết của đội ngũ Solana đối với sự phát triển và cải tiến liên tục. Nó cung cấp cho các nhà phát triển một cách thức tương tác hiệu quả, linh hoạt và tùy chỉnh với mạng Solana, giúp thúc đẩy sự áp dụng và phát triển của nền tảng này.
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.
18 thích
Phần thưởng
18
7
Chia sẻ
Bình luận
0/400
BlindBoxVictim
· 07-10 20:02
Khi nào xong dự án đầu tiên thì nói... nhìn mệt quá
Xem bản gốcTrả lời0
ForeverBuyingDips
· 07-10 17:13
Bây giờ lại phải chuyển gạch rồi à
Xem bản gốcTrả lời0
airdrop_huntress
· 07-10 07:51
Nâng cấp nhanh quá nhưng lỗi này có sửa xong không?
Xem bản gốcTrả lời0
DefiEngineerJack
· 07-10 07:47
*thực sự* việc mô-đun hóa không hề đơn giản... hiệu suất tăng cường trông có vẻ hứa hẹn nhưng hiển thị cho tôi các điểm chuẩn ser
Xem bản gốcTrả lời0
GateUser-75ee51e7
· 07-10 07:44
sol anh em này lại sắp có nâng cấp lớn rồi
Xem bản gốcTrả lời0
SelfCustodyIssues
· 07-10 07:41
Cái tối ưu hóa gì thế này, lại phải viết lại mã rồi.
Phát hành phiên bản 2.x của Solana Web3.js: Phân tách chức năng và tối ưu hóa hiệu suất
Solana Web3.js phiên bản 2.x: Phân tách chức năng và tối ưu hóa hiệu suất
Solana Web3.js là một thư viện JavaScript đa chức năng, đã chính thức phát hành phiên bản 2.x vào tháng 11. So với phiên bản 1.x, phiên bản mới đã có nhiều thay đổi lớn. Bài viết này sẽ tóm tắt những thay đổi chính.
Mặc dù phiên bản 2.x vừa được phát hành, mức sử dụng vẫn chưa phổ biến, nhiều thư viện được sử dụng rộng rãi vẫn chưa được di chuyển, nhưng việc hiểu những thay đổi này sẽ giúp ích cho công việc di chuyển trong tương lai.
So sánh phiên bản
Phiên bản cũ sử dụng tương đối đơn giản, chỉ bao gồm một gói @solana/web3.js, tất cả các chức năng đều tập trung trong đó. Nó dựa trên thiết kế lớp, bao gói nhiều thao tác thông dụng. Ví dụ, lớp Connection cung cấp hàng chục phương thức, gần như bao quát tất cả các chức năng mà nhà phát triển cần. Ngoài ra, nhiều mã ví dụ có sẵn trong sách nấu ăn Solana cũng mang lại tiện lợi cho các nhà phát triển.
Tuy nhiên, thiết kế này cũng mang lại một số vấn đề. Mặc dù các chức năng mà nhà phát triển thực sự sử dụng có thể chỉ chiếm một phần rất nhỏ, nhưng toàn bộ mã nguồn sẽ được tải xuống thiết bị của người dùng, do kích thước mã của thư viện khá lớn, điều này có thể tốn một khoảng thời gian nhất định.
Phiên bản 2.x đã áp dụng một chiến lược khác. Nhóm chính thức đã chia nhỏ kho mã nguồn ban đầu thành một số mô-đun nhỏ hơn, chẳng hạn như @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, v.v. Đồng thời, họ đã từ bỏ việc triển khai dựa trên lớp và thay vào đó sử dụng cách tiếp cận dựa trên hàm đơn. Sự thay đổi này giúp tối ưu hóa khi xây dựng mã JavaScript, mã không được sử dụng sẽ bị xóa và không được tải xuống thiết bị của người dùng. Theo thống kê từ tài liệu chính thức, việc sử dụng phiên bản mới của DApp cơ bản có thể đạt được 30% tối ưu hóa kích thước, nếu chỉ sử dụng một số tính năng ít ỏi, tỷ lệ tối ưu hóa có thể còn cao hơn.
Sự thay đổi này đặt ra yêu cầu cao hơn về chất lượng tài liệu của đội ngũ Solana, việc làm thế nào để giúp các nhà phát triển nhanh chóng tìm thấy chức năng cần thiết trở thành một chủ đề quan trọng. Hiện tại, tên gói có tính nghĩa khá tốt, từ tên gọi có thể hiểu được phần nào mục đích của chúng, điều này ở một mức độ nào đó đã giảm bớt độ khó cho việc di chuyển của các nhà phát triển.
Do vì phiên bản mới vừa được phát hành không lâu, nhiều dự án vẫn chưa thực hiện việc di chuyển. Ví dụ về phiên bản 2.x trên Solana Cookbook cũng tương đối ít. Hơn nữa, phiên bản mới có xu hướng sử dụng các tính năng tích hợp sẵn trong thời gian chạy (chẳng hạn như tạo cặp khóa), nhưng mô tả về điều này trong tài liệu là không đủ, dẫn đến việc một số nơi nhà phát triển có thể cảm thấy bối rối.
Một đặc điểm quan trọng khác của phiên bản 2.x là không có phụ thuộc. Điều này có thể không quan trọng với nhiều người dùng, nhưng khi xem xét cuộc tấn công chuỗi cung ứng xảy ra vào đầu tháng 12 năm nay trên các phiên bản @solana/web3.js 1.95.5 và 1.95.6, việc có nhiều đầu vào và phụ thuộc bên ngoài sẽ làm tăng đáng kể khả năng xảy ra sự cố bảo mật. Với việc phát hành phiên bản 2.x, nhóm phát triển Web3.js đã quyết định sử dụng nhiều hơn các tính năng gốc, loại bỏ việc đưa vào phụ thuộc bên ngoài và Polyfills. Mặc dù có thể có sự thay đổi trong tương lai, nhưng hiện tại phiên bản 2.x đã loại bỏ tất cả các phụ thuộc bên ngoài.
Điểm thay đổi quan trọng
kết nối
Trong phiên bản 1.x, lớp Connection cung cấp một loạt các phương thức. Chức năng chính của nó là tạo ra một bộ gửi yêu cầu thông qua việc cấu hình địa chỉ yêu cầu RPC, sau đó gửi các yêu cầu khác nhau thông qua nó.
Phiên bản 2.x đã áp dụng cách tiếp cận hàm nhiều hơn.
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Khi gọi sendAndConfirmTransaction để gửi giao dịch, sẽ tự động phát động yêu cầu HTTPS và thiết lập kết nối WSS để đăng ký trạng thái giao dịch, và sau khi giao dịch được xác nhận, sẽ trả về hash giao dịch.
cặp khóa
Phần liên quan đến khóa công khai và khóa riêng tư cũng đã có những thay đổi lớn. Các lớp Keypair và PublicKey thường được sử dụng trong phiên bản 1.x không còn tồn tại, mà đã được thay thế bằng một số hàm.
Ví dụ, bạn có thể sử dụng await generateKeyPair() để tạo cặp khóa, thay vì Keypair.generate() trước đây.
Hàm generateKeyPair mới trả về một Promise, điều này là do việc triển khai mới tận dụng tối đa Web Crypto API của JavaScript, sử dụng triển khai Ed25519 nguyên bản. Nhiều phương thức của Web Crypto API là bất đồng bộ. Tuy nhiên, sự thay đổi này sẽ không gây quá nhiều khó khăn cho các nhà phát triển JavaScript quen thuộc với Promise.
gửi giao dịch
Các lớp Transaction và VersionedTransaction thường được sử dụng trong phiên bản 1.x không còn tồn tại trong phiên bản 2.x.
Các phương pháp liên quan đến System Program được cung cấp trong phiên bản cũ cũng không còn tồn tại, các phương thức tĩnh trên lớp SystemProgram cần được nhập từ nơi khác.
Ví dụ, lệnh transfer cần gọi hàm getTransferSolInstruction trong @solana-program/system.
Do không còn cung cấp class nữa, Web3.js đã cung cấp hình thức pipe thường được sử dụng trong lập trình hàm. Dưới đây là ví dụ về việc sử dụng hàm pipe để thực hiện chức năng chuyển tiền của phiên bản 1.x.
javascript import { pipe } from "@solana/functional"; import { getTransferSolInstruction } from "@solana/system"; import { createSolanaRpc, gửiGiaoDịch, setTransactionFeePayer, createTransaction, appendTransactionInstruction, } từ "@solana/web3.js";
const rpc = createSolanaRpc("");
const transaction = pipe( createTransaction(), setTransactionFeePayer(payer.address), appendTransactionInstruction( getTransferSolInstruction({ fromAddress: payer.address, toAddress: recipient, số lượng, }) ) );
const signature = await sendTransaction(rpc, transaction, [payer]);
So với phiên bản 1.x, số lượng mã đã tăng lên, nhưng tính tùy chỉnh mạnh mẽ hơn.
Giao dịch được khởi động qua HTTPS RPC, sau đó xác nhận kết quả giao dịch thông qua việc đăng ký WSS RPC. Cách mới này phụ thuộc nhiều hơn vào WSS, điều này cũng đặt ra yêu cầu cao hơn về độ ổn định dịch vụ của nhà cung cấp RPC.
React
Dự án @solana/web3.js còn bao gồm một thư viện có tên là @solana/react, cung cấp một số React Hook, tích hợp các chức năng như signIn.
Tóm tắt
Việc phát hành phiên bản 2.x của @solana/web3.js thể hiện cam kết của đội ngũ Solana đối với sự phát triển và cải tiến liên tục. Nó cung cấp cho các nhà phát triển một cách thức tương tác hiệu quả, linh hoạt và tùy chỉnh với mạng Solana, giúp thúc đẩy sự áp dụng và phát triển của nền tảng này.