Solana Web3.js 2.x phiên bản: Chương mới của lập trình hàm
Thư viện JavaScript phong phú tính năng Solana Web3.js đã chính thức ra mắt 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 những thay đổi đáng kể, bài viết này sẽ tóm tắt các cập nhật chính.
Mặc dù phiên bản 2.x vừa mới được phát hành và tỷ lệ sử dụng chưa cao, nhiều thư viện phổ biến vẫn chưa được chuyển đổi, nhưng việc hiểu những thay đổi này sẽ rất có lợi cho việc nâng cấp dự án trong tương lai.
So sánh phiên bản
Cách sử dụng phiên bản 1.x tương đối đơn giản. Nó chỉ bao gồm một gói chính: @solana/web3.js, bên trong tích hợp tất cả các chức năng. Phiên bản này dựa trên thiết kế lớp, đóng gói nhiều thao tác phổ biến. Ví dụ, lớp Connection cung cấp hàng chục phương pháp, gần như bao quát tất cả các chức năng cần thiết cho 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à các nhà phát triển thực sự sử dụng có thể chỉ là một phần nhỏ trong số đó, nhưng toàn bộ mã của thư viện sẽ được tải xuống thiết bị của người dùng, điều này có thể dẫn đến thời gian tải lâu hơn.
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 một số mô-đun nhỏ, chẳng hạn như @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, v.v. Phiên bản mới đã từ bỏ việc triển khai dựa trên lớp và thay vào đó áp dụng cách thức sử dụng hàm đơn, điều này có lợi cho việc tối ưu hóa khi xây dựng mã JavaScript. Mã không sử dụng sẽ bị xóa, thực tế sẽ không được tải về thiết bị của người dùng. Theo thống kê từ tài liệu chính thức, các DApp sử dụng phiên bản mới thường có thể đạt được tối ưu hóa kích thước lên đến 30%, nếu chỉ sử dụng một số chức năng ít ỏi, tỷ lệ tối ưu hóa có thể 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. Làm thế nào để giúp các nhà phát triển nhanh chóng tìm thấy tính năng cần thiết trở thành một vấn đề then chốt. Hiện tại, ý nghĩa của tên gói có vẻ khá tốt, từ tên gọi có thể đại khái hiểu được công dụng của chúng, đ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 chuyển đổi.
Do vì 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 di chuyển. Các ví dụ về phiên bản 2.x trên Solana Cookbook cũng còn í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 mô tả về những phần này còn thiếu, dẫn đến một số chỗ các 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 đối với nhiều người dùng, nhưng với 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 giảm thiểu đầu vào và phụ thuộc bên ngoài có thể giảm đáng kể khả năng xảy ra sự cố bảo mật. Với sự ra mắt của 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 chức năng gốc, loại bỏ việc đưa vào các phụ thuộc bên ngoài và Polyfills. Mặc dù có thể sẽ có những 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 nhiều phương thức. Nhưng chức năng cốt lõi của nó là tạo 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 đó sử dụng nó để gửi các yêu cầu khác nhau.
Phiên bản 2.x sử dụng phương pháp hàm nhiều hơn:
javascript
import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
// Sử dụng rpc gửi giao dịch
const signature = await rpc.sendAndConfirmTransaction(transaction);
Trong phiên bản mới này, khi chúng tôi gọi sendAndConfirmTransaction để gửi giao dịch, nó sẽ tự động khởi tạo yêu cầu HTTPS và thiết lập một kết nối WSS để theo dõi trạng thái giao dịch, trả về hash giao dịch sau khi giao dịch được xác nhận.
cặp chìa khóa
Phần liên quan đến khóa công khai và khóa riêng cũng có sự 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ây giờ bạn có thể sử dụng await generateKeyPair() để tạo cặp khóa, thay vì Keypair.generate() trước đây.
Cần lưu ý rằng, hàm generateKeyPair mới 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 triển khai Ed25519 gốc. 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 này, 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 đã quen thuộc với hai lớp Transaction và VersionedTransaction, mối quan hệ giữa chúng từng khiến nhiều nhà phát triển cảm thấy bối rối.
Trong phiên bản 2.x, hai lớp này không còn tồn tại.
Các phương thức 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 dạng 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-program';
import { createSolanaRpc } from '@solana/web3.js';
Có thể thấy, giao dịch không còn được khởi xướng thông qua Connection nữa, mà là thông qua một Provider RPC 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, số lượng mã đã tăng lên, nhưng ưu điểm là khả năng tùy chỉnh mạnh mẽ hơn.
Giao dịch được khởi xướng qua HTTPS RPC, sau đó xác nhận kết quả giao dịch qua việc đăng ký WSS RPC. Có thể cảm nhận rằng phương thức mới rất phụ thuộc vào WSS, tin rằng trong tương lai ứng dụng WSS sẽ ngày càng trở nên phổ biến, điều này cũng đặt ra yêu cầu cao hơn về tính ổn định dịch vụ của nhà cung cấp RPC.
React hỗ trợ
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 rõcam kết của đội ngũ Solana đối với việc phát triển và cải tiến không ngừng. Nó cung cấp cho các nhà phát triển một cách tương tác hiệu quả, linh hoạt và tùy chỉnh với mạng Solana, góp phần thúc đẩy sự chấp nhận và phát triển của nền tảng 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.
18 thích
Phần thưởng
18
8
Đăng lại
Chia sẻ
Bình luận
0/400
CommunityJanitor
· 08-10 07:13
Sao lại lặp đi lặp lại chậm như vậy?
Xem bản gốcTrả lời0
ProposalManiac
· 08-09 22:16
Có tiến bộ, nhưng vẫn chưa đủ cách mạng.
Xem bản gốcTrả lời0
GhostChainLoyalist
· 08-09 07:05
2.0 vẫn chậm lắm. Khi nào mới học được cách nhìn chằm chằm vào việc nâng cấp phiên bản cả ngày?
Xem bản gốcTrả lời0
PanicSeller69
· 08-07 19:20
Nâng cấp có tác dụng gì, không phải vẫn phải thay thư viện sao?
Xem bản gốcTrả lời0
MemeCoinSavant
· 08-07 07:47
dựa trên af, solana chứng minh ý nghĩa thống kê trong sự phát triển web3 thật lòng mà nói
Solana Web3.js 2.x phát hành: Cải tiến đáng kể về lập trình hàm và tối ưu hóa hiệu suất
Solana Web3.js 2.x phiên bản: Chương mới của lập trình hàm
Thư viện JavaScript phong phú tính năng Solana Web3.js đã chính thức ra mắt 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 những thay đổi đáng kể, bài viết này sẽ tóm tắt các cập nhật chính.
Mặc dù phiên bản 2.x vừa mới được phát hành và tỷ lệ sử dụng chưa cao, nhiều thư viện phổ biến vẫn chưa được chuyển đổi, nhưng việc hiểu những thay đổi này sẽ rất có lợi cho việc nâng cấp dự án trong tương lai.
So sánh phiên bản
Cách sử dụng phiên bản 1.x tương đối đơn giản. Nó chỉ bao gồm một gói chính: @solana/web3.js, bên trong tích hợp tất cả các chức năng. Phiên bản này dựa trên thiết kế lớp, đóng gói nhiều thao tác phổ biến. Ví dụ, lớp Connection cung cấp hàng chục phương pháp, gần như bao quát tất cả các chức năng cần thiết cho 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à các nhà phát triển thực sự sử dụng có thể chỉ là một phần nhỏ trong số đó, nhưng toàn bộ mã của thư viện sẽ được tải xuống thiết bị của người dùng, điều này có thể dẫn đến thời gian tải lâu hơn.
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 một số mô-đun nhỏ, chẳng hạn như @solana/accounts, @solana/codecs, @solana/rpc, @solana/signers, @solana/transactions, v.v. Phiên bản mới đã từ bỏ việc triển khai dựa trên lớp và thay vào đó áp dụng cách thức sử dụng hàm đơn, điều này có lợi cho việc tối ưu hóa khi xây dựng mã JavaScript. Mã không sử dụng sẽ bị xóa, thực tế sẽ không được tải về thiết bị của người dùng. Theo thống kê từ tài liệu chính thức, các DApp sử dụng phiên bản mới thường có thể đạt được tối ưu hóa kích thước lên đến 30%, nếu chỉ sử dụng một số chức năng ít ỏi, tỷ lệ tối ưu hóa có thể 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. Làm thế nào để giúp các nhà phát triển nhanh chóng tìm thấy tính năng cần thiết trở thành một vấn đề then chốt. Hiện tại, ý nghĩa của tên gói có vẻ khá tốt, từ tên gọi có thể đại khái hiểu được công dụng của chúng, đ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 chuyển đổi.
Do vì 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 di chuyển. Các ví dụ về phiên bản 2.x trên Solana Cookbook cũng còn í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 mô tả về những phần này còn thiếu, dẫn đến một số chỗ các 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 đối với nhiều người dùng, nhưng với 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 giảm thiểu đầu vào và phụ thuộc bên ngoài có thể giảm đáng kể khả năng xảy ra sự cố bảo mật. Với sự ra mắt của 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 chức năng gốc, loại bỏ việc đưa vào các phụ thuộc bên ngoài và Polyfills. Mặc dù có thể sẽ có những 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 nhiều phương thức. Nhưng chức năng cốt lõi của nó là tạo 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 đó sử dụng nó để gửi các yêu cầu khác nhau.
Phiên bản 2.x sử dụng phương pháp hàm nhiều hơn:
javascript import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
// Sử dụng rpc gửi giao dịch const signature = await rpc.sendAndConfirmTransaction(transaction);
Trong phiên bản mới này, khi chúng tôi gọi sendAndConfirmTransaction để gửi giao dịch, nó sẽ tự động khởi tạo yêu cầu HTTPS và thiết lập một kết nối WSS để theo dõi trạng thái giao dịch, trả về hash giao dịch sau khi giao dịch được xác nhận.
cặp chìa khóa
Phần liên quan đến khóa công khai và khóa riêng cũng có sự 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ây giờ bạn có thể sử dụng await generateKeyPair() để tạo cặp khóa, thay vì Keypair.generate() trước đây.
Cần lưu ý rằng, hàm generateKeyPair mới 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 triển khai Ed25519 gốc. 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 này, 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 đã quen thuộc với hai lớp Transaction và VersionedTransaction, mối quan hệ giữa chúng từng khiến nhiều nhà phát triển cảm thấy bối rối.
Trong phiên bản 2.x, hai lớp này không còn tồn tại.
Các phương thức 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 dạng 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-program'; import { createSolanaRpc } from '@solana/web3.js';
const rpc = createSolanaRpc(');
const transaction = pipe( createTransaction({ version: 0 }), addInstruction(getTransferSolInstruction({ từ: senderPublicKey, đến: recipientPublicKey, số lượng: transferAmount, })) );
const signature = await rpc.sendAndConfirmTransaction(transaction);
Có thể thấy, giao dịch không còn được khởi xướng thông qua Connection nữa, mà là thông qua một Provider RPC 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, số lượng mã đã tăng lên, nhưng ưu điểm là khả năng tùy chỉnh mạnh mẽ hơn.
Giao dịch được khởi xướng qua HTTPS RPC, sau đó xác nhận kết quả giao dịch qua việc đăng ký WSS RPC. Có thể cảm nhận rằng phương thức mới rất phụ thuộc vào WSS, tin rằng trong tương lai ứng dụng WSS sẽ ngày càng trở nên phổ biến, điều này cũng đặt ra yêu cầu cao hơn về tính ổn định dịch vụ của nhà cung cấp RPC.
React hỗ trợ
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 rõcam kết của đội ngũ Solana đối với việc phát triển và cải tiến không ngừng. Nó cung cấp cho các nhà phát triển một cách tương tác hiệu quả, linh hoạt và tùy chỉnh với mạng Solana, góp phần thúc đẩy sự chấp nhận và phát triển của nền tảng này.