Sự nhầm lẫn khi gợi lên ví
Kết nối ví là bước quan trọng để bước vào thế giới Web3 Web3. người dùng thường cần Ví được kết nối với một số trang web DApp. Tuy nhiên, chỉ hành động đơn giản này cũng có thể gây ra sự bất tiện nghiêm trọng cho người dùng.
Kết nối ví
Hãy tưởng tượng kịch bản này: một người dùng Web3 mới (vì tò mò, anh ấy đã cài đặt nhiều ví plug-in) , đã truy cập một trang web DApp nhất định và muốn sử dụng ví plug-in trình duyệt của riêng họ để kết nối với nó, nhưng khi họ nhấp vào nút "Kết nối ví" do trang web cung cấp và chọn một ví nhất định để sử dụng nó. DApp, bạn có thể thấy rằng ví bật lên không phải là ví bạn đã chọn. Điều này rất có thể sẽ khiến anh ta cảm thấy hoảng sợ, ngột ngạt, tưởng rằng máy tính của mình bị nhiễm virus nên thực hiện những hành động mà mình không ngờ tới.
Ví Blockchain là một lối vào quan trọng của blockchain và để chiếm được lối vào này, mỗi ví sẽ sử dụng mọi phương pháp mà chúng có thể nghĩ ra. Trong số đó, điều rắc rối nhất đối với các nhà phát triển DApp và người dùng DApp là việc giả mạo các biến toàn cầu của từng ví.
Trong logic triển khai ví trình duyệt hiện tại, các chức năng do ví cung cấp sẽ được hiển thị bằng cách đưa các biến toàn cục vào trình duyệt (ví dụ: ví của nền tảng Ethereum sẽ Đưa các chức năng mà nó cung cấp vào " window.ethereum ") để DApp có thể gọi các phương thức do ví cung cấp để tương tác với nó.
Tuy nhiên, do nhiều ví sẽ tự đưa vào cùng một biến window.ethereum nên ví được đăng ký sau sẽ ghi đè lên ví đã đăng ký trước đó. người ta có thể được gợi lên theo cách này.
Đôi khi, để sử dụng ví mà họ muốn sử dụng bình thường, người dùng DApp phải tạm thời vô hiệu hóa các plug-in ví khác hoặc chỉ cài đặt một ví nhất định . Theo cách này, nó khá khác biệt so với ý tưởng ban đầu của nhà phát triển ví. Và ngay cả khi ví mới hoạt động tốt hơn thì cũng sẽ khó thu hút được người dùng đang sử dụng các ví khác.
Một số bạn có thể thắc mắc, tại sao họ lại phải đưa vào cùng một biến? Giả sử có hai ví: A và B. Trên thực tế, miễn là A tự tiêm vào " window.a" và B tự tiêm vào " window.b", bất kỳ ví nào bạn muốn gọi, hãy gọi nó đối tượng tương ứng. Bằng cách sử dụng phương thức được cung cấp trong , vấn đề muốn gọi A nhưng thay vào đó lại gọi B sẽ không xảy ra. Điều này thực sự có thể giải quyết vấn đề cạnh tranh, nhưng vấn đề là nếu DApp hỗ trợ nhiều kết nối ví, tất cả tên ví mà nhà phát triển muốn điều chỉnh phải được xác định trước trong mã và khi người dùng chọn một số khi nhập một ví, hãy gọi các phương thức liên quan của ví. Kết quả là việc duy trì các mã liên quan khá rắc rối. Bằng cách đưa ví vào cùng một đối tượng một cách thống nhất, bạn có thể tránh được rắc rối này.
Giải pháp
Để thoát khỏi tình trạng khó xử trên, có hai vấn đề tương tự trong tiêu chuẩn cộng đồng.
Giải pháp của Ethereum: EIP-6963
Cộng đồng Ethereum vào năm 2023 Đề xuất tháng 5 EIP-6963 đã được đề xuất vào tháng 3.
Logic cơ bản rất đơn giản, đó là loại bỏ các biến toàn cục và thay vào đó sử dụng các sự kiện đã được thống nhất để giải quyết các vấn đề về đăng ký và khám phá ví.
Đặc biệt, sau khi ví plug-in được tải thành công, một sự kiện " eip6963:announceProvider " thống nhất được kích hoạt để thông báo cho DApp rằng một ví mới có sẵn. DApp lắng nghe sự kiện này để tìm hiểu xem ví nào hiện có sẵn cho nó.
Bằng cách này, thông qua một tập hợp logic xử lý sự kiện trừu tượng, sẽ tránh được các vấn đề do sử dụng trực tiếp các biến toàn cục và các ví có sẵn trong môi trường người dùng hiện tại có thể được tự động phát hiện. Bằng cách này, vấn đề nan giải được giải quyết.
Tiêu chuẩn cộng đồng: Tiêu chuẩn ví
EIP-6963 là tiêu chuẩn sinh thái Ethereum, nhưng nó Không chỉ Ethereum và các nền tảng chuỗi khác sẽ gặp vấn đề tương tự. Ví dụ: các ví trên chuỗi Solana thường sẽ tự đưa mình vào biến " window.solana ", điều này cũng sẽ gây ra sự cạnh tranh.
Vậy hệ sinh thái Solana cũng có thể triển khai tiêu chuẩn này không? Mặc dù EIP-6963 chỉ được thiết kế để giải quyết vấn đề khám phá ví trong hệ sinh thái Ethereum nhưng những ý tưởng trong đó thực sự có thể được áp dụng cho tất cả các nền tảng chuỗi. Vì vậy, chúng ta có thể tiến thêm một bước nữa và cung cấp một bộ tiêu chuẩn chung có thể được triển khai bởi ví và DApp trên tất cả các nền tảng blockchain, để các nhà phát triển và người dùng của tất cả các nền tảng chuỗi có thể tận hưởng sự tiện lợi do EIP-6963 cung cấp không? Về lý thuyết thì không có vấn đề gì cả và đã có những nhà phát triển làm việc này, cụ thể là Wallet Standard.
Công việc cốt lõi của Wallet Standard là cung cấp hai chức năng: "registerWallet " và " getWallets". Được sử dụng cho DApps.
Ví gọi " registerWallet", truyền vào một đối tượng ví, đóng gói các chức năng do ví cung cấp (chẳng hạn như phương thức Connect, được sử dụng để kết nối vào ví). Sự kiện RegisterWalletEvent sẽ được kích hoạt bên trong hàm. Tham số của sự kiện thực sự là một hàm gọi lại, được sử dụng để gọi khi DApp lắng nghe sự kiện RegisterWalletEvent. Hàm gọi lại này thực sự sẽ chuyển vào đối tượng ví, vì vậy DApp có thể. lấy đối tượng ví, bạn có thể tương tác với ví.
Các nhà phát triển DApp không cần phải viết mã để giám sát và nhận các đối tượng ví. Phần này cũng đã được Wallet Standard tích hợp vào " getWallets ". Tuy nhiên, getWallets chỉ lắng nghe các sự kiện. Nhà phát triển vẫn cần xem xét cách xử lý các sự kiện. Ví dụ: Nên đặt Ví thu được ở đâu? Một số ví được tải trước khi tải DApp, trong khi các ví khác có thể được tải sau. Trạng thái của các ví này được duy trì như thế nào? Wallet Standard cũng cung cấp gói " @wallet-standard/react " cho các vấn đề chi tiết ở trên. Nhà phát triển có thể trực tiếp sử dụng React Hooks mà nó cung cấp để lấy dữ liệu mong muốn, bao gồm danh sách ví, ví hiện được kết nối, các Phương thức do Wallet cung cấp. ví, v.v.
Các tính năng tiêu chuẩn của Ví
Ngoài những tính năng cơ bản nhất quyền truy cập vào Wallet Ngoài các đối tượng, Wallet Standard còn xác định một số định dạng Tính năng.
Trên thực tế, ví có một số chức năng cơ bản nhất như kết nối, nghe các sự kiện của ví, v.v. Wallet Standard cung cấp các tính năng như "standard:connect" và "standard:events ". Sau khi nhà cung cấp ví triển khai các tính năng này, DApp có thể trực tiếp xác định xem ví có hỗ trợ các hoạt động nhất định hay không dựa trên các giá trị này.
Các "tiêu chuẩn:*" được đề cập ở trên là các đặc điểm được xác định sẵn của nó. Trên thực tế, các giá trị của chúng không có yêu cầu đặc biệt mạnh mẽ nên chúng có thể. được mở rộng theo ý muốn. Các nền tảng chuỗi khác nhau cũng sẽ có những đặc điểm riêng. Ví dụ: Solana, chỉ cần đồng ý về "solana:*". Các tính năng phổ biến của nền tảng Solana bao gồm "solana:signTransaction", "solana:signMessage", v.v.
Hiện trạng Tiêu chuẩn Ví
Tiêu chuẩn Tiêu chuẩn Ví là hiện đang triển khai Thực tế không có nhiều dự án, nhưng đáng nói đến Solana và Sui.
Trong bộ chuyển đổi Solana của Ant Design Web3, tính năng tự động phát hiện các ví phù hợp với Tiêu chuẩn Ví cũng được hỗ trợ. Về cơ bản, các nhà phát triển chỉ cần vượt qua " autoAddRegisteredWallets  ; "Chỉ cần bật nó lên. Không cần định cấu hình nhiều siêu dữ liệu ví, trải nghiệm phát triển và trải nghiệm người dùng sẽ tăng vọt.
Logic của ZAN.TOP kết nối với ví cũng gặp phải vấn đề tương tự ngày đầu, nhưng giờ đây, nhờ cấu hình do Ant Design Web3 cung cấp, nó có thể dễ dàng điều chỉnh. Được trang bị tiêu chuẩn EIP-6963. Mọi người chắc hẳn đã từng trải qua điều này khi liên kết một địa chỉ tại https://zan.top/personal/account?chInfo=ch_wxdyh
Hiện thực hóa từng hệ sinh thái blockchain
Hiện tại, mỗi nền tảng blockchain đều hỗ trợ Tiêu chuẩn Ví ( Hoặc EIP -6963) có những quan điểm khác nhau Dưới đây là một vài ví dụ:
Bitcoin
Bitcoin cho đến nay dường như không có tiêu chuẩn tương tự. Có một dự án triển khai Tiêu chuẩn Ví, nhưng nó không thu hút được nhiều sự chú ý và đã lâu không có mã mới nào được gửi.
Hiện tại, nhà phát triển chỉ có thể duy trì trạng thái theo cách thủ công hoặc sử dụng một số gói phát triển để hỗ trợ công việc. Ví dụ: khi triển khai bộ chuyển đổi Bitcoin trong Ant Design Web3, các biến toàn cục khác nhau được lấy từ các ví khác nhau và được lưu trữ ở trạng thái thống nhất. Điều này thực sự có nghĩa là nhà phát triển thư viện đã đảm nhận công việc bảo trì trạng thái tẻ nhạt. Hơn nữa, điều này chỉ giải quyết được vấn đề xung đột ví, còn vấn đề không thể tự động phát hiện các ví có sẵn vẫn còn tồn tại.
Ethereum
Nền tảng Ethereum đã có tiêu chuẩn EIP-6963, các thư viện và ví liên quan Hầu hết cũng cung cấp hỗ trợ.
Solana
Như trên, cách triển khai chính thức được cung cấp: https://github. com /solana-labs/wallet-standard
Sui
Sui hiện cung cấp Wallet Standard To triển khai, bạn có thể tìm thấy phương pháp sử dụng trong tài liệu chính thức: https://docs.sui.io/standards/wallet-standard
Hỗ trợ thư viện phát triển DApps< /h2>wagmi
wagmi qua mipd (https://github.com/wevm/mipd) Thư viện cung cấp hỗ trợ cho EIP-6963. Đối với các phương pháp cụ thể, bạn có thể xem tài liệu về wagmi.
RainbowKit
RainbowKit (https://www.rainbowkit.com/) logic bên trong Dựa trên wagmi, nó cũng có hỗ trợ tích hợp cho EIP-6963.
Ant Design Web3
Ant Design Web3 (https://web3.ant.design /) Bộ điều hợp Ethereum và Solana của Ethereum hỗ trợ rất tốt cho cả hai tiêu chuẩn và rất dễ dàng để các nhà phát triển mở.
Đối với nhà phát triển Ethereum DApp, họ chỉ cần thêm cấu hình eip6963. Lưu ý rằng các dòng liên quan đến EIP-6963 nằm ở dòng 23-25:
p>
Và nếu bạn là nhà phát triển DApp trong hệ sinh thái Solana, phương pháp này cũng tương tự. Nó cung cấp thuộc tính autoAddRegisteredWallets:
Tóm tắt
EIP-6963 và Wallet Standard có thể cải thiện đáng kể trải nghiệm của người dùng khi kết nối với ví và giảm bớt chi phí của ví mới. Rào cản gia nhập đối với các nhà cung cấp ví. Hy vọng rằng trong tương lai sẽ có thêm nhiều nền tảng chuỗi, ví và nhà phát triển DApp có thể cung cấp hoặc triển khai các tiêu chuẩn liên quan, điều này sẽ giúp Web3 phát triển theo hướng tốt hơn.