
MetaMask Snap: Phân tích trải nghiệm phát triển, giới hạn chức năng, bảo mật và tiềm năng thương mại
Tuyển chọn TechFlowTuyển chọn TechFlow

MetaMask Snap: Phân tích trải nghiệm phát triển, giới hạn chức năng, bảo mật và tiềm năng thương mại
MetaMask Snap là gì? Nó có những khả năng kỹ thuật nào?
Tác giả: Lý Đại Miêu, Bruce
MetaMask Snap là gì?
Vài ngày trước, ConsenSys đã công bố ra mắt phiên bản Open Beta của MetaMask Snaps dành cho công chúng. MetaMask Snaps có thể mở rộng khả năng của ví, người dùng có thể cài đặt các ứng dụng (Snap) do bên thứ ba phát triển để bổ sung chức năng mới.
Nếu nói ConsenSys đã biến MetaMask thành WeChat, thì Snap chính là các mini-program trên WeChat. Có thể thấy tham vọng của MetaMask, kết hợp quy mô của ConsenSys và lượng người dùng khổng lồ của MetaMask,格局 sẽ thay đổi đáng kể trong lĩnh vực ví tiền mã hóa.
Hiện tại, đội ngũ chính thức đã công bố 35 Snap có sẵn và ra mắt cửa hàng ứng dụng Snap tại https://snaps.metamask.io/.

Tổng quan một số Snap
Vậy xét về mặt kỹ thuật, MetaMask Snap cụ thể là gì? Những giới hạn về quyền lực của chúng ra sao? Có an toàn không? Trải nghiệm lập trình viên như thế nào? Tất cả những điều này có lẽ sẽ quyết định tiềm năng tương lai của MetaMask Snap.
Từ năm ngoái, LXDAO đã nghiên cứu sâu về cách thức triển khai Snap, hiện nay nhiều thành viên đã tham gia phát triển Snap và tích cực tham gia vào các cuộc thi hackathon liên quan. Hôm nay, chúng tôi sẽ đi sâu vào phân tích các câu hỏi trên từ góc độ kỹ thuật, đồng thời thực hành xây dựng một Snap để bạn cảm nhận được trải nghiệm phát triển Snap.
Trải nghiệm ban đầu với MetaMask Snap
Cài đặt MetaMask Snap
Thông thường, bạn có thể cài đặt thông qua chợ ứng dụng chính thức của MetaMask Snap, hoặc trực tiếp cài đặt từ trang web chính thức của dự án. Lấy ví dụ UniPass, khi truy cập trang ứng dụng, sẽ có nút để bạn liên kết với MetaMask.

Sau khi nhấn vào, quá trình cài đặt Snap sẽ bắt đầu:

Sử dụng MetaMask Snap
Sau khi cài đặt xong, bạn có thể bắt đầu sử dụng sản phẩm và tính năng tương ứng. Trong ứng dụng này, UniPass sẽ tạo cho bạn một tài khoản hợp đồng thông minh, giúp bạn dễ dàng kiểm soát thông qua tài khoản EOA của MetaMask.

Khi bạn thực hiện giao dịch chuyển tiền, UniPass sẽ bật lên cửa sổ Snap yêu cầu xác nhận xem bạn có muốn thực hiện thao tác đó trên ví AA của UniPass hay không.

