Seri Pemula Web3: Mengklik MetaMask secara tidak sengaja memunculkan Dompet lain? Status quo penyelesaian konflik Dompet

Kekacauan saat Membuka Dompet

Menghubungkan dompet adalah langkah kunci untuk masuk ke dunia Web3, pengguna Web3 sering perlu terhubung dengan dompet di beberapa situs DApp. Namun, hanya tindakan sederhana ini juga dapat menyebabkan ketidaknyamanan yang serius bagi pengguna.

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Menghubungkan Dompet

Bayangkanlah situasi seperti ini: seorang pengguna Web3 pemula (dengan rasa ingin tahu, dia menginstal banyak dompet plugin) mengunjungi sebuah situs DApp dan ingin menggunakan dompet plugin browsernya untuk terhubung. Namun, ketika mereka mengklik tombol “Sambungkan Dompet” yang disediakan oleh situs tersebut, dan memilih dompet tertentu untuk terhubung ke DApp, mereka mungkin menemukan bahwa dompet yang muncul bukanlah pilihannya. Hal ini mungkin membuat mereka panik dan terkejut, mengira komputer mereka terinfeksi virus sehingga melakukan tindakan yang tidak diharapkan.

Dompet Blockchain adalah pintu masuk penting ke blockchain, dan untuk menguasai pintu masuk ini, setiap dompet menggunakan berbagai cara yang mereka bisa pikirkan. Salah satu yang paling membuat pengembang DApp dan pengguna DApp pusing adalah pengubahan variabel global oleh berbagai dompet.

Dalam logika implementasi dompet browser saat ini, semuanya melibatkan menyuntikkan variabel global ke browser untuk mengekspos fungsionalitas yang disediakan oleh dompet (misalnya, dompet platform Ethereum akan menyuntikkan fungsionalitas yang disediakannya ke ‘ethereum’), sehingga DApp dapat memanggil metode yang disediakan oleh dompet untuk berinteraksi dengannya.

Hanya saja, karena banyak dompet akan menyuntikkan diri ke variabel ethereum yang sama, ini menyebabkan dompet yang didaftarkan kemudian akan menimpa dompet yang didaftarkan sebelumnya, sehingga hanya dapat memanggil yang terdaftar terakhir dengan cara ini.

Kadang-kadang pengguna DApp harus menonaktifkan sementara plugin dompet lain atau menginstal hanya satu dompet saja agar dapat menggunakan dompet yang mereka inginkan dengan normal. Hal ini justru bertentangan dengan gagasan awal pengembang dompet. Bahkan dompet baru yang lebih baik pun sulit menarik pengguna yang sudah menggunakan dompet lain.

Mungkin teman-teman bertanya-tanya, mengapa harus disuntikkan ke dalam variabel yang sama? Asumsikan ada dua dompet: A dan B, sebenarnya hanya perlu A menyuntikkan dirinya sendiri ke ‘a’, B menyuntikkan dirinya sendiri ke ‘b’, jika ingin memanggil dompet mana pun, cukup panggil metode yang sesuai dari objek yang terkait, dan tidak akan terjadi masalah memanggil A tetapi malah memanggil B. Ini memang dapat mengatasi masalah persaingan, tetapi masalahnya adalah jika DApp ingin mendukung koneksi beberapa dompet, maka semua nama dompet yang ingin dikompatibilitaskan oleh pengembang harus didefinisikan sebelumnya dalam kode dan ketika pengguna memilih salah satu dompet, panggil metode terkait dari dompet tersebut. Ini membuat pemeliharaan kode terkait menjadi sangat merepotkan. Namun, jika semua dompet disuntikkan ke dalam objek yang sama, maka masalah ini dapat dihindari.

Solusi

Untuk keluar dari dilema yang sulit di atas, ada dua standar yang mirip dalam komunitas.

Solusi Ethereum: EIP-6963

Komunitas Ethereum mengajukan proposal EIP-6963 pada bulan Mei 2023.

Logika dasarnya sangat sederhana, yaitu dengan mengabaikan variabel global dan beralih menggunakan peristiwa yang disepakati, untuk menyelesaikan masalah registrasi dan penemuan dompet.

Secara khusus, setelah dompet plugin berhasil dimuat, akan memicu peristiwa “eip6963:announceProvider” yang seragam, memberi tahu DApp bahwa ada dompet baru yang tersedia. Dan DApp akan mengetahui dompet yang tersedia saat ini melalui mendengarkan peristiwa ini.

