Solana Web3.js phiên bản 2.x: Cập nhật lớn cho thư viện JavaScript mạnh mẽ
Thư viện JavaScript mạnh mẽ 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 đến những thay đổi đáng kể. 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 cũng chưa được chuyển đổi, nhưng việc nắm bắt trước những thay đổi này chắc chắn sẽ có lợi cho sự chuẩn bị nâng cấp trong tương lai.
So sánh phiên bản
Không thể phủ nhận rằng phiên bản cũ sử dụng đơn giản và trực tiếp hơn. Phiên bản 1.x chỉ cần một gói @solana/web3.js đã bao gồm tất cả các chức năng, được đóng gói bằng thiết kế theo kiểu lớp vớ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.
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ã nguồ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.
So với trước đây, phiên bản 2.x áp dụng phương pháp thiết kế mô-đun. Nhóm chính thức đã tách mã nguồn cũ thành nhiều mô-đun nhỏ, chẳng hạn 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 và chuyển sang sử dụng phương thức hàm đơn, điều 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à sẽ 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 thường có thể đạt được khoảng 30% tối ưu hóa kích thước mã. Nếu chỉ sử dụng một số ít chức năng, 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. Cách giúp các nhà phát triển nhanh chóng xác định chức năng cần thiết trở thành một vấn đề then chốt. Hiện tại, có vẻ như tên gói có tính nghĩa tốt, từ tên có thể hiểu đại khái mục đích của nó, điều này phần nào giảm bớt độ khó cho việc di chuyển của các nhà phát triển.
Tuy nhiên, do 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 tiến hành di chuyển. 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 tính 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ả liên quan, điều này có thể khiến một số 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. Điều này có thể không quan trọng với nhiều người dùng, nhưng từ vụ 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ự kiện an ninh. 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 tính năng gốc, loại bỏ việc nhập khẩu các phụ thuộc bên ngoài và Polyfills. Mặc dù trong tương lai có thể sẽ có sự thay đổi, 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, Connection cung cấp một loạt các phương thức. Nhưng chức năng cốt lõi của nó là tạo một trình gửi yêu cầu bằng cách cấu hình địa chỉ 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 một phương pháp hàm hơn để thực hiện chức năng này:
javascript
import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';
Trong đoạn mã này, khi chúng ta gọi sendAndConfirmTransaction để gửi giao dịch, một yêu cầu HTTPS sẽ được tự động khởi tạo, và một kết nối WSS sẽ được thiết lập, đăng ký trạng thái giao dịch, và trả về mã giao dịch sau khi giao dịch được xác nhận.
cặp 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ụ, 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 phiên bản 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 khó chấp nhận, vào cuối năm 2023, 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. 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 các phương thức tĩnh trên lớp SystemProgram cần được đưa vào 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 { getTransferSolInstruction } from '@solana/system-program';
import {
addSignatureToTransaction,
tạoGiaoDịch,
getBase58SignerFromPrivateKey,
getSignatureFromSignedTransaction,
getTransactionMessage,
signTransaction,
} từ '@solana/transactions';
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 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ã lệnh đã tăng lên nhưng tính tùy chỉnh mạnh mẽ hơn.
Giao dịch được khởi xướng qua HTTPS RPC và 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 cách thức mới này rất phụ thuộc vào WSS, tin rằng ứng dụng WSS trong tương lai sẽ ngày càng rộng rãi, điều này thực sự đặt ra yêu cầu cao hơn về sự ổn định dịch vụ của các nhà cung cấp RPC.
React
Đáng chú ý 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 liên tục. Nó cung cấp cho các nhà phát triển một cách thức hiệu quả, linh hoạt và tùy biến để 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.
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.
12 thích
Phần thưởng
12
8
Chia sẻ
Bình luận
0/400
SchrodingerWallet
· 4giờ trước
Để các chuyên nghiệp先踩坑吧
Xem bản gốcTrả lời0
AirdropFatigue
· 13giờ trước
Ha, di chuyển hay không di chuyển cũng không ảnh hưởng nhiều.
Xem bản gốcTrả lời0
DegenGambler
· 08-06 03:11
Cuối cùng đã nâng cấp lên 2.0~chỉ để xem trò vui
Xem bản gốcTrả lời0
ser_we_are_ngmi
· 08-06 01:10
Nâng cấp có gì tốt, dùng 1.x là được.
Xem bản gốcTrả lời0
LayerHopper
· 08-06 01:10
Đáng lẽ đã phải nâng cấp rồi.
Xem bản gốcTrả lời0
PumpAnalyst
· 08-06 00:55
Xét về mặt kỹ thuật, bản cập nhật này có điều kỳ lạ, đồ ngốc không nên vội vàng nâng cấp.
Phiên bản Solana Web3.js 2.x được phát hành với thiết kế mô-đun nâng cao hiệu suất đáng kể
Solana Web3.js phiên bản 2.x: Cập nhật lớn cho thư viện JavaScript mạnh mẽ
Thư viện JavaScript mạnh mẽ 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 đến những thay đổi đáng kể. 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 cũng chưa được chuyển đổi, nhưng việc nắm bắt trước những thay đổi này chắc chắn sẽ có lợi cho sự chuẩn bị nâng cấp trong tương lai.
So sánh phiên bản
Không thể phủ nhận rằng phiên bản cũ sử dụng đơn giản và trực tiếp hơn. Phiên bản 1.x chỉ cần một gói @solana/web3.js đã bao gồm tất cả các chức năng, được đóng gói bằng thiết kế theo kiểu lớp vớ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.
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ã nguồ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.
So với trước đây, phiên bản 2.x áp dụng phương pháp thiết kế mô-đun. Nhóm chính thức đã tách mã nguồn cũ thành nhiều mô-đun nhỏ, chẳng hạn 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 và chuyển sang sử dụng phương thức hàm đơn, điều 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à sẽ 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 thường có thể đạt được khoảng 30% tối ưu hóa kích thước mã. Nếu chỉ sử dụng một số ít chức năng, 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. Cách giúp các nhà phát triển nhanh chóng xác định chức năng cần thiết trở thành một vấn đề then chốt. Hiện tại, có vẻ như tên gói có tính nghĩa tốt, từ tên có thể hiểu đại khái mục đích của nó, điều này phần nào giảm bớt độ khó cho việc di chuyển của các nhà phát triển.
Tuy nhiên, do 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 tiến hành di chuyển. 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 tính 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ả liên quan, điều này có thể khiến một số 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. Điều này có thể không quan trọng với nhiều người dùng, nhưng từ vụ 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ự kiện an ninh. 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 tính năng gốc, loại bỏ việc nhập khẩu các phụ thuộc bên ngoài và Polyfills. Mặc dù trong tương lai có thể sẽ có sự thay đổi, 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, Connection cung cấp một loạt các phương thức. Nhưng chức năng cốt lõi của nó là tạo một trình gửi yêu cầu bằng cách cấu hình địa chỉ 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 một phương pháp hàm hơn để thực hiện chức năng này:
javascript import { createSolanaRpcApi, createSolanaRpcSubscriptionsApi } from '@solana/web3.js';
const rpc = createSolanaRpcApi({ httpEndpoint: ' wsEndpoint: 'wss://api.mainnet-beta.solana.com', });
const { sendAndConfirmTransaction } = rpc;
Trong đoạn mã này, khi chúng ta gọi sendAndConfirmTransaction để gửi giao dịch, một yêu cầu HTTPS sẽ được tự động khởi tạo, và một kết nối WSS sẽ được thiết lập, đăng ký trạng thái giao dịch, và trả về mã giao dịch sau khi giao dịch được xác nhận.
cặp 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ụ, 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 phiên bản 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 khó chấp nhận, vào cuối năm 2023, 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. 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 các phương thức tĩnh trên lớp SystemProgram cần được đưa vào 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 { getTransferSolInstruction } from '@solana/system-program'; import { addSignatureToTransaction, tạoGiaoDịch, getBase58SignerFromPrivateKey, getSignatureFromSignedTransaction, getTransactionMessage, signTransaction, } từ '@solana/transactions';
const transaction = pipe( tạoGiaoDịch(), addSignatureToTransaction(getTransferSolInstruction({})), );
const signedTransaction = signTransaction(transaction, [signer]); const signature = getSignatureFromSignedTransaction(signedTransaction); const message = getTransactionMessage(signedTransaction);
const txid = await sendAndConfirmTransaction({ signedTransaction });
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 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ã lệnh đã tăng lên nhưng tính tùy chỉnh mạnh mẽ hơn.
Giao dịch được khởi xướng qua HTTPS RPC và 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 cách thức mới này rất phụ thuộc vào WSS, tin rằng ứng dụng WSS trong tương lai sẽ ngày càng rộng rãi, điều này thực sự đặt ra yêu cầu cao hơn về sự ổn định dịch vụ của các nhà cung cấp RPC.
React
Đáng chú ý 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 liên tục. Nó cung cấp cho các nhà phát triển một cách thức hiệu quả, linh hoạt và tùy biến để 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.