Sau khi xác nhận qua MetaMask, các thao tác liên quan có thể được thực hiện. Trong trường hợp này, MetaMask thông qua Snap đã có khả năng kiểm soát ví AA của UniPass; UniPass không cần tự phát triển plugin ví mà vẫn cho phép người dùng thao tác, đồng thời có thể thu hút người dùng một cách rất hiệu quả nhờ vào nền tảng MetaMask!
Từ quy trình cài đặt và sử dụng này, chúng ta có thể rút ra những thông tin gì?
-
Snap có cơ chế kiểm soát quyền truy cập chi tiết, thậm chí bao gồm quyền liên kết ví, quyền gửi yêu cầu mạng... Tổng thể thiết kế theo nguyên tắc "quyền tối thiểu" (Principle of Least Privilege), ưu tiên hàng đầu là bảo mật.
-
Từ npm:@unipasswallet/unipass-snap có thể thấy Snap quản lý gói và phiên bản dựa trên NPM. Phần sau sẽ phân tích kỹ hơn về tính bảo mật.
-
Snap có tính linh hoạt cao, có thể tự phát triển tùy chỉnh nội dung hiển thị và logic theo nhu cầu dự án. Tuy nhiên, giao diện UI còn khá đơn giản, có không gian cải thiện.
-
Trải nghiệm Snap rất đơn giản và đáng tin cậy, đúng mức phiên bản Beta và phù hợp môi trường sản xuất.
Đối với một sản phẩm ví, bảo mật luôn là yếu tố hàng đầu. Tiếp theo, hãy cùng phân tích thiết kế bảo mật của Snap.
Snap có an toàn không?
Phân tích môi trường thực thi mã Snap
Như đã đề cập ở trên, Snap sử dụng NPM để quản lý gói và phiên bản, điều này chứng tỏ Snap thực chất là ứng dụng dựa trên Web và JavaScript. Ai cũng biết rằng cú pháp JS rất linh hoạt và tự do, dễ dẫn đến các tấn công XSS và lừa đảo钓鱼. Vậy MetaMask Snap đối phó với thách thức này như thế nào?
Sau một số nghiên cứu, không khó để nhận thấy MetaMask đã tài trợ Agoric và tích hợp sâu giải pháp "ảo hóa hoàn toàn" Hardened JavaScript (còn gọi là Secure EcmaScript) do nhóm Agoric phát triển. Agoric đã thiết kế một API giới hạn cho JavaScript và đệ trình đề xuất Draft tới TC-39 (hiệp hội chuẩn hóa JS), địa chỉ: https://github.com/tc39/proposal-ses.
Tóm lại, Hardened JavaScript là một tập con an toàn hơn của chuẩn JavaScript. Dựa trên một số cơ chế và chức năng của JS, cắt giảm quyền gọi và phương thức sử dụng một số API JS nhất định, từ đó giảm thiểu rủi ro. Nó tạo ra một sandbox an toàn để thực thi mã, đồng thời tuân thủ nguyên tắc Quyền truy cập tối thiểu (Principle of Least Privilege) để hoạch định kiểm soát quyền mã.

Agoric và MetaMask đã cùng nhau phát triển dự án LavoMoat nhằm tăng cường bảo mật cho Snap. LavaMoat là một bộ công cụ, tập trung giải quyết rủi ro an ninh từ các phụ thuộc bên ngoài của dự án JS, thêm giới hạn cho một số API và logic.
Agoric và MetaMask từng phối hợp tổ chức kiểm thử xâm nhập an ninh hộp đen/hộp trắng và công bố báo cáo an ninh chi tiết. Do đó, ở cấp độ thực thi mã, chúng ta có đủ lý do tin tưởng Snap là an toàn.
Mã nguồn Snap phải công khai và được kiểm toán
Ngoài quy trình ủy quyền rõ ràng và thiết kế quyền tối thiểu, để trở thành Snap được chính thức công nhận, mã nguồn phải được mở và cộng đồng sẽ góp phần làm giảm đáng kể nguy cơ mã độc tích hợp sẵn trong Snap.
Hơn nữa, chúng tôi cũng nhận thấy các Snap trên trang chủ đều phải trải qua kiểm toán mã nguồn từ các công ty bảo mật bên thứ ba trước khi phát hành. Điều này nâng cao đáng kể độ tin cậy và an toàn của Snap, trong đó có cả SlowMist - cái tên quen thuộc với nhiều người.

