Solana Web3.js phiên bản 2.x: Phân tích nâng cấp thư viện JavaScript đầy đủ tính năng
Thư viện JavaScript phong phú Solana Web3.js đã chính thức phát hành phiên bản 2.x vào tháng 11 năm nay. So với phiên bản 1.x, phiên bản mới mang lại nhiều thay đổi quan trọng. Bài viết này sẽ tóm tắt và phân tích những thay đổi chính.
Mặc dù phiên bản 2.x vừa mới được phát hành, hiện tại mức sử dụng không cao, nhiều thư viện được sử dụng rộng rãi vẫn chưa chuyển sang, nhưng việc hiểu những thay đổi này là rất quan trọng cho công việc di chuyển trong tương lai.
So sánh phiên bản
Việc sử dụng phiên bản 1.x tương đối đơn giản. 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 đó. Thiết kế dựa trên lớp đã đóng gói một lượng lớn các thao tác thường dùng, chẳng hạn như lớp Connection cung cấp hàng chục phương thức, gần như bao trùm tất cả các chức năng mà nhà phát triển cần.
Tuy nhiên, thiết kế này cũng mang lại một số vấn đề. Mặc dù các nhà phát triển thường chỉ sử dụng một phần nhỏ chức năng, nhưng toàn bộ mã nguồn sẽ được tải xuống thiết bị của người dùng, do khối lượng mã của thư viện rất lớn, điều này có thể mất một khoảng thời gian nhất định.
Phiên bản 2.x đã áp dụng một phương pháp khác. Nhóm chính thức đã chia nhỏ kho mã nguồn hiện có thành nhiều mô-đun nhỏ như @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, v.v. Đồng thời, phiên bản mới đã từ bỏ việc triển khai dựa trên lớp, thay vào đó chủ yếu sử dụng phương thức hàm đơn. Sự thay đổi này thuận lợi cho việc tối ưu hóa mã JavaScript trong quá trình xây dựng, 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 tài liệu chính thức, việc sử dụng phiên bản mới của DApp thường có thể đạt được tối ưu hóa kích thước mã lên đến 30%, nếu chỉ sử dụng một số ít tính năng, 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. Cách giúp các nhà phát triển nhanh chóng tìm thấy các chức năng cần thiết đã trở thành một vấn đề then chốt. Hiện tại, tên gói có tính ngữ nghĩa tốt, từ tên gọi có thể khái quát hiểu được mục đích sử dụng của nó, điều này phần nào giảm bớt khó khăn cho các nhà phát triển trong việc di chuyển.
Tuy nhiên, do mới được phát hành không lâu, nhiều dự án vẫn chưa thực hiện việc chuyển đổi. Các 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 chức năng tích hợp sẵn trong thời gian chạy (như tạo cặp khóa), nhưng tài liệu thiếu mô tả chi tiết về các phần này, dẫn đến một số khía cạnh khiến các nhà phát triển 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. Mặc dù điều này có thể không phải là điều quan trọng nhất đối với nhiều người dùng, nhưng 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, 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, đội ngũ phát triển Web3.js đã quyết định sử dụng nhiều hơn các chức năng nội bộ, loại bỏ sự phụ thuộc bên ngoài và việc đưa vào Polyfills. Mặc dù có thể sẽ có 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 rất nhiều phương thức. Mặc dù 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 phương pháp hàm nhiều hơn để thực hiện chức năng này:
javascript
import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Khi gọi sendAndConfirmTransaction để gửi giao dịch, hệ thống 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.
bộ khóa
Phần liên quan đến khóa công khai và khóa riêng cũng đã có những thay đổi lớn. Hai 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ây giờ bạn có thể sử dụng await generateKeyPair() để tạo cặp khóa, thay vì Keypair.generate() như trước đây.
Cần lưu ý rằng, generateKeyPair mới sẽ trả về một Promise, thay vì trả về trực tiếp cặp khóa. Đ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 thực thi 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 không phải là không thể chấp nhận, vào cuối năm 2024 sắp tới, các nhà phát triển JavaScript đã rất quen thuộc với Promise.
gửi giao dịch
Người dùng phiên bản 1.x chắc hẳn rất quen thuộc với hai lớp Transaction và VersionedTransaction. Trong phiên bản 2.x, hai lớp này không còn tồn tại.
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, vì vậy tất cả 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 bây giờ cần gọi hàm getTransferSolInstruction trong @solana-program/system.
Do không còn cung cấp lớp, 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 { generateKeyPair } from '@solana/web3.js';
import { getTransferSolInstruction } from '@solana/system-program';
import { createTransaction } from '@solana/transactions';
Có thể thấy, giao dịch không còn được khởi xướng qua Connection nữa, mà là thông qua RPC Provider mà chúng tôi định nghĩa để tạo ra một hàm cụ thể, sau đó gọi hàm đó để khởi xướng giao dịch. So với phiên bản 1.x, mã nguồn đã tăng lên nhưng tính tùy chỉnh thì mạnh mẽ hơn.
Giao dịch được khởi xướng thông qua HTTPS RPC, sau đó được xác nhận kết quả giao dịch thông qua việc đăng ký WSS RPC. Có thể cảm nhận rằng cách thức mới rất phụ thuộc vào WSS, tin rằng trong tương lai, việc ứng dụng WSS sẽ ngày càng rộng rãi, điều này cũng đặt ra yêu cầu cao hơn về độ ổn định dịch vụ của các nhà cung cấp RPC.
React
Thú vị là, 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 đầy đủ 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 hiệu quả, linh hoạt và có thể tùy chỉnh để tương tác với mạng Solana, giúp thúc đẩy việc áp dụng và phát triển nền tảng này. Mặc dù hiện tại mức sử dụng không cao, nhưng theo thời gian, tin rằng sẽ có ngày càng nhiều dự án chuyển sang phiên bản mới này.
Trang này có thể chứa nội dung của bên thứ ba, được cung cấp chỉ nhằm mục đích thông tin (không phải là tuyên bố/bảo đảm) và không được coi là sự chứng thực cho quan điểm của Gate hoặc là lời khuyên về tài chính hoặc chuyên môn. Xem Tuyên bố từ chối trách nhiệm để biết chi tiết.
16 thích
Phần thưởng
16
4
Chia sẻ
Bình luận
0/400
BearMarketSurvivor
· 15giờ trước
Báo cáo tiền tuyến: Cải cách dường như là phát súng đầu tiên vang lên trong một tổ trống.
Xem bản gốcTrả lời0
OPsychology
· 15giờ trước
Nâng cấp chưa ổn định thì đừng vội thay đổi.
Xem bản gốcTrả lời0
RugResistant
· 15giờ trước
hmm phát hiện các điểm nóng bảo mật tiềm ẩn... cần kiểm tra kỹ lưỡng thật ra
Phân tích nâng cấp Solana Web3.js 2.0: Thiết kế mô-đun nâng cao hiệu suất và độ an toàn
Solana Web3.js phiên bản 2.x: Phân tích nâng cấp thư viện JavaScript đầy đủ tính năng
Thư viện JavaScript phong phú Solana Web3.js đã chính thức phát hành phiên bản 2.x vào tháng 11 năm nay. So với phiên bản 1.x, phiên bản mới mang lại nhiều thay đổi quan trọng. Bài viết này sẽ tóm tắt và phân tích những thay đổi chính.
Mặc dù phiên bản 2.x vừa mới được phát hành, hiện tại mức sử dụng không cao, nhiều thư viện được sử dụng rộng rãi vẫn chưa chuyển sang, nhưng việc hiểu những thay đổi này là rất quan trọng cho công việc di chuyển trong tương lai.
So sánh phiên bản
Việc sử dụng phiên bản 1.x tương đối đơn giản. 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 đó. Thiết kế dựa trên lớp đã đóng gói một lượng lớn các thao tác thường dùng, chẳng hạn như lớp Connection cung cấp hàng chục phương thức, gần như bao trùm tất cả các chức năng mà nhà phát triển cần.
Tuy nhiên, thiết kế này cũng mang lại một số vấn đề. Mặc dù các nhà phát triển thường chỉ sử dụng một phần nhỏ chức năng, nhưng toàn bộ mã nguồn sẽ được tải xuống thiết bị của người dùng, do khối lượng mã của thư viện rất lớn, điều này có thể mất một khoảng thời gian nhất định.
Phiên bản 2.x đã áp dụng một phương pháp khác. Nhóm chính thức đã chia nhỏ kho mã nguồn hiện có thành nhiều mô-đun nhỏ như @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, v.v. Đồng thời, phiên bản mới đã từ bỏ việc triển khai dựa trên lớp, thay vào đó chủ yếu sử dụng phương thức hàm đơn. Sự thay đổi này thuận lợi cho việc tối ưu hóa mã JavaScript trong quá trình xây dựng, 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 tài liệu chính thức, việc sử dụng phiên bản mới của DApp thường có thể đạt được tối ưu hóa kích thước mã lên đến 30%, nếu chỉ sử dụng một số ít tính năng, 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. Cách giúp các nhà phát triển nhanh chóng tìm thấy các chức năng cần thiết đã trở thành một vấn đề then chốt. Hiện tại, tên gói có tính ngữ nghĩa tốt, từ tên gọi có thể khái quát hiểu được mục đích sử dụng của nó, điều này phần nào giảm bớt khó khăn cho các nhà phát triển trong việc di chuyển.
Tuy nhiên, do mới được phát hành không lâu, nhiều dự án vẫn chưa thực hiện việc chuyển đổi. Các 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 chức năng tích hợp sẵn trong thời gian chạy (như tạo cặp khóa), nhưng tài liệu thiếu mô tả chi tiết về các phần này, dẫn đến một số khía cạnh khiến các nhà phát triển 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. Mặc dù điều này có thể không phải là điều quan trọng nhất đối với nhiều người dùng, nhưng 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, 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, đội ngũ phát triển Web3.js đã quyết định sử dụng nhiều hơn các chức năng nội bộ, loại bỏ sự phụ thuộc bên ngoài và việc đưa vào Polyfills. Mặc dù có thể sẽ có 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 rất nhiều phương thức. Mặc dù 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 phương pháp hàm nhiều hơn để thực hiện chức năng này:
javascript import { createSolanaRpc } from "@solana/web3.js";
const rpc = createSolanaRpc("");
Khi gọi sendAndConfirmTransaction để gửi giao dịch, hệ thống 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.
bộ khóa
Phần liên quan đến khóa công khai và khóa riêng cũng đã có những thay đổi lớn. Hai 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ây giờ bạn có thể sử dụng await generateKeyPair() để tạo cặp khóa, thay vì Keypair.generate() như trước đây.
Cần lưu ý rằng, generateKeyPair mới sẽ trả về một Promise, thay vì trả về trực tiếp cặp khóa. Đ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 thực thi 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 không phải là không thể chấp nhận, vào cuối năm 2024 sắp tới, các nhà phát triển JavaScript đã rất quen thuộc với Promise.
gửi giao dịch
Người dùng phiên bản 1.x chắc hẳn rất quen thuộc với hai lớp Transaction và VersionedTransaction. Trong phiên bản 2.x, hai lớp này không còn tồn tại.
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, vì vậy tất cả 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 bây giờ cần gọi hàm getTransferSolInstruction trong @solana-program/system.
Do không còn cung cấp lớp, 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 { generateKeyPair } from '@solana/web3.js'; import { getTransferSolInstruction } from '@solana/system-program'; import { createTransaction } from '@solana/transactions';
const transaction = pipe( createTransaction(), addInstruction(getTransferSolInstruction({ fromPubkey: sender.publicKey, toPubkey: recipient, lamports: số tiền, })), setRecentBlockhash(blockhash), addSigners([sender]) );
const signature = await rpc.sendAndConfirmTransaction(transaction);
Có thể thấy, giao dịch không còn được khởi xướng qua Connection nữa, mà là thông qua RPC Provider mà chúng tôi định nghĩa để tạo ra một hàm cụ thể, sau đó gọi hàm đó để khởi xướng giao dịch. So với phiên bản 1.x, mã nguồn đã tăng lên nhưng tính tùy chỉnh thì mạnh mẽ hơn.
Giao dịch được khởi xướng thông qua HTTPS RPC, sau đó được xác nhận kết quả giao dịch thông qua việc đăng ký WSS RPC. Có thể cảm nhận rằng cách thức mới rất phụ thuộc vào WSS, tin rằng trong tương lai, việc ứng dụng WSS sẽ ngày càng rộng rãi, điều này cũng đặt ra yêu cầu cao hơn về độ ổn định dịch vụ của các nhà cung cấp RPC.
React
Thú vị là, 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 đầy đủ 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 hiệu quả, linh hoạt và có thể tùy chỉnh để tương tác với mạng Solana, giúp thúc đẩy việc áp dụng và phát triển nền tảng này. Mặc dù hiện tại mức sử dụng không cao, nhưng theo thời gian, tin rằng sẽ có ngày càng nhiều dự án chuyển sang phiên bản mới này.