Dengan demikian, melalui seperangkat logika pemantauan acara yang abstrak, masalah yang disebabkan oleh penggunaan variabel global langsung dapat dihindari, dan dompet yang tersedia secara otomatis dapat ditemukan dalam lingkungan pengguna saat ini. Dengan begitu, dilema dapat teratasi.

Standar Komunitas: Standar Wallet

EIP-6963 adalah standar ekosistem Ethereum, tetapi bukan hanya Ethereum, platform rantai lain juga akan menghadapi masalah serupa. Misalnya, dompet di jaringan Solana umumnya akan menyuntikkan diri ke variabel “solana”, yang juga akan menyebabkan situasi persaingan.

Lalu bisakah ekosistem Solana juga memenuhi standar ini? Meskipun EIP-6963 hanya untuk mengatasi masalah penemuan dompet di ekosistem Ethereum, namun gagasan yang terkandung di dalamnya sebenarnya dapat diterapkan di semua platform blockchain. Jadi, apakah kita bisa lebih jauh lagi, menyediakan standar umum yang memungkinkan dompet dan DApp di semua platform blockchain untuk mencapai, sehingga pengembang dan pengguna di semua platform blockchain dapat menikmati kemudahan yang ditawarkan oleh EIP-6963? Secara teori, tidak ada masalah sama sekali, dan sudah ada pengembang yang melakukannya, yaitu Wallet Standard.

Pekerjaan inti yang dilakukan oleh Wallet Standard adalah menyediakan dua fungsi: ‘registerWallet’ dan ‘getWallets’, yang pertama digunakan untuk Dompet, dan yang kedua digunakan untuk DApp.

Dompet memanggil ‘registerWallet’, dengan mengirimkan objek dompet, objek ini mengemas fungsi yang disediakan oleh dompet (misalnya metode Connect, yang digunakan untuk menghubungkan dompet). Di dalam fungsi ini, pertama-tama akan memicu acara ‘RegisterWalletEvent’, parameter acara sebenarnya adalah sebuah fungsi panggil balik, yang digunakan untuk DApp memanggil saat mendengar acara ‘RegisterWalletEvent’, dan fungsi panggil balik ini sebenarnya akan meneruskan objek dompet, sehingga DApp bisa mendapatkan referensi objek dompet dan berinteraksi dengan dompet.

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Pengembang DApp tidak perlu menulis kode untuk mendengarkan dan menerima objek dompet sendiri, ini sudah diintegrasikan ke dalam “getWallets” oleh Wallet Standard. Namun, getWallets hanya mendengarkan peristiwa, bagaimana peristiwa tersebut ditangani masih perlu dipertimbangkan oleh pengembang. Misalnya, di mana Wallets yang diperoleh akan disimpan? Beberapa dompet mungkin sudah dimuat sebelum DApp dimuat, sedangkan beberapa dompet lainnya mungkin dimuat setelahnya, bagaimana status dompet ini dikelola? Untuk masalah detail ini, Wallet Standard juga menyediakan paket “@wallet-standard/react”, pengembang dapat langsung menggunakan React Hooks yang disediakannya untuk mendapatkan data yang diinginkan, termasuk daftar dompet, dompet yang terhubung saat ini, metode yang disediakan oleh dompet, dan lain-lain.

Fitur Standar Dompet

Selain mendapatkan objek Wallet yang paling dasar, Wallet Standard juga mendefinisikan beberapa format Features.

Sebenarnya, dompet memiliki beberapa fungsi dasar, seperti koneksi, memantau peristiwa dompet, dll. Standar Dompet menyediakan fitur-fitur seperti ‘standard:connect’, ‘standard:events’, dan setelah penyedia dompet mengimplementasikan fitur-fitur ini, DApp dapat langsung menentukan apakah dompet mendukung operasi tertentu berdasarkan nilai-nilai ini.

Seperti yang disebutkan sebelumnya, “standard: \ *” adalah fitur yang didefinisikan secara internal, sebenarnya nilai-nilai mereka tidak memiliki persyaratan yang terlalu kuat, sehingga dapat diperluas dengan bebas. Platform rantai yang berbeda juga akan memiliki fitur uniknya, seperti Solana, yang secara langsung menyetujui “solana: \ *”. Fitur umum Solana platform mencakup “solana:signTransaction”, “solana:signMessage”, dan lain-lain.

Standar Dompet Saat Ini

Saat ini, tidak banyak proyek yang mengimplementasikan standar Wallet Standard, yang layak disebut adalah Solana dan Sui.