Những rủi ro an ninh hiện tại đã phát hiện đối với Snap
Do Snap hiện đang dựa vào hệ thống quản lý gói và phiên bản NPM, nên về mặt mã nguồn tồn tại khả năng bị thay đổi, đồng thời việc kiểm toán không bắt buộc, do đó có thể gây ra một số rủi ro an ninh.
Bởi vì MetaMask không thể kiểm soát việc phát hành phiên bản trên nền tảng NPM, nhà phát triển dự án có thể bất cứ lúc nào phát hành phiên bản mới để người dùng cài đặt. Nhưng do chi phí kiểm toán, các công ty kiểm toán sẽ không kiểm tra từng phiên bản, dẫn đến tình trạng: sự thay đổi ở phiên bản mới nhất có thể chưa được công khai mã nguồn hoặc chưa được kiểm toán.
Tuy nhiên, do môi trường thực thi là sandbox và áp dụng thiết kế quyền tối thiểu, trừ khi người dùng tự xác nhận thay đổi quyền mới, phiên bản Snap mới chỉ sở hữu các quyền giống như phiên bản trước để thực hiện thao tác. Nhưng nếu một Snap nào đó yêu cầu quyền quá lớn, vẫn có thể tạo ra rủi ro. Vì vậy, khi cài đặt và sử dụng Snap, vẫn cần giữ thái độ cảnh giác.
Khả năng và giới hạn kỹ thuật của MetaMask Snap
Mặc dù gần đây MetaMask Snap chính thức công bố, nhưng thực tế Snap đã được phát triển suốt 4 năm rồi! Ý tưởng ban đầu về MetaMask Snap được Dan Finlay đăng tải trên Medium vào ngày 10 tháng 10 năm 2019.
Việc cân bằng giữa bảo mật, tính linh hoạt và hiệu quả là một thách thức lớn, cũng cho thấy MetaMask đã đầu tư rất nhiều chi phí và chuẩn bị kỹ càng cho thời điểm này.
Hiện tại, ba API chính được mở ra:
-
Khả năng tương tác (Interoperability), cho phép nhà phát triển xây dựng ví cho các chuỗi khác dựa trên MetaMask
-
Phân tích giao dịch (Transaction Insights), cho phép nhà phát triển lấy dữ liệu giao dịch trước khi người dùng gửi giao dịch, từ đó phân tích xem giao dịch có rủi ro hay không
-
Thông báo (Notifications), cho phép Snap gửi tin nhắn trực tiếp đến người dùng (tuy nhiên dường như cần website hỗ trợ, hơi ít tiện ích)

Dưới đây sẽ giới thiệu ngắn gọn các khả năng cụ thể và hiệu quả mà MetaMask Snap mở ra, giúp bạn hình dung sinh động hơn.
Khả năng thông báo Notification
Giao diện snap_notify có thể hiển thị thông báo trong MetaMask hoặc trình duyệt. Snap có thể dùng giao diện này để gửi tin nhắn trực tiếp đến người dùng, như hình dưới đây:

Khả năng Transaction Insights
Khi người dùng tương tác với hợp đồng thông minh, MetaMask sẽ kích hoạt sự kiện onTransaction của Snap, truyền giao dịch chưa ký vào phương thức xử lý onTransaction, Snap có thể trả về một giao diện trên trang xác nhận lần hai của giao dịch, đồng thời tùy chỉnh nội dung hiển thị.

Thông qua chức năng này, có thể thực hiện kiểm toán an ninh thông tin giao dịch, mở rộng hiển thị thông tin, v.v.
Khả năng giao diện Dialog và tùy chỉnh giao diện
Khả năng Dialog cho phép Snap bật ra một cửa sổ độc lập, thực hiện chức năng tương tự các hộp thoại Alert/Confirm/Prompt truyền thống (như hình dưới), dùng để nhắc nhở, xác nhận, gửi thông tin, v.v.

Thông qua Dialog, bạn có thể tùy chỉnh giao diện tương tác đơn giản và thao tác, để tích hợp với DApp của bạn.
MetaMask Snap tạm thời chưa thể thực hiện chức năng gì?
Do giới hạn về bảo mật, Snap hiện tại không hỗ trợ framework frontend bên thứ ba, chỉ cung cấp một số ít UIKit. Dưới đây vẫn dùng insight làm ví dụ, hiển thị tất cả thư viện thành phần UI mà nhà phát triển có thể gọi.

