Tinjauan Teknis MetaMask Snap: Pengalaman Pengembangan, Batasan Kemampuan, Keamanan, dan Analisis Potensi Bisnis

LanjutanDec 24, 2023
Artikel ini memperkenalkan fitur-fitur canggih MetaMask Snap, mengeksplorasi bagaimana teknologi ini memungkinkan dompet MetaMask mencapai aplikasi yang lebih beragam melalui plugin. Ini menekankan bagaimana ia menerobos batasan dompet tradisional sambil menjaga keamanan, sehingga mengeluarkan potensi yang lebih besar.
Tinjauan Teknis MetaMask Snap: Pengalaman Pengembangan, Batasan Kemampuan, Keamanan, dan Analisis Potensi Bisnis

Apa itu Snap MetaMask?

Beberapa hari yang lalu, ConsenSys mengumumkan peluncuran MetaMask Snaps Open Beta ke publik. MetaMask Snaps pada dasarnya adalah plugin yang memperluas kemampuan dompet MetaMask. “Snaps” ini adalah aplikasi yang dikembangkan oleh pihak ketiga yang dapat diinstal untuk menambah fungsi baru.

Jika kita membandingkan transformasi MetaMask dengan WeChat yang dilakukan ConsenSys, maka Snap dapat dilihat sebagai Program Mini WeChat. Hasilnya, menjadi jelas bahwa MetaMask, dengan ambisinya, dikombinasikan dengan skala ConsenSys dan basis pengguna MetaMask, akan mengubah lanskap sektor dompet.

Situs web resminya telah mencantumkan 35 Snap yang tersedia dan meluncurkan Snap App Store: https://snaps.metamask.io/.

Daftar Sebagian Snap

Aspek Teknis MetaMask Snap

Jadi, seperti apa MetaMask Snaps dari sudut pandang teknis? Apa kemampuan dan keterbatasan mereka? Apakah mereka aman? Seperti apa pengalaman pengembangnya? Semua faktor ini dapat menentukan potensi MetaMask Snaps di masa depan.

Mulai tahun lalu, LXDAO telah terlibat secara mendalam dalam penelitian penerapan Snaps. Beberapa anggota telah terlibat dalam pengembangan Snap dan berpartisipasi dalam hackathon terkait. Hari ini, kami akan mempelajari pertanyaan-pertanyaan ini dari sudut pandang teknis dan bahkan mengembangkan Snap untuk memberi Anda pengalaman langsung sebagai pengembang.

Memulai dengan MetaMask Snap

Memasang Snap MetaMask

Biasanya Anda dapat menginstal Snaps dari pasar resmi MetaMask Snap, atau langsung dari situs web proyek. Misalnya, dengan UniPass, setelah Anda mengunjungi halaman aplikasi, akan ada tombol untuk menghubungkan MetaMask Anda.

Mengkliknya memulai instalasi Snap:

Menggunakan MetaMask Snap

Setelah terinstal, Anda dapat mulai menggunakan produk dan fitur-fiturnya. Dalam hal ini, UniPass akan membuatkan akun kontrak pintar untuk Anda, yang dapat Anda kendalikan melalui MetaMask EOA (Akun Milik Eksternal) Anda.

Saat Anda memulai transfer, UniPass memicu pop-up Snap untuk mengonfirmasi apakah Anda ingin menjalankan operasi untuk dompet UniPass AA.

Setelah konfirmasi melalui MetaMask, Anda dapat melanjutkan transaksi. Dalam skenario ini, MetaMask memperoleh kendali atas dompet UniPass AA melalui Snap, sehingga menghilangkan kebutuhan UniPass untuk mengembangkan plugin dompetnya sendiri. Hal ini juga memungkinkan orientasi pengguna berbiaya rendah melalui MetaMask.

Wawasan Apa yang Dapat Kami Kumpulkan dari Proses Instalasi dan Penggunaan Ini?

  1. Kontrol Izin yang Terperinci: Snaps menawarkan pengaturan izin yang rumit, mencakup koneksi dompet, permintaan jaringan, dan banyak lagi. Mereka dirancang dengan pendekatan “Prinsip Hak Istimewa Terkecil” yang mengutamakan keamanan.
  2. Manajemen Paket melalui NPM: Seperti yang ditunjukkan oleh npm:@unipasswallet/unipass-snap, Snap mengandalkan NPM untuk manajemen paket dan versi, ini mungkin memiliki masalah keamanan, yang akan kami jelaskan nanti.
  3. Fleksibilitas Tinggi namun UI Ringkas: Snap sangat mudah beradaptasi, memungkinkan proyek untuk mengembangkan dan menentukan fitur dan logikanya sendiri. Namun, antarmuka pengguna mungkin memerlukan beberapa penyempurnaan.
  4. Pengalaman Sederhana dan Andal: Snaps memberikan pengalaman pengguna yang lancar dan andal, memenuhi standar tingkat Beta dan produksi.

Keamanan selalu diutamakan dalam produk dompet. Mari selidiki desain keamanan Snaps.

Apakah Snap Aman?

Analisis Runtime Kode Snap

Snaps didasarkan pada NPM, yang menyiratkan bahwa itu adalah aplikasi web dan JavaScript. Seperti yang kita ketahui, JavaScript sangat fleksibel namun rentan terhadap serangan seperti XSS dan phishing. Jadi bagaimana MetaMask Snap mengatasi tantangan ini?

Setelah melakukan penelitian, kami menemukan bahwa MetaMask telah mendanai dan mengintegrasikan Hardened JavaScript (atau Secure EcmaScript) milik Agoric sebagai solusi sandboxing yang “tervirtualisasi sepenuhnya”. Agoric telah menyusun API pembatasan JavaScript dan mengirimkan rancangan proposal ke TC-39: Proposal TC-39.

Secara sederhana, Hardened JavaScript adalah subset JavaScript standar yang lebih aman. Dengan menyesuaikan beberapa kemampuan JavaScript dan membatasi panggilan API, hal ini mengurangi berbagai risiko. Ini menciptakan kotak pasir yang aman untuk mengeksekusi kode dan mengikuti “Prinsip Hak Istimewa Terkecil” dalam merencanakan izin kode.

Untuk spesifikasi teknis lebih rinci tentang Hardened JavaScript, silakan merujuk ke: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.

