قبل بضعة أيام، أعلنت شركة ConsenSys عن طرح الإصدار التجريبي المفتوح من MetaMask Snaps Open Beta للجمهور. MetaMask Snaps هي في الأساس مكونات إضافية تعمل على توسيع إمكانيات محفظة MetaMask. هذه «Snaps» هي تطبيقات طورتها جهات خارجية يمكن تثبيتها لإضافة وظائف جديدة.
إذا قمنا بمقارنة تحويل كونسنسيس لميتاماسك إلى وي تشات، فيمكن اعتبار سناب بمثابة برنامج وي تشات ميني. ونتيجة لذلك، يصبح من الواضح أن MetaMask، بطموحها، جنبًا إلى جنب مع حجم Consensys وقاعدة مستخدمي MetaMask، ستغير مشهد قطاع المحفظة.
وقد أدرج الموقع الرسمي بالفعل 35 لقطة متاحة وأطلق متجر تطبيقات سناب: https://snaps.metamask.io/.
قائمة جزئية من اللقطات
إذن، كيف تبدو MetaMask Snaps من الناحية الفنية؟ ما هي قدراتها وحدودها؟ هل هي آمنة؟ كيف تبدو تجربة المطور؟ كل هذه العوامل يمكن أن تحدد الإمكانات المستقبلية لـ MetaMask Snaps.
بدءًا من العام الماضي، شاركت LXDAO بعمق في البحث عن تنفيذ Snaps. شارك العديد من الأعضاء في تطوير Snap وشاركوا في الهاكاثون ذات الصلة. اليوم، سنتعمق في هذه الأسئلة من منظور تقني وحتى نطور Snap لمنحك تجربة عملية للمطورين.
يمكنك عمومًا تثبيت Snaps من سوق MetaMask Snap الرسمي، أو مباشرة من موقع الويب الخاص بالمشروع. على سبيل المثال، مع UniPass، بمجرد زيارة صفحة التطبيق، سيكون هناك زر لتوصيل MetaMask الخاص بك.
يؤدي النقر فوقه إلى بدء تثبيت Snap:
بمجرد التثبيت، يمكنك البدء في استخدام المنتج وميزاته. في هذه الحالة، ستقوم UniPass بإنشاء حساب عقد ذكي لك، والذي يمكنك التحكم فيه من خلال MetaMask EOA (الحساب المملوك خارجيًا).
عند بدء عملية النقل، يقوم UniPass بتشغيل نافذة Snap المنبثقة لتأكيد ما إذا كنت تريد تنفيذ العملية لمحفظة UniPass AA.
بعد التأكيد من خلال MetaMask، يمكنك متابعة المعاملة. في هذا السيناريو، يكتسب MetaMask السيطرة على محفظة UniPass AA من خلال Snap، مما يلغي الحاجة إلى UniPass لتطوير المكون الإضافي الخاص بالمحفظة. يسمح هذا أيضًا بإعداد مستخدم منخفض التكلفة عبر MetaMask.
ما هي الأفكار التي يمكننا جمعها من عملية التثبيت والاستخدام هذه؟
دائمًا ما يكون للأمان الأسبقية عندما يتعلق الأمر بمنتجات المحفظة. دعونا نتعمق في التصميم الأمني لـ Snaps.
تعتمد Snaps على NPM، مما يعني أنها تطبيقات ويب وجافا سكريبت. كما نعلم، فإن JavaScript مرنة للغاية ولكنها عرضة لهجمات مثل XSS والتصيد الاحتيالي. إذن كيف يتعامل MetaMask Snap مع هذه التحديات؟
عند البحث، وجدنا أن MetaMask قد قامت بتمويل ودمج جافا سكريبت المتصلب من Agoric (أو Secure ECMAScript) كحل «افتراضي بالكامل» لوضع الحماية. قامت Agoric بصياغة واجهة برمجة تطبيقات تقييد جافا سكريبت وقدمت مسودة اقتراح إلى اقتراح TC-39: TC-39.
بعبارات بسيطة، تعد جافا سكريبت Hardened مجموعة فرعية أكثر أمانًا من JavaScript القياسية. من خلال تعديل بعض إمكانيات JavaScript والحد من مكالمات API، فإنها تقلل من المخاطر المختلفة. يقوم بإنشاء صندوق حماية آمن لتنفيذ التعليمات البرمجية ويتبع «مبدأ الامتياز الأقل» في تخطيط أذونات التعليمات البرمجية.
لمزيد من التفاصيل الفنية التفصيلية حول جافا سكريبت المتصلب، يرجى الرجوع إلى: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
اشتركت أغوريك وميتاماسك في تطوير لافا ماوات (https://github.com/LavaMoat/lavamoat) مشروع لتعزيز أمن Snaps. يعالج LavaMoat بشكل أساسي المخاطر الأمنية للتبعيات الخارجية في مشاريع JavaScript.
خضع كل من Agoric و MetaMask لاختبارات أمان الصندوق الأسود والصندوق الأبيض ونشروا تقارير أمنية مفصلة. (مزيد من التفاصيل: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). لذلك، على مستوى تنفيذ التعليمات البرمجية، لدينا سبب وجيه للاعتقاد بأن Snaps آمنة.
بصرف النظر عن إذن المستخدم الصريح والتصميم الأقل امتيازًا، حتى يتم التعرف عليه رسميًا، يجب أن تكون Snaps مفتوحة المصدر، مما يقلل من احتمالية وجود تعليمات برمجية ضارة. لاحظنا أيضًا أن Snaps المدرجة على الموقع الرسمي قد خضعت لعمليات تدقيق أمنية من طرف ثالث، مما عزز مصداقيتها.
حاليًا، تتم إدارة Snaps استنادًا إلى حزم NPM والإصدارات. NPM هي أداة إدارة حزم مستخدمة على نطاق واسع لتطوير الويب، مما يسمح للمطورين وفرق المشروع بإصدار حزم ورموز جديدة بشكل مستقل.
لا يتحكم MetaMask في إصدارات الإصدارات على منصة NPM. هناك احتمال ألا تكون التغييرات الأخيرة في الإصدار مفتوحة المصدر أو مدققة، أليس كذلك؟
بناءً على التوضيح الرسمي، يجب مراجعة جميع التغييرات على إصدارات حزمة NPM من قبل الفريق الرسمي وإضافتها إلى القائمة البيضاء قبل تثبيتها. لذلك، حتى إذا أصدر فريق المشروع حزمة NPM جديدة، فلا يمكن للمستخدمين تثبيتها حتى يتم إدراجها رسميًا. لا شك أن هذا النهج يزيد من تكلفة تحديث إصدارات Snap ولكنه بالفعل الحل الأكثر أمانًا. إنه يعكس فلسفة تصميم MetaMask Snap في إعطاء الأولوية للأمان قبل كل شيء.
تم الإعلان مؤخرًا عن MetaMask Snap رسميًا، ولكنه في الواقع قيد التطوير لأكثر من أربع سنوات! تم إصدار المفهوم الأولي لـ MetaMask Snap بواسطة دان فينلي في 10 أكتوبر 2019 على موقع Medium. مقال متوسط.
يمثل تحقيق التوازن بين الأمان والمرونة والكفاءة تحديًا كبيرًا. من الواضح أن MetaMask قد استثمرت الكثير من الموارد والإعداد في هذا المسعى.
في الوقت الحالي، يتم عرض ثلاث واجهات برمجة تطبيقات رئيسية بشكل أساسي:
فيما يلي مقدمة موجزة للإمكانيات والتأثيرات المحددة التي فتحتها MetaMask Snap، لتمنحك فهمًا أكثر وضوحًا.
يمكن لواجهة Snap_notify عرض الإشعارات داخل MetaMask أو المتصفح. يمكن لـ Snaps إرسال رسائل مباشرة للمستخدمين من خلال هذه الواجهة، كما هو موضح في الصورة أدناه.
عندما يتفاعل المستخدم مع عقد ذكي، يقوم MetaMask بتشغيل حدث Snap's OnTransaction. تقوم MetaMask بتمرير المعاملة الأولية غير الموقعة إلى طريقة معالج onTransaction. يمكن لـ Snaps بعد ذلك إرجاع واجهة على صفحة التأكيد الثانوية للمعاملة، وتخصيص المحتوى المعروض.
من خلال هذه الإمكانية، يمكن تحقيق ميزات مثل التدقيق الآمن لمعلومات المعاملات وعروض المعلومات الموسعة.
تسمح إمكانية الحوار لـ Snaps بالظهور في نافذة منفصلة مباشرةً، على غرار مربعات حوار التنبيه/التأكيد/المطالبة التقليدية. يتم استخدامها للتذكيرات والتأكيدات وتقديم المعلومات، على التوالي.
من خلال Dialog، ستتمكن من تخصيص واجهات وعمليات تفاعلية بسيطة للتكامل مع dApp الخاص بك.
نظرًا لأسباب أمنية، لا تدعم Snap حاليًا أطر الواجهة الأمامية التابعة لجهات خارجية وتوفر فقط واجهة مستخدم محدودة. هنا، ما زلنا نستخدم Insight كمثال، حيث نعرض مكتبة مكونات واجهة المستخدم المتاحة للمطورين.
كما هو موضح في الصورة، تتضمن الميزات الحالية العنوان (نص كبير)، والنص (نص صغير)، واللوحة (بطاقة أحادية الاستخدام)، والمقسم، وقابل للنسخ (انقر للنسخ)، ومجموعة فرعية من ميزات Markdown (بالخط العريض والمائل). لذلك، تبدو الإمكانات التفاعلية غير قابلة للتحقيق مؤقتًا، ولا يمكن استخدام HTML المضمن للتفاعلات. ومع ذلك، بعد طرح سؤال في Discord الرسمي، ذكروا أن هذه القيود لأسباب أمنية وقد يتم تخفيفها في الإصدارات القادمة.
علاوة على ذلك، ولأسباب أمنية، يتم دعم الطلبات الخارجية فقط عبر طريقة Fetch ولا تدعم بروتوكولات الطلب الإضافية مثل WebSocket. نظرًا لقيود الأمان والقدرة والخصوصية، لا يمكن أيضًا الوصول إلى معلومات العميل، مثل عنوان URL الحالي الذي أدى إلى تشغيل Snap، مما يجعل من الصعب تنفيذ مجموعة واسعة من الميزات.
تنبع معظم هذه القضايا من مخاوف أمنية. نعتقد أنه مع التحقق من الأمان بمرور الوقت، سيتم منح المزيد من الأذونات.
مع إدخال واجهات برمجة التطبيقات هذه، تطورت MetaMask بشكل أساسي إلى منتج مفتوح النظام الأساسي. يبدو الأمر مشابهًا لما حدث عندما أطلقت WeChat حسابها الرسمي وبرامجها المصغرة، وتحولت من مجرد أداة دردشة.
في عام 2019، توقعت MetaMask بالفعل مشهد السوق الحالي مع العديد من السلاسل العامة وحفلات المشاريع ومتطلبات المحفظة المخصصة. بدلاً من قيام كل مشروع بتطوير المكون الإضافي الخاص به واضطرار المستخدمين إلى تثبيت مكونات إضافية متعددة، يكون تطويره أكثر كفاءة استنادًا إلى MetaMask Snap. في الدفعة الأولى من Snaps، رأينا محافظًا من أنظمة بيئية أخرى غير EVM، مثل Sui Wallet و Solana Wallet و Arweave Wallet. نظرًا لقاعدة المستخدمين الحالية، لا بد أن تؤثر MetaMask Snap بشكل كبير على مشهد المحفظة.
في الواقع، قد تكون إمكانات MetaMask Snap أكبر مما نتخيل، وتمتد إلى ما وراء المحافظ فقط. يمكننا أيضًا رؤية جهود فريق EthSign، الذي أنشأ مديرًا عالميًا لكلمات المرور يسمى KeyChain استنادًا إلى MetaMask Snaps. يمكن تشفير جميع كلمات مرور المتصفح وتخزينها باستخدام مفتاح المحفظة. من خلال تأمين محفظتك، فإنك تقوم بشكل أساسي بتأمين جميع كلمات المرور الخاصة بك.
هناك أيضًا تصميم من فريق Web3mq. Web3mq هي شبكة ترحيل اتصالات لامركزية عالية الأداء. سيعمل Web3mq Snap كعميل لتسهيل تفاعلات الرسائل والإشعارات والتنبيهات ووظائف الدفع. وسوف تتكامل مع التطبيقات اللامركزية الأخرى المتصلة بـ Web3mq، مثل أدوات الدردشة أو الألعاب القائمة على بلوكتشين، وغيرها. بمساعدة Web3mq Snap، سيتم إرسال الرسائل والتحديثات تلقائيًا إلى مستخدمي Metamask Snap، مما يلغي الحاجة إلى إذن إضافي للمستخدم. يؤدي هذا إلى إنشاء اتصال غير موثوق به بين المستخدمين وبين المستخدمين والتطبيقات.
تتمحور Snaps بشكل كبير حول المطور. مع واجهة برمجة التطبيقات المفتوحة، كيف هي تجربة المطور؟ دعنا نتعمق في إنشاء Snap لمعرفة ذلك.
من المعروف أن معظم المستخدمين غالبًا لا يعرفون العقود الذكية التي يتفاعلون معها، بما في ذلك المخاوف التالية:
بالنسبة للمستخدمين العاديين، فإن توقع منهم مراجعة مدونة صلابة العقود قبل كل عملية يعد أمرًا صعبًا. يعد هذا الموقف مثاليًا لميزة Transaction Insight لتحليل العقود الذكية، مثل استخدام الذكاء الاصطناعي للتدقيق الأمني الأولي، وربما تصفية 80٪ من هجمات التصيد الاحتيالي الأساسية.
تركيب المحفظة
أولاً، قم بتثبيت MetaMask Flask.
MetaMask Flask هو إصدار يركز على المطور من ملحق MetaMask، ويستخدم بشكل أساسي لمعاينة الميزات الجديدة وتطوير الوظائف التجريبية. تذكر أنه من أجل التطوير وليس للاستخدام اليومي. لا تستورد المفاتيح الخاصة للاستخدام اليومي. نحن نستخدم Flask هنا بشكل أساسي لمعاينة Snap المطور محليًا.
يوصى بتعطيل محفظة MetaMask العادية ومحافظ المتصفح الأخرى مؤقتًا بعد تثبيت أو إنشاء ملف تعريف Chrome جديد لتجنب التعارضات.
بعد تثبيت المحفظة، قم بإنشاء محفظة جديدة تمامًا مثل محفظة MetaMask العادية. هذه محفظة تجريبية، لذا لا تستورد محفظتك ذات الاستخدام اليومي.
بعد ذلك، نحتاج إلى إيداع بعض عملات الاختبار في المحفظة التي تم إنشاؤها حديثًا، والتي يمكن الحصول عليها من خلال الحنفيات. يستخدم Snap الذي تمت مناقشته في هذه المقالة Goerli، لذلك سيركز المحتوى التالي بشكل أساسي على Goerli.
لتهيئة Snap استنادًا إلى قالب، اتبع الوثائق الرسمية. أولاً، استخدم @metamask/create-snap CLI لإنشاء مشروع سناب جديد. في الوقت نفسه، سنقوم بالتهيئة باستخدام النموذج الرسمي:
yarn create @metamask/snap المعاملات والرؤى والسناب & & cd المعاملات والرؤى والسناب
ملفات Snap الرئيسية موجودة. /الحزم/المفاجئة. بنية الدليل هي:
ملف تكوين سناب موجود في snap.mainfest.json
، والجسم الرئيسي لـ Snap موجود . /src/index.ts،
وهو موجز للغاية.
أولاً، قم بتمكين الأذونات. أضف الأسطر الثلاثة التالية إلى snap.mainfest.json
:
كود JSONCopy
«الأذونات الأولية»: {
«الوقف: البصيرة في المعاملات»: {}،//نظرة ثاقبة للمعاملات
«الوقف: مزود الإيثيريوم»: {}،//الوصول إلى RPC
«الوقف: الوصول إلى الشبكة»: {}//
في ملف البيان، يمكنك أيضًا تحديث الوصف
والاسم المقترح
لتعديل وصف المشروع واسمه.
بالنسبة لهذا العرض التوضيحي، كل ما هو مطلوب هو تعديل ملف index.ts لإكمال جميع الوظائف. يوجد أدناه مقتطف شفرة مبسط. للحصول على الكود الكامل القابل للتشغيل، يرجى زيارة: https://github.com/LidamaoHub/insights.
كود النسخ
استيراد { OnTransactionHandler, OnRpcRequestHandler } من '@metamask/snaps-types'؛
استيراد { heading, panel, text, copyable, divider } من '@metamask/snaps-ui'؛
تصدير const عند المعاملة: onTransactionHandler = async ({ transaction }) = > {
//تتضمن المعاملة
قيمًا مثل (عنوان العقد)
والبيانات (بيانات
التفاعل)
//رمز مثال لجلب معلومات التدقيق للعقد أدناه
معلومات ثابتة = انتظر الجلب (http://contract-info.audit.dev/?address=${transaction.to}
)؛
//يوجد أدناه نموذج لرمز واجهة المستخدم
إرجاع {
المحتوى: [
نص (
`${info.riskList.length} عنصر المخاطرة`،
)،
العنوان (`${info.riskList.length ? 'Risk List' : ''}`)،
... معلومات. قائمة المخاطر. الخريطة (البند, i) = نص > (`${i + 1} ${item.text}`))،
مقسم ()،
نص (
«مزيد من معلومات التدقيق من عنوان url التالي»،
)،
قابل للنسخ (
`https://contract-info.audit.dev/mm${info.token}`،
)
]
}؛
}؛
لمزيد من الميزات المتعمقة، راجع وثائق مطور MetaMask Snap.
بعد التثبيت، ستعرض كل معاملة تنبيهات مخاطر مماثلة:
تجربة التطوير مع Snaps حاليًا سلسة للغاية، مع عدد قليل جدًا من المشكلات. القوالب الرسمية غنية ومتنوعة أيضًا. يمكن للمطورين ذوي الخبرة عادةً البدء وتطوير Snap المطلوب في غضون ساعات قليلة. ومع ذلك، فإن أكبر عقبة أمام الإصدارات الرسمية التي تلبي احتياجات الجمهور الرئيسي ستكون عمليات التدقيق الأمني. لا يمتلك جميع المطورين المستقلين أو الفرق الصغيرة الموارد اللازمة لإجراء عمليات تدقيق لـ Snaps الخاصة بهم. لذلك، من المتوقع أن كمية وتنوع Snaps لن تشهد نموًا هائلاً لفترة طويلة.
إذا تمكنت من تنفيذ المثال أعلاه بنجاح، تهانينا، فأنت مطور مبتدئ مؤهل لـ Snap!
في العام الماضي، أطلقت MetaMask رسميًا برنامج MetaMask Grants DAO لتمويل المشاريع عالية القيمة داخل نظام MetaMask البيئي. إنها مبادرة تجريبية يقودها الموظفون، تهدف إلى تقديم منح للمطورين الخارجيين العالميين لبناء تجارب مؤثرة داخل نظام MetaMask البيئي. يتم توجيه جزء من أرباح MetaMask الفصلية إلى DAO هذا، وتبلغ ميزانيتها السنوية الحالية 2.4 مليون دولار.
يمكن لأي مشروع يثري نظام MetaMask البيئي التقدم بطلب للحصول على منحة MetaMask الرسمية من MetaMask Grants DAO. لمزيد من المعلومات، يرجى زيارة https://metamaskgrants.org/.
من الجدير بالذكر أن LXDAO تتشرف بالتقدم للحصول على منحة من MetaMask وتلقيها هذا العام، وشاركت بنشاط في تطوير المشاريع ذات الصلة، مما ساهم في نظام MetaMask البيئي!
لقد قمنا بتشريح ماهية Snap من منظور تقني واعتبارات الأمان والقيود وتجربة المطور. باختصار:
حاليًا، لا يزال MetaMask Snap يخضع لتكرارات سريعة. من المتوقع أن يتم فتح المزيد من الأذونات والإمكانيات في المستقبل. هناك أمل في إدخال آلية أكثر انفتاحًا وأمانًا، مثل نظام تدقيق منخفض التكلفة وآمن وبدون إذن، وذلك للسماح لمزيد من المطورين بالمشاركة بتكلفة أقل. إذا تمت معالجة هذه المشكلة، فقد يكون هناك ارتفاع متوقع في الطلب في المستقبل. قد تظهر أيضًا مناصب مخصصة لمطوري Snap.
من خلال الاستفادة من قاعدة مستخدمي MetaMask الضخمة، قد يجد المطورون المستقلون أيضًا فرصًا فريدة. دعونا نبقي أعيننا متيقظين للابتكارات التالية التي ستغير قواعد اللعبة والتي ستجلبها Snaps إلى الطاولة.
أخيرًا، شكرًا لك على مقالتك. أعتقد أنه سيساهم بشكل كبير في زيادة الوعي حول الوضع الحالي لـ MetaMask Snaps.
يرجى الاستمرار في متابعتنا على تويتر: < a href= "https://twitter.com/LXDAO_Official" " > @lxdao_official. سنطرح المزيد من المحتوى المرتبط بـ MetaMask Snap مثل ورش العمل، لذا ترقبوا!
قبل بضعة أيام، أعلنت شركة ConsenSys عن طرح الإصدار التجريبي المفتوح من MetaMask Snaps Open Beta للجمهور. MetaMask Snaps هي في الأساس مكونات إضافية تعمل على توسيع إمكانيات محفظة MetaMask. هذه «Snaps» هي تطبيقات طورتها جهات خارجية يمكن تثبيتها لإضافة وظائف جديدة.
إذا قمنا بمقارنة تحويل كونسنسيس لميتاماسك إلى وي تشات، فيمكن اعتبار سناب بمثابة برنامج وي تشات ميني. ونتيجة لذلك، يصبح من الواضح أن MetaMask، بطموحها، جنبًا إلى جنب مع حجم Consensys وقاعدة مستخدمي MetaMask، ستغير مشهد قطاع المحفظة.
وقد أدرج الموقع الرسمي بالفعل 35 لقطة متاحة وأطلق متجر تطبيقات سناب: https://snaps.metamask.io/.
قائمة جزئية من اللقطات
إذن، كيف تبدو MetaMask Snaps من الناحية الفنية؟ ما هي قدراتها وحدودها؟ هل هي آمنة؟ كيف تبدو تجربة المطور؟ كل هذه العوامل يمكن أن تحدد الإمكانات المستقبلية لـ MetaMask Snaps.
بدءًا من العام الماضي، شاركت LXDAO بعمق في البحث عن تنفيذ Snaps. شارك العديد من الأعضاء في تطوير Snap وشاركوا في الهاكاثون ذات الصلة. اليوم، سنتعمق في هذه الأسئلة من منظور تقني وحتى نطور Snap لمنحك تجربة عملية للمطورين.
يمكنك عمومًا تثبيت Snaps من سوق MetaMask Snap الرسمي، أو مباشرة من موقع الويب الخاص بالمشروع. على سبيل المثال، مع UniPass، بمجرد زيارة صفحة التطبيق، سيكون هناك زر لتوصيل MetaMask الخاص بك.
يؤدي النقر فوقه إلى بدء تثبيت Snap:
بمجرد التثبيت، يمكنك البدء في استخدام المنتج وميزاته. في هذه الحالة، ستقوم UniPass بإنشاء حساب عقد ذكي لك، والذي يمكنك التحكم فيه من خلال MetaMask EOA (الحساب المملوك خارجيًا).
عند بدء عملية النقل، يقوم UniPass بتشغيل نافذة Snap المنبثقة لتأكيد ما إذا كنت تريد تنفيذ العملية لمحفظة UniPass AA.
بعد التأكيد من خلال MetaMask، يمكنك متابعة المعاملة. في هذا السيناريو، يكتسب MetaMask السيطرة على محفظة UniPass AA من خلال Snap، مما يلغي الحاجة إلى UniPass لتطوير المكون الإضافي الخاص بالمحفظة. يسمح هذا أيضًا بإعداد مستخدم منخفض التكلفة عبر MetaMask.
ما هي الأفكار التي يمكننا جمعها من عملية التثبيت والاستخدام هذه؟
دائمًا ما يكون للأمان الأسبقية عندما يتعلق الأمر بمنتجات المحفظة. دعونا نتعمق في التصميم الأمني لـ Snaps.
تعتمد Snaps على NPM، مما يعني أنها تطبيقات ويب وجافا سكريبت. كما نعلم، فإن JavaScript مرنة للغاية ولكنها عرضة لهجمات مثل XSS والتصيد الاحتيالي. إذن كيف يتعامل MetaMask Snap مع هذه التحديات؟
عند البحث، وجدنا أن MetaMask قد قامت بتمويل ودمج جافا سكريبت المتصلب من Agoric (أو Secure ECMAScript) كحل «افتراضي بالكامل» لوضع الحماية. قامت Agoric بصياغة واجهة برمجة تطبيقات تقييد جافا سكريبت وقدمت مسودة اقتراح إلى اقتراح TC-39: TC-39.
بعبارات بسيطة، تعد جافا سكريبت Hardened مجموعة فرعية أكثر أمانًا من JavaScript القياسية. من خلال تعديل بعض إمكانيات JavaScript والحد من مكالمات API، فإنها تقلل من المخاطر المختلفة. يقوم بإنشاء صندوق حماية آمن لتنفيذ التعليمات البرمجية ويتبع «مبدأ الامتياز الأقل» في تخطيط أذونات التعليمات البرمجية.
لمزيد من التفاصيل الفنية التفصيلية حول جافا سكريبت المتصلب، يرجى الرجوع إلى: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf.
اشتركت أغوريك وميتاماسك في تطوير لافا ماوات (https://github.com/LavaMoat/lavamoat) مشروع لتعزيز أمن Snaps. يعالج LavaMoat بشكل أساسي المخاطر الأمنية للتبعيات الخارجية في مشاريع JavaScript.
خضع كل من Agoric و MetaMask لاختبارات أمان الصندوق الأسود والصندوق الأبيض ونشروا تقارير أمنية مفصلة. (مزيد من التفاصيل: https://agoric.com/blog/technology/purple-teaming-how-metamask-and-agoric-hunted-bugs-to-harden-javascript). لذلك، على مستوى تنفيذ التعليمات البرمجية، لدينا سبب وجيه للاعتقاد بأن Snaps آمنة.
بصرف النظر عن إذن المستخدم الصريح والتصميم الأقل امتيازًا، حتى يتم التعرف عليه رسميًا، يجب أن تكون Snaps مفتوحة المصدر، مما يقلل من احتمالية وجود تعليمات برمجية ضارة. لاحظنا أيضًا أن Snaps المدرجة على الموقع الرسمي قد خضعت لعمليات تدقيق أمنية من طرف ثالث، مما عزز مصداقيتها.
حاليًا، تتم إدارة Snaps استنادًا إلى حزم NPM والإصدارات. NPM هي أداة إدارة حزم مستخدمة على نطاق واسع لتطوير الويب، مما يسمح للمطورين وفرق المشروع بإصدار حزم ورموز جديدة بشكل مستقل.
لا يتحكم MetaMask في إصدارات الإصدارات على منصة NPM. هناك احتمال ألا تكون التغييرات الأخيرة في الإصدار مفتوحة المصدر أو مدققة، أليس كذلك؟
بناءً على التوضيح الرسمي، يجب مراجعة جميع التغييرات على إصدارات حزمة NPM من قبل الفريق الرسمي وإضافتها إلى القائمة البيضاء قبل تثبيتها. لذلك، حتى إذا أصدر فريق المشروع حزمة NPM جديدة، فلا يمكن للمستخدمين تثبيتها حتى يتم إدراجها رسميًا. لا شك أن هذا النهج يزيد من تكلفة تحديث إصدارات Snap ولكنه بالفعل الحل الأكثر أمانًا. إنه يعكس فلسفة تصميم MetaMask Snap في إعطاء الأولوية للأمان قبل كل شيء.
تم الإعلان مؤخرًا عن MetaMask Snap رسميًا، ولكنه في الواقع قيد التطوير لأكثر من أربع سنوات! تم إصدار المفهوم الأولي لـ MetaMask Snap بواسطة دان فينلي في 10 أكتوبر 2019 على موقع Medium. مقال متوسط.
يمثل تحقيق التوازن بين الأمان والمرونة والكفاءة تحديًا كبيرًا. من الواضح أن MetaMask قد استثمرت الكثير من الموارد والإعداد في هذا المسعى.
في الوقت الحالي، يتم عرض ثلاث واجهات برمجة تطبيقات رئيسية بشكل أساسي:
فيما يلي مقدمة موجزة للإمكانيات والتأثيرات المحددة التي فتحتها MetaMask Snap، لتمنحك فهمًا أكثر وضوحًا.
يمكن لواجهة Snap_notify عرض الإشعارات داخل MetaMask أو المتصفح. يمكن لـ Snaps إرسال رسائل مباشرة للمستخدمين من خلال هذه الواجهة، كما هو موضح في الصورة أدناه.
عندما يتفاعل المستخدم مع عقد ذكي، يقوم MetaMask بتشغيل حدث Snap's OnTransaction. تقوم MetaMask بتمرير المعاملة الأولية غير الموقعة إلى طريقة معالج onTransaction. يمكن لـ Snaps بعد ذلك إرجاع واجهة على صفحة التأكيد الثانوية للمعاملة، وتخصيص المحتوى المعروض.
من خلال هذه الإمكانية، يمكن تحقيق ميزات مثل التدقيق الآمن لمعلومات المعاملات وعروض المعلومات الموسعة.
تسمح إمكانية الحوار لـ Snaps بالظهور في نافذة منفصلة مباشرةً، على غرار مربعات حوار التنبيه/التأكيد/المطالبة التقليدية. يتم استخدامها للتذكيرات والتأكيدات وتقديم المعلومات، على التوالي.
من خلال Dialog، ستتمكن من تخصيص واجهات وعمليات تفاعلية بسيطة للتكامل مع dApp الخاص بك.
نظرًا لأسباب أمنية، لا تدعم Snap حاليًا أطر الواجهة الأمامية التابعة لجهات خارجية وتوفر فقط واجهة مستخدم محدودة. هنا، ما زلنا نستخدم Insight كمثال، حيث نعرض مكتبة مكونات واجهة المستخدم المتاحة للمطورين.
كما هو موضح في الصورة، تتضمن الميزات الحالية العنوان (نص كبير)، والنص (نص صغير)، واللوحة (بطاقة أحادية الاستخدام)، والمقسم، وقابل للنسخ (انقر للنسخ)، ومجموعة فرعية من ميزات Markdown (بالخط العريض والمائل). لذلك، تبدو الإمكانات التفاعلية غير قابلة للتحقيق مؤقتًا، ولا يمكن استخدام HTML المضمن للتفاعلات. ومع ذلك، بعد طرح سؤال في Discord الرسمي، ذكروا أن هذه القيود لأسباب أمنية وقد يتم تخفيفها في الإصدارات القادمة.
علاوة على ذلك، ولأسباب أمنية، يتم دعم الطلبات الخارجية فقط عبر طريقة Fetch ولا تدعم بروتوكولات الطلب الإضافية مثل WebSocket. نظرًا لقيود الأمان والقدرة والخصوصية، لا يمكن أيضًا الوصول إلى معلومات العميل، مثل عنوان URL الحالي الذي أدى إلى تشغيل Snap، مما يجعل من الصعب تنفيذ مجموعة واسعة من الميزات.
تنبع معظم هذه القضايا من مخاوف أمنية. نعتقد أنه مع التحقق من الأمان بمرور الوقت، سيتم منح المزيد من الأذونات.
مع إدخال واجهات برمجة التطبيقات هذه، تطورت MetaMask بشكل أساسي إلى منتج مفتوح النظام الأساسي. يبدو الأمر مشابهًا لما حدث عندما أطلقت WeChat حسابها الرسمي وبرامجها المصغرة، وتحولت من مجرد أداة دردشة.
في عام 2019، توقعت MetaMask بالفعل مشهد السوق الحالي مع العديد من السلاسل العامة وحفلات المشاريع ومتطلبات المحفظة المخصصة. بدلاً من قيام كل مشروع بتطوير المكون الإضافي الخاص به واضطرار المستخدمين إلى تثبيت مكونات إضافية متعددة، يكون تطويره أكثر كفاءة استنادًا إلى MetaMask Snap. في الدفعة الأولى من Snaps، رأينا محافظًا من أنظمة بيئية أخرى غير EVM، مثل Sui Wallet و Solana Wallet و Arweave Wallet. نظرًا لقاعدة المستخدمين الحالية، لا بد أن تؤثر MetaMask Snap بشكل كبير على مشهد المحفظة.
في الواقع، قد تكون إمكانات MetaMask Snap أكبر مما نتخيل، وتمتد إلى ما وراء المحافظ فقط. يمكننا أيضًا رؤية جهود فريق EthSign، الذي أنشأ مديرًا عالميًا لكلمات المرور يسمى KeyChain استنادًا إلى MetaMask Snaps. يمكن تشفير جميع كلمات مرور المتصفح وتخزينها باستخدام مفتاح المحفظة. من خلال تأمين محفظتك، فإنك تقوم بشكل أساسي بتأمين جميع كلمات المرور الخاصة بك.
هناك أيضًا تصميم من فريق Web3mq. Web3mq هي شبكة ترحيل اتصالات لامركزية عالية الأداء. سيعمل Web3mq Snap كعميل لتسهيل تفاعلات الرسائل والإشعارات والتنبيهات ووظائف الدفع. وسوف تتكامل مع التطبيقات اللامركزية الأخرى المتصلة بـ Web3mq، مثل أدوات الدردشة أو الألعاب القائمة على بلوكتشين، وغيرها. بمساعدة Web3mq Snap، سيتم إرسال الرسائل والتحديثات تلقائيًا إلى مستخدمي Metamask Snap، مما يلغي الحاجة إلى إذن إضافي للمستخدم. يؤدي هذا إلى إنشاء اتصال غير موثوق به بين المستخدمين وبين المستخدمين والتطبيقات.
تتمحور Snaps بشكل كبير حول المطور. مع واجهة برمجة التطبيقات المفتوحة، كيف هي تجربة المطور؟ دعنا نتعمق في إنشاء Snap لمعرفة ذلك.
من المعروف أن معظم المستخدمين غالبًا لا يعرفون العقود الذكية التي يتفاعلون معها، بما في ذلك المخاوف التالية:
بالنسبة للمستخدمين العاديين، فإن توقع منهم مراجعة مدونة صلابة العقود قبل كل عملية يعد أمرًا صعبًا. يعد هذا الموقف مثاليًا لميزة Transaction Insight لتحليل العقود الذكية، مثل استخدام الذكاء الاصطناعي للتدقيق الأمني الأولي، وربما تصفية 80٪ من هجمات التصيد الاحتيالي الأساسية.
تركيب المحفظة
أولاً، قم بتثبيت MetaMask Flask.
MetaMask Flask هو إصدار يركز على المطور من ملحق MetaMask، ويستخدم بشكل أساسي لمعاينة الميزات الجديدة وتطوير الوظائف التجريبية. تذكر أنه من أجل التطوير وليس للاستخدام اليومي. لا تستورد المفاتيح الخاصة للاستخدام اليومي. نحن نستخدم Flask هنا بشكل أساسي لمعاينة Snap المطور محليًا.
يوصى بتعطيل محفظة MetaMask العادية ومحافظ المتصفح الأخرى مؤقتًا بعد تثبيت أو إنشاء ملف تعريف Chrome جديد لتجنب التعارضات.
بعد تثبيت المحفظة، قم بإنشاء محفظة جديدة تمامًا مثل محفظة MetaMask العادية. هذه محفظة تجريبية، لذا لا تستورد محفظتك ذات الاستخدام اليومي.
بعد ذلك، نحتاج إلى إيداع بعض عملات الاختبار في المحفظة التي تم إنشاؤها حديثًا، والتي يمكن الحصول عليها من خلال الحنفيات. يستخدم Snap الذي تمت مناقشته في هذه المقالة Goerli، لذلك سيركز المحتوى التالي بشكل أساسي على Goerli.
لتهيئة Snap استنادًا إلى قالب، اتبع الوثائق الرسمية. أولاً، استخدم @metamask/create-snap CLI لإنشاء مشروع سناب جديد. في الوقت نفسه، سنقوم بالتهيئة باستخدام النموذج الرسمي:
yarn create @metamask/snap المعاملات والرؤى والسناب & & cd المعاملات والرؤى والسناب
ملفات Snap الرئيسية موجودة. /الحزم/المفاجئة. بنية الدليل هي:
ملف تكوين سناب موجود في snap.mainfest.json
، والجسم الرئيسي لـ Snap موجود . /src/index.ts،
وهو موجز للغاية.
أولاً، قم بتمكين الأذونات. أضف الأسطر الثلاثة التالية إلى snap.mainfest.json
:
كود JSONCopy
«الأذونات الأولية»: {
«الوقف: البصيرة في المعاملات»: {}،//نظرة ثاقبة للمعاملات
«الوقف: مزود الإيثيريوم»: {}،//الوصول إلى RPC
«الوقف: الوصول إلى الشبكة»: {}//
في ملف البيان، يمكنك أيضًا تحديث الوصف
والاسم المقترح
لتعديل وصف المشروع واسمه.
بالنسبة لهذا العرض التوضيحي، كل ما هو مطلوب هو تعديل ملف index.ts لإكمال جميع الوظائف. يوجد أدناه مقتطف شفرة مبسط. للحصول على الكود الكامل القابل للتشغيل، يرجى زيارة: https://github.com/LidamaoHub/insights.
كود النسخ
استيراد { OnTransactionHandler, OnRpcRequestHandler } من '@metamask/snaps-types'؛
استيراد { heading, panel, text, copyable, divider } من '@metamask/snaps-ui'؛
تصدير const عند المعاملة: onTransactionHandler = async ({ transaction }) = > {
//تتضمن المعاملة
قيمًا مثل (عنوان العقد)
والبيانات (بيانات
التفاعل)
//رمز مثال لجلب معلومات التدقيق للعقد أدناه
معلومات ثابتة = انتظر الجلب (http://contract-info.audit.dev/?address=${transaction.to}
)؛
//يوجد أدناه نموذج لرمز واجهة المستخدم
إرجاع {
المحتوى: [
نص (
`${info.riskList.length} عنصر المخاطرة`،
)،
العنوان (`${info.riskList.length ? 'Risk List' : ''}`)،
... معلومات. قائمة المخاطر. الخريطة (البند, i) = نص > (`${i + 1} ${item.text}`))،
مقسم ()،
نص (
«مزيد من معلومات التدقيق من عنوان url التالي»،
)،
قابل للنسخ (
`https://contract-info.audit.dev/mm${info.token}`،
)
]
}؛
}؛
لمزيد من الميزات المتعمقة، راجع وثائق مطور MetaMask Snap.
بعد التثبيت، ستعرض كل معاملة تنبيهات مخاطر مماثلة:
تجربة التطوير مع Snaps حاليًا سلسة للغاية، مع عدد قليل جدًا من المشكلات. القوالب الرسمية غنية ومتنوعة أيضًا. يمكن للمطورين ذوي الخبرة عادةً البدء وتطوير Snap المطلوب في غضون ساعات قليلة. ومع ذلك، فإن أكبر عقبة أمام الإصدارات الرسمية التي تلبي احتياجات الجمهور الرئيسي ستكون عمليات التدقيق الأمني. لا يمتلك جميع المطورين المستقلين أو الفرق الصغيرة الموارد اللازمة لإجراء عمليات تدقيق لـ Snaps الخاصة بهم. لذلك، من المتوقع أن كمية وتنوع Snaps لن تشهد نموًا هائلاً لفترة طويلة.
إذا تمكنت من تنفيذ المثال أعلاه بنجاح، تهانينا، فأنت مطور مبتدئ مؤهل لـ Snap!
في العام الماضي، أطلقت MetaMask رسميًا برنامج MetaMask Grants DAO لتمويل المشاريع عالية القيمة داخل نظام MetaMask البيئي. إنها مبادرة تجريبية يقودها الموظفون، تهدف إلى تقديم منح للمطورين الخارجيين العالميين لبناء تجارب مؤثرة داخل نظام MetaMask البيئي. يتم توجيه جزء من أرباح MetaMask الفصلية إلى DAO هذا، وتبلغ ميزانيتها السنوية الحالية 2.4 مليون دولار.
يمكن لأي مشروع يثري نظام MetaMask البيئي التقدم بطلب للحصول على منحة MetaMask الرسمية من MetaMask Grants DAO. لمزيد من المعلومات، يرجى زيارة https://metamaskgrants.org/.
من الجدير بالذكر أن LXDAO تتشرف بالتقدم للحصول على منحة من MetaMask وتلقيها هذا العام، وشاركت بنشاط في تطوير المشاريع ذات الصلة، مما ساهم في نظام MetaMask البيئي!
لقد قمنا بتشريح ماهية Snap من منظور تقني واعتبارات الأمان والقيود وتجربة المطور. باختصار:
حاليًا، لا يزال MetaMask Snap يخضع لتكرارات سريعة. من المتوقع أن يتم فتح المزيد من الأذونات والإمكانيات في المستقبل. هناك أمل في إدخال آلية أكثر انفتاحًا وأمانًا، مثل نظام تدقيق منخفض التكلفة وآمن وبدون إذن، وذلك للسماح لمزيد من المطورين بالمشاركة بتكلفة أقل. إذا تمت معالجة هذه المشكلة، فقد يكون هناك ارتفاع متوقع في الطلب في المستقبل. قد تظهر أيضًا مناصب مخصصة لمطوري Snap.
من خلال الاستفادة من قاعدة مستخدمي MetaMask الضخمة، قد يجد المطورون المستقلون أيضًا فرصًا فريدة. دعونا نبقي أعيننا متيقظين للابتكارات التالية التي ستغير قواعد اللعبة والتي ستجلبها Snaps إلى الطاولة.
أخيرًا، شكرًا لك على مقالتك. أعتقد أنه سيساهم بشكل كبير في زيادة الوعي حول الوضع الحالي لـ MetaMask Snaps.
يرجى الاستمرار في متابعتنا على تويتر: < a href= "https://twitter.com/LXDAO_Official" " > @lxdao_official. سنطرح المزيد من المحتوى المرتبط بـ MetaMask Snap مثل ورش العمل، لذا ترقبوا!