Di dalam adapter Solana Ant Design Web3, juga mendukung deteksi otomatis dompet yang kompatibel dengan Wallet Standard, pengembang hanya perlu mengaktifkan “autoAddRegisteredWallets” dan tidak perlu mengkonfigurasi banyak metadata dompet, pengalaman pengembangan dan pengalaman pengguna meningkat secara signifikan.

Logika koneksi dompet ZAN.TOP menghadapi masalah yang sama di awalnya, tetapi sekarang, berkat konfigurasi yang disediakan oleh Ant Design Web3, sangat mudah untuk menyesuaikan dengan standar EIP-6963. Semua orang seharusnya sudah merasakan hal ini saat mengikat alamat _wxdyh.

Implementasi Ekosistem Blockchain di Berbagai Daerah

Saat ini, sikap platform blockchain terhadap standar Wallet (atau EIP-6963) tidak sama, berikut adalah beberapa contohnya:

Bitcoin

Sampai saat ini, sepertinya tidak ada standar yang mirip dengan Bitcoin, ada proyek yang menerapkan standar Wallet Standard, tetapi tidak menarik banyak perhatian, dan sekarang sudah lama tidak ada kode baru yang diajukan.

Saat ini pengembang hanya dapat memelihara status secara manual, atau menggunakan beberapa paket pengembangan untuk membantu pekerjaan. Misalnya, dalam implementasi adaptor Bitcoin di Ant Design Web3, untuk berbagai dompet, akan diambil dari berbagai variabel global, dan disimpan dalam status yang seragam. Sejatinya, ini berarti pengembang pustaka mengambil alih pekerjaan pemeliharaan status yang rumit. Selain itu, ini hanya memecahkan masalah konflik dompet, masalah tidak dapat mendeteksi dompet yang tersedia secara otomatis masih ada.

Ethereum

Platform Ethereum telah memiliki standar EIP-6963, sebagian besar pustaka terkait dan Dompet juga telah mendukung.

Solana

Seperti yang disebutkan sebelumnya, pihak resmi telah menyediakan implementasinya:

Sui

Sui目前已经对Wallet Standard提供了实现,在官方文档上可以找到使用方法:

Dukungan Perpustakaan Pengembangan DApps

wagmi

wagmi menyediakan dukungan untuk EIP-6963 melalui pustaka mipd(), dengan rincian lebih lanjut dapat ditemukan di dokumen wagmi.

RainbowKit

Logika internal RainbowKit didasarkan pada wagmi, sehingga juga sudah memiliki dukungan internal untuk EIP-6963.

Ant Design Web3

Adaptor Ethereum dan Solana dari Ant Design Web3 telah mendukung standar keduanya dengan sangat baik dan sangat mudah bagi pengembang untuk mengaktifkannya.

Bagi pengembang DApp Ethereum, Anda hanya perlu menambahkan konfigurasi eip6963, perhatikan yang terkait dengan EIP-6963 di baris 23-25:

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Namun jika Anda adalah pengembang DApp di ekosistem Solana, caranya juga mirip. Ini menyediakan properti autoAddRegisteredWallets:

Web3新手系列:点击MetaMask误唤起其他钱包?钱包冲突解决方案现状

Kesimpulan

EIP-6963 dan Standar Dompet dapat secara signifikan meningkatkan pengalaman pengguna dalam menghubungkan dompet, serta menurunkan ambang batas akses bagi penyedia dompet baru. Kami berharap di masa depan akan ada lebih banyak platform rantai, pengembang dompet, dan DApp yang dapat menyediakan atau mengimplementasikan standar terkait ini, yang akan mengarah pada perkembangan Web3 yang lebih baik.

Artikel ini ditulis oleh tim ZAN (akun resmi @zan_team) oleh gin-lsl.

Lihat Asli
Halaman ini mungkin berisi konten pihak ketiga, yang disediakan untuk tujuan informasi saja (bukan pernyataan/jaminan) dan tidak boleh dianggap sebagai dukungan terhadap pandangannya oleh Gate, atau sebagai nasihat keuangan atau profesional. Lihat Penafian untuk detailnya.
  • Hadiah
  • 2
  • Posting ulang
  • Bagikan
Komentar
Tambahkan komentar
Tambahkan komentar
TheLittleBuddhavip
· 2024-06-17 13:18
Semua All in 🙌Kecepatan pulih sapi🐂Serangan seratus kali lipat koin📈Mentor besar bantu saya💰Lihat tren, untung gila-gilaan di tahun 2024!💸
Lihat AsliBalas0
JinXinlongvip
· 2024-06-17 11:37
Serangan Menguntungkan 100x koin 📈
Lihat AsliBalas0
  • Sematkan