Agoric dan MetaMask telah bersama-sama mengembangkan LavaMoat (https://github.com/LavaMoat/lavamoat) proyek untuk meningkatkan keamanan Snaps. LavaMoat terutama mengatasi risiko keamanan dari ketergantungan eksternal dalam proyek JavaScript.

Baik Agoric maupun MetaMask telah menjalani pengujian keamanan kotak hitam dan kotak putih serta telah menerbitkan laporan keamanan terperinci. (Detail lebih lanjut: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). Oleh karena itu, pada tingkat eksekusi kode, kami memiliki banyak alasan untuk meyakini bahwa Snaps aman.

Sumber Terbuka dan Kode yang Diaudit

Terlepas dari otorisasi pengguna yang eksplisit dan desain dengan hak paling rendah, agar dapat diakui secara resmi, Snaps harus bersumber terbuka, sehingga mengurangi kemungkinan kode berbahaya. Kami juga mengamati bahwa Snap yang terdaftar di situs web resmi telah menjalani audit keamanan pihak ketiga, sehingga semakin meningkatkan kredibilitasnya.

Apakah ada risiko keamanan dengan Snaps yang dikelola melalui NPM?

Saat ini, Snaps dikelola berdasarkan paket dan versi NPM. NPM adalah alat manajemen paket yang banyak digunakan untuk Pengembangan Web, memungkinkan pengembang dan tim proyek merilis paket dan kode baru secara mandiri.

MetaMask tidak memiliki kendali atas rilis versi pada platform NPM. Ada kemungkinan bahwa perubahan versi terbaru tidak bersumber terbuka atau diaudit, bukan?

Setelah klarifikasi resmi, semua perubahan pada versi paket NPM perlu ditinjau oleh tim resmi dan ditambahkan ke daftar putih sebelum dapat diinstal. Oleh karena itu, meskipun tim proyek merilis paket NPM baru, paket tersebut tidak dapat diinstal oleh pengguna hingga paket tersebut terdaftar secara resmi. Pendekatan ini tidak diragukan lagi meningkatkan biaya pembaruan versi Snap tetapi memang merupakan solusi paling aman. Ini mencerminkan filosofi desain MetaMask Snap yang memprioritaskan keamanan di atas segalanya.

Kemampuan Teknis dan Keterbatasan MetaMask Snap

MetaMask Snap baru-baru ini diumumkan secara resmi, namun sebenarnya telah dikembangkan selama lebih dari empat tahun! Konsep awal MetaMask Snap dirilis oleh Dan Finlay pada 10 Oktober 2019 di Medium. Artikel Sedang.

Menyeimbangkan keamanan, fleksibilitas, dan efisiensi merupakan tantangan yang signifikan. Jelas bahwa MetaMask telah menginvestasikan banyak sumber daya dan persiapan dalam upaya ini.

Saat ini, ada tiga API utama yang paling banyak diekspos:

  1. Interoperabilitas: Memungkinkan pengembang membuat dompet untuk rantai lain berdasarkan MetaMask.
  2. Wawasan Transaksi: Memungkinkan pengembang mengambil data transaksi sebelum pengguna memulai transaksi, untuk penilaian risiko.
  3. Notifikasi: Memungkinkan pengiriman pesan langsung ke pengguna melalui Snaps, meskipun hal ini tampaknya memerlukan dukungan situs web dan tampaknya agak terbatas.

Di bawah ini adalah pengenalan singkat tentang kemampuan dan efek spesifik yang dibuka oleh MetaMask Snap, untuk memberi Anda pemahaman yang lebih jelas.

Kemampuan notifikasi

Antarmuka Snap_notify dapat menampilkan notifikasi dalam MetaMask atau browser. Snaps dapat mengirim pesan langsung ke pengguna melalui antarmuka ini, seperti yang ditunjukkan pada gambar di bawah.

Kemampuan Wawasan Transaksi

Saat pengguna berinteraksi dengan kontrak pintar, MetaMask memicu peristiwa onTransaction Snap. MetaMask meneruskan transaksi mentah yang tidak ditandatangani ke metode pengendali onTransaction. Snaps kemudian dapat mengembalikan antarmuka pada halaman konfirmasi sekunder transaksi, menyesuaikan konten yang ditampilkan.

Melalui kemampuan ini, fitur-fitur seperti audit informasi transaksi yang aman dan tampilan informasi yang diperluas dapat diwujudkan.

Antarmuka dialog dan kemampuan antarmuka khusus

Kemampuan Dialog memungkinkan Snaps untuk memunculkan jendela terpisah secara langsung, mirip dengan kotak dialog Peringatan/Konfirmasi/Prompt tradisional. Ini masing-masing digunakan untuk pengingat, konfirmasi, dan pengiriman informasi.

Melalui Dialog, Anda akan dapat menyesuaikan antarmuka dan operasi interaktif sederhana untuk diintegrasikan dengan DApp Anda.

Apa yang tidak dapat dicapai MetaMask Snap saat ini?

Karena alasan keamanan, Snap saat ini tidak mendukung kerangka kerja frontend pihak ketiga dan hanya menyediakan UIKit terbatas. Di sini, kami masih menggunakan Insight sebagai contoh, menampilkan pustaka komponen UI yang tersedia untuk pengembang.

Seperti yang ditunjukkan pada gambar, fitur saat ini mencakup Judul (teks besar), Teks (teks kecil), Panel (kartu sekali pakai), Pembagi, Dapat Disalin (klik untuk menyalin), dan subset fitur Penurunan Harga (tebal dan miring). Oleh karena itu, kemampuan interaktif tampaknya tidak dapat dicapai untuk sementara, dan HTML yang disematkan tidak dapat digunakan untuk interaksi. Namun, setelah mengajukan pertanyaan di Discord resmi, mereka menyatakan batasan ini adalah untuk alasan keamanan dan mungkin akan dilonggarkan di versi mendatang.

Selain itu, demi alasan keamanan, permintaan eksternal hanya didukung melalui metode Ambil dan tidak mendukung protokol permintaan tambahan seperti WebSocket. Karena keterbatasan keamanan, kemampuan, dan privasi, informasi klien juga tidak dapat diakses, seperti URL saat ini yang memicu Snap, sehingga menyulitkan penerapan fitur yang lebih luas.

Sebagian besar masalah ini berasal dari masalah keamanan. Kami yakin seiring dengan validasi keamanan dari waktu ke waktu, lebih banyak izin akan diberikan.

Dengan diperkenalkannya API ini, MetaMask pada dasarnya telah berevolusi menjadi produk platform terbuka. Rasanya mirip dengan saat WeChat meluncurkan Akun Resmi dan program Mininya, yang bertransformasi dari sekadar alat obrolan.

Pada tahun 2019, MetaMask telah meramalkan lanskap pasar saat ini dengan berbagai jaringan publik, pihak proyek, dan persyaratan dompet khusus. Daripada setiap proyek mengembangkan pluginnya sendiri dan pengguna harus menginstal beberapa plugin, akan lebih efisien jika mengembangkan berdasarkan MetaMask Snap. Pada Snaps gelombang pertama, kami melihat dompet dari ekosistem selain EVM, seperti Sui Wallet, Solana Wallet, dan Arweave Wallet. Mengingat basis pengguna yang ada, MetaMask Snap pasti akan memberikan dampak signifikan pada lanskap dompet.

Faktanya, potensi MetaMask Snap mungkin lebih besar dari yang kita bayangkan, lebih dari sekadar dompet. Kita juga dapat melihat upaya dari tim EthSign, yang menciptakan pengelola kata sandi universal yang disebut KeyChain berdasarkan MetaMask Snaps. Semua kata sandi browser dapat dienkripsi dan disimpan menggunakan kunci dompet. Dengan mengamankan dompet Anda, pada dasarnya Anda mengamankan semua kata sandi Anda.

Ada juga kreasi dari tim Web3MQ. Web3MQ adalah jaringan relai komunikasi terdesentralisasi berkinerja tinggi. Snap Web3MQ akan berfungsi sebagai kliennya untuk memfasilitasi interaksi pesan, pemberitahuan, peringatan, dan fungsi push. Ini akan berintegrasi dengan DApps lain yang terhubung ke Web3MQ, seperti alat obrolan atau game berbasis blockchain, dan lain-lain. Dengan bantuan Web3MQ Snap, pesan dan pembaruan akan secara otomatis dikirim ke pengguna Metamask Snap, sehingga menghilangkan kebutuhan otorisasi pengguna tambahan. Hal ini menciptakan koneksi yang tidak dapat dipercaya antara pengguna dan antara pengguna dan aplikasi.

Snaps sangat berpusat pada pengembang. Dengan API terbuka, bagaimana pengalaman pengembang? Mari selami cara membuat Snap untuk mencari tahu.

Membuat Snap untuk Pengujian

Proses Berpikir

Sudah diketahui bahwa sebagian besar pengguna sering kali tidak mengetahui kontrak pintar yang mereka gunakan, termasuk masalah berikut:

  1. Apakah kontrak transaksi telah digantikan oleh situs phishing.
  2. Apakah kontrak transaksi dapat ditingkatkan.
  3. Apakah kontrak pintar baru diterapkan dan belum diverifikasi oleh banyak orang.
  4. Apakah kontrak transaksi bersifat open-source.

Bagi pengguna rata-rata, mengharapkan mereka untuk meninjau kode soliditas kontrak sebelum setiap operasi adalah hal yang sulit. Situasi ini ideal untuk fitur Transaction Insight untuk menganalisis kontrak pintar, seperti menggunakan AI untuk audit keamanan awal, yang mungkin menyaring 80% serangan phishing dasar.

Menyiapkan Lingkungan Pembangunan

Pemasangan Dompet

Pertama, instal MetaMask Flask.

MetaMask Flask adalah versi ekstensi MetaMask yang berpusat pada pengembang, terutama digunakan untuk melihat pratinjau fitur baru dan pengembangan fungsi eksperimental. Ingat, ini untuk pengembangan, bukan untuk penggunaan sehari-hari. Jangan impor kunci pribadi Anda yang digunakan sehari-hari. Kami menggunakan Flask di sini terutama untuk melihat pratinjau Snap yang kami kembangkan secara lokal.

Disarankan untuk menonaktifkan sementara dompet MetaMask reguler Anda dan dompet browser lainnya setelah memasang atau membuat profil Chrome baru untuk menghindari konflik.

Pembuatan Akun

Setelah memasang dompet, buat yang baru seperti dompet MetaMask biasa. Ini adalah dompet percobaan, jadi jangan impor dompet penggunaan sehari-hari Anda.

Selanjutnya, kita perlu menyetor beberapa koin uji ke dalam dompet yang baru dibuat, yang dapat diperoleh melalui faucet. Snap yang dibahas dalam artikel ini menggunakan Goerli, jadi konten berikut akan fokus pada Goerli.

Untuk menginisialisasi Snap berdasarkan templat, ikuti dokumentasi resmi. Pertama, gunakan CLI @metamask/create-snap untuk membuat proyek Snap baru. Pada saat yang sama, kami akan melakukan inisialisasi menggunakan templat resmi:

benang buat @metamask/snap wawasan-transaksi-snap && cd wawasan-transaksi-snap

Struktur File Jepret

File Snap utama ada di ./packages/snap. Struktur direktorinya adalah:

File konfigurasi Snap ada di snap.mainfest.json, dan bagian utama Snap ada di ./src/index.ts, yang cukup ringkas.

Mengaktifkan Izin

Pertama, aktifkan izin. Tambahkan tiga baris berikut ke snap.mainfest.json:

jsonSalin kode

“Izin awal”: {

“endowment:transaction-insight”: {}, // Wawasan transaksi

“endowment:ethereum-provider”: {}, // Akses ke RPC

“dana abadi:akses jaringan”: {} //

Dalam file manifes, Anda juga dapat memperbarui description dan proposedName untuk mengubah deskripsi dan nama proyek.

Mengambil Transaksi

Untuk demo ini, yang diperlukan hanyalah memodifikasi file index.ts untuk menyelesaikan semua fungsi. Di bawah ini adalah cuplikan kode yang disederhanakan. Untuk kode lengkap yang dapat dijalankan, silakan kunjungi: https://github.com/LidamaoHub/insights.

tsxSalin kode

impor { OnTransactionHandler, OnRpcRequestHandler } dari ' @metamask/snaps-types';

impor { heading, panel, text, copyable, divider } dari ' @metamask/snaps-ui';

ekspor const onTransaction: OnTransactionHandler = async ({ transaction }) => {

// transaction mencakup nilai seperti to (alamat kontrak) dan data (data interaksi)

// Contoh kode untuk mengambil informasi Audit untuk kontrak di bawah ini

const info = menunggu pengambilan(http://contract-info.audit.dev/?address=${transaction.to});

// Di bawah ini adalah contoh kode UI

kembali {

isi: [

 teks( 

 `${info.riskList.length} item risiko`, 

 ), 

 judul(`${info.riskList.length ? 'Risk List' : ''}`), 

 ...info.riskList.map((item, i) => teks(`${i + 1} ${item.text}`)), 

 pembagi(), 

 teks( 

 `Info audit lebih lanjut dari url berikut`, 

 ), 

 dapat disalin( 

 `https://kontrak- info.audit.dev/mm${info.token}`, 

 )

]

};

};

Untuk fitur yang lebih mendalam, lihat Dokumentasi Pengembang Snap MetaMask.

Setelah instalasi, setiap transaksi Anda akan menampilkan peringatan risiko serupa:

Pengalaman pengembangan dengan Snaps saat ini cukup lancar, dengan sedikit masalah. Templat resminya juga kaya dan beragam. Pengembang berpengalaman biasanya dapat memulai dan mengembangkan Snap yang mereka perlukan dalam beberapa jam. Namun, hambatan terbesar dalam rilis resmi yang ditujukan untuk khalayak umum adalah audit keamanan. Tidak semua pengembang independen atau tim kecil memiliki sumber daya untuk melakukan audit terhadap Snap mereka. Oleh karena itu, kuantitas dan keragaman Snap diperkirakan tidak akan mengalami pertumbuhan eksplosif dalam jangka waktu yang lama.

Dukungan Pengembang

Jika Anda berhasil menjalankan contoh di atas, selamat, Anda adalah pengembang pemula Snap yang memenuhi syarat!

Tahun lalu, MetaMask secara resmi meluncurkan MetaMask Grants DAO untuk mendanai proyek bernilai tinggi dalam ekosistem MetaMask. Ini adalah inisiatif eksperimental yang digerakkan oleh karyawan, yang bertujuan untuk menawarkan hibah kepada pengembang eksternal global untuk membangun pengalaman yang berdampak dalam ekosistem MetaMask. Sebagian dari keuntungan triwulanan MetaMask disalurkan ke DAO ini, dan anggaran tahunannya saat ini mencapai $2,4 juta.

Proyek apa pun yang memperkaya ekosistem MetaMask dapat mengajukan permohonan Hibah MetaMask resmi dari MetaMask Grants DAO. Untuk informasi lebih lanjut, silakan kunjungi https://metamaskgrants.org/.

Perlu disebutkan bahwa LXDAO merasa terhormat telah mengajukan dan menerima hibah dari MetaMask tahun ini, dan telah secara aktif berpartisipasi dalam pengembangan proyek terkait, berkontribusi pada ekosistem MetaMask!

Kesimpulan

Kami telah membedah Snap dari sudut pandang teknis, pertimbangan keamanannya, batasannya, dan pengalaman pengembangnya. Kesimpulan:

  • Snap mirip dengan Program Mini WeChat, yang membuka peluang lebih luas untuk MetaMask.
  • Keamanannya relatif dapat diandalkan. Kode ini berjalan di lingkungan sandbox terbatas. Kode tersebut harus bersumber terbuka dan diaudit. Tim resmi telah menyiapkan daftar putih instalasi untuk otorisasi instalasi.
  • Karena masalah keamanan, permukaan API saat ini agak terbatas. Namun, ini masih memungkinkan beragam Snap imajinatif.
  • Dengan empat tahun penyempurnaan dan pengujian di dunia nyata, pengalaman pengembang adalah yang terbaik. Namun, karena tindakan pencegahan keamanan bawaan, termasuk mekanisme daftar putih dan audit wajib, jangan berharap banjir Snaps akan membanjiri pasar dalam waktu dekat. Namun hal ini dapat dimengerti, Program Mini WeChat memiliki permulaan yang lambat dengan API yang sangat terbatas, meledak sejak tahun 2018, dan sekarang terdapat 450+ juta DAU dan 7+ juta Program Mini.

Saat ini MetaMask Snap masih menjalani iterasi cepat. Diperkirakan akan ada lebih banyak izin dan kemampuan yang terbuka di masa mendatang. Ada harapan untuk diperkenalkannya mekanisme yang lebih terbuka namun aman, seperti sistem audit berbiaya rendah yang aman dan tanpa izin, sehingga memungkinkan lebih banyak pengembang untuk berpartisipasi dengan biaya lebih rendah. Jika masalah ini diatasi, diperkirakan akan terjadi lonjakan permintaan di masa depan. Bahkan mungkin akan muncul posisi khusus pengembang Snap.

Dengan memanfaatkan basis pengguna MetaMask yang sangat besar, pengembang indie juga dapat menemukan peluang unik. Mari kita nantikan inovasi terobosan berikutnya yang akan dihadirkan Snaps.

Terakhir, terima kasih atas artikel Anda. Saya yakin hal ini akan berkontribusi secara signifikan dalam meningkatkan kesadaran tentang kondisi MetaMask Snaps saat ini.

Silakan terus ikuti Twitter kami:https://twitter.com/LXDAO_Official@lxdao_official . Kami akan meluncurkan lebih banyak konten terkait MetaMask Snap seperti lokakarya, jadi pantau terus!

Penafian:

  1. Artikel ini dicetak ulang dari [medium]. Semua hak cipta milik penulis asli [LXDAO]. Jika ada keberatan terhadap cetak ulang ini, silakan hubungi tim Gate Learn(gatelearn@gate.io), dan mereka akan segera menanganinya.
  2. Penafian Tanggung Jawab: Pandangan dan pendapat yang diungkapkan dalam artikel ini adalah sepenuhnya milik penulis dan bukan merupakan nasihat investasi apa pun.
  3. Terjemahan artikel ke bahasa lain dilakukan oleh tim Gate Learn. Kecuali disebutkan, dilarang menyalin, mendistribusikan, atau menjiplak artikel terjemahan.
เริ่มตอนนี้
สมัครและรับรางวัล
$100
ลงทะเบียนทันที