Như hình, hiện tại chỉ có Heading (chữ to), Text (chữ nhỏ), Panel (thẻ, chỉ dùng được một lần), Divider (đường phân cách), Copyable (sao chép khi nhấn) và một phần nhỏ tập con Markdown ( in đậm và nghiêng), do đó việc xây dựng giao diện tương tác dường như tạm thời chưa thể thực hiện, cũng không thể dùng html nhúng để thực hiện thao tác tương tác. Tuy nhiên, sau khi hỏi trong Discord chính thức, phía đội ngũ khẳng định tất cả đều vì lý do bảo mật, và sẽ dần mở rộng trong các phiên bản tới.
Ngoài ra, cũng vì lý do bảo mật, yêu cầu bên ngoài chỉ hỗ trợ phương pháp Fetch, không hỗ trợ nhiều giao thức yêu cầu hơn như WebSocket. Do giới hạn bảo mật, chức năng và quyền riêng tư, cũng không thể lấy thông tin client, ví dụ như URL hiện tại đang gọi Snap là gì, khiến không thể thực hiện các chức năng phong phú và đa dạng hơn.
Hầu hết những vấn đề và giới hạn này đều vì cân nhắc bảo mật, tin rằng trong tương lai khi tính an toàn được xác minh, sẽ xem xét mở rộng thêm quyền.
MetaMask cung cấp các API này thực tế đã trở thành một sản phẩm kiểu nền tảng mở. Cảm giác này giống như khi WeChat ra mắt công chúng và mini-program, đột nhiên cảm giác nó không còn là công cụ trò chuyện đơn giản nữa.
MetaMask từ năm 2019 đã dự đoán được cục diện thị trường ngày hôm nay: có rất nhiều chuỗi công khai và các bên phát triển dự án, cùng với nhu cầu ví tùy chỉnh đa dạng. Thay vì mỗi dự án đều phải phát triển plugin riêng và người dùng phải cài đặt hàng loạt plugin, tốt hơn hết là phát triển trên nền tảng MetaMask Snap. Trong lô Snap đầu tiên được công bố, chúng ta cũng đã thấy các ví như Sui Wallet, Solana Wallet, Arweave Wallet,... thuộc hệ sinh thái phi EVM. Với lượng người dùng sẵn có, MetaMask Snap chắc chắn sẽ ảnh hưởng lớn đến cục diện thị trường ví.
Thực tế, không gian sáng tạo của MetaMask Snap có thể còn lớn hơn chúng ta tưởng tượng, thậm chí vượt xa phạm vi ví. Chúng ta cũng có thể thấy sản phẩm từ đội ngũ EthSign, sử dụng MetaMask Snaps để làm một trình quản lý mật khẩu phổ quát KeyChain, tất cả mật khẩu trong trình duyệt đều có thể được lưu trữ sau khi mã hóa bằng khóa ví. Như vậy, chỉ cần quản lý tốt ví, là mang theo tất cả mật khẩu.

Snap liên quan mật thiết đến nhà phát triển, với API mở, trải nghiệm lập trình viên cụ thể ra sao? Hãy cùng tự tay phát triển một Snap để trải nghiệm.
Tự phát triển một Snap để kiểm thử
Lập dàn ý
Ai cũng biết rằng phần lớn người dùng trong hầu hết trường hợp thực ra không hiểu rõ hợp đồng thông minh họ đang tương tác là gì, bao gồm các vấn đề sau:
-
Hợp đồng giao dịch có phải là hợp đồng bị thay thế bởi trang lừa đảo钓鱼 hay không
-
Hợp đồng giao dịch có phải là hợp đồng có thể nâng cấp hay không
-
Hợp đồng thông minh có phải là hợp đồng vừa được triển khai và chưa có nhiều người xác minh hay không
-
Hợp đồng giao dịch có mã nguồn mở hay không
Đối với người dùng bình thường, việc yêu cầu họ đọc mã Solidity của hợp đồng trước khi thao tác là điều không tưởng. Lúc này, thật sự rất phù hợp để sử dụng chức năng Transaction Insight nhằm thực hiện một số phân tích hợp đồng thông minh, ví dụ như dùng AI để thực hiện kiểm toán an ninh sơ bộ cho hợp đồng thông minh, có thể lọc được khoảng 80% các cuộc tấn công钓鱼 cấp thấp.
Chuẩn bị môi trường phát triển
Tải ví xuống
Trước tiên, cần cài đặt MetaMask Flask.

MetaMask Flask là phiên bản mở rộng tập trung vào nhà phát triển của MetaMask, chủ yếu dùng để xem trước các tính năng mới và phát triển các chức năng thử nghiệm. Lưu ý đây là phiên bản dành cho nhà phát triển, không nên dùng cho mục đích hàng ngày và không nên nhập khóa riêng của ví đang dùng. Việc dùng Flask ở đây chủ yếu để thuận tiện cho việc xem trước tức thì Snap đang phát triển.
Khuyên bạn nên tạm thời tắt ví MetaMask và các ví trình duyệt khác, hoặc tạo một Profile Chrome mới để sử dụng, tránh xung đột.
Tạo tài khoản
Sau khi cài đặt ví, tạo ví mới như bình thường khi dùng MetaMask, lưu ý rằng đây là ví chuyên dùng để kiểm thử, không nên nhập ví hàng ngày của bạn.
Tiếp theo, cần nạp một số coin kiểm thử vào ví mới tạo. Bạn có thể lấy coin thử nghiệm từ faucet. Bài viết này dùng mạng Goerli cho Snap, do đó phần sau sẽ lấy Goerli làm ví dụ.
Khởi tạo dự án Snap theo mẫu
Theo tài liệu chính thức, trước tiên dùng CLI @metamask/create-snap để tạo dự án Snap mới, đồng thời dùng mẫu chính thức để khởi tạo:

Cấu trúc tệp Snap
Các tệp chính của Snap nằm trong ./packages/snap , cấu trúc thư mục như sau:

Tệp cấu hình Snap nằm trong snap.manifest.json , tệp chính của Snap là ./src/index.ts, có thể thấy rất gọn gàng.
Kích hoạt quyền
Trước tiên cần kích hoạt quyền, chúng ta thêm ba dòng sau vào snap.manifest.json:

Bạn cũng có thể sửa description và proposedName trong tệp Manifest để thay đổi mô tả và tên dự án.
Lấy giao dịch
Trong ví dụ này, chỉ cần sửa tệp index.ts là có thể hoàn thành toàn bộ chức năng. Ví dụ mã đơn giản như hình dưới, mã chạy đầy đủ xin vui lòng truy cập: https://github.com/LidamaoHub/insights.

Xin vui lòng tham khảo tài liệu phát triển MetaMask Snap để hoàn thành các sản phẩm Snap phức tạp hơn.
Sau khi cài đặt, mỗi giao dịch của bạn sẽ nhìn thấy thông tin cảnh báo rủi ro tương tự:

Hiện tại trải nghiệm phát triển Snap rất mượt mà, gần như không gặp vấn đề gì, và các mẫu chính thức cũng rất phong phú. Các nhà phát triển có kinh nghiệm thường có thể làm quen và bắt đầu phát triển Snap mình cần trong vài giờ. Tuy nhiên, để phát hành chính thức và cho phép người dùng đại chúng sử dụng, trở ngại lớn nhất sẽ là kiểm toán an ninh. Không phải nhà phát triển độc lập hay nhóm nhỏ nào cũng có nguồn lực kiểm toán cho Snap của họ. Do đó, có thể dự đoán số lượng và mức độ phong phú của Snap trong thời gian dài tới sẽ không tăng trưởng bùng nổ.
Hỗ trợ nhà phát triển
Nếu bạn có thể chạy thành công ví dụ trên, xin chúc mừng bạn đã trở thành một nhà phát triển Snap入门合格!
MetaMask chính thức cũng đã thành lập MetaMask Grants DAO vào năm ngoái, thông qua chương trình tài trợ hỗ trợ các dự án giá trị cao trong hệ sinh thái MetaMask. MetaMask Grants DAO là một chương trình thí điểm do nhân viên dẫn dắt, cấp tài trợ cho các nhà phát triển bên ngoài toàn cầu để xây dựng trải nghiệm có ảnh hưởng trong hệ sinh thái MetaMask. MetaMask sẽ trích một phần lợi nhuận mỗi quý vào DAO này, hiện tại ngân sách hàng năm của MetaMask Grants DAO là 2,4 triệu USD.
Hiện tại, bất kỳ dự án nào có thể làm phong phú hệ sinh thái MetaMask đều có thể nộp đơn xin MetaMask Grants DAO (MetaMask Grant). Để biết thêm thông tin, vui lòng truy cập https://metamaskgrants.org/.
Đáng chú ý, LXDAO rất vinh dự khi đã nộp đơn thành công và nhận được tài trợ từ MetaMask trong năm nay, tham gia phát triển các dự án liên quan và thiết lập kênh liên lạc. Nếu bạn là thành viên LXDAO có ý tưởng liên quan, có thể liên hệ hiệu quả hơn để nộp đơn.

Kết luận
Ở trên, chúng tôi đã phân tích từ góc độ kỹ thuật Snap là gì, có an toàn không, giới hạn chức năng và trải nghiệm nhà phát triển. Tóm tắt ngắn gọn như sau:
-
Snap giống như mini-program WeChat, mở ra không gian sáng tạo lớn hơn cho MetaMask
-
Tính an toàn tổng thể khá tốt, nhưng vẫn tồn tại một số rủi ro, vẫn cần cảnh giác với các quyền nguy hiểm
-
Do cân nhắc an ninh, hiện tại các chức năng mở ra còn ít, nhưng vẫn có thể tạo ra các Snap đủ sức gợi mở trí tưởng tượng
-
Sau bốn năm mài giũa và thử nghiệm, trải nghiệm nhà phát triển rất tốt. Tuy nhiên, do cân nhắc an ninh, thiết kế cơ chế danh sách trắng và yêu cầu kiểm toán, có thể dự đoán trong thời gian tới sẽ không có lượng lớn Snap tràn ngập thị trường
Hiện tại MetaMask Snap vẫn đang nhanh chóng lặp lại, tin rằng trong tương lai sẽ mở rộng thêm nhiều quyền và chức năng. Mong muốn có thể đưa ra cơ chế mở hơn đồng thời an toàn hơn, ví dụ như cơ chế kiểm toán chính thức kiểu Apple và kiểm soát phiên bản kho mã chính thức, để nhiều nhà phát triển có thể tham gia với chi phí thấp hơn. Nếu vấn đề này được cải thiện, có thể dự đoán sẽ tạo ra lượng lớn nhu cầu trong tương lai. Thậm chí có thể xuất hiện vị trí nhà phát triển Snap chuyên biệt.
Nhờ lượng lớn người dùng MetaMask, các nhà phát triển độc lập có thể có cơ hội nhất định. Hãy cùng chờ đợi bước đột phá đổi mới tiếp theo mà Snap mang lại.
Cuối cùng, cảm ơn bài viết của bạn, tin rằng điều này sẽ giúp nhiều người hiểu rõ hơn về hiện trạng phát triển của MetaMask Snap.
Chào mừng tham gia cộng đồng chính thức TechFlow
Nhóm Telegram:https://t.me/TechFlowDaily
Tài khoản Twitter chính thức:https://x.com/TechFlowPost
Tài khoản Twitter tiếng Anh:https://x.com/BlockFlow_News














