การตรวจสอบทางเทคนิค MetaMask Snap: ประสบการณ์การพัฒนา ข้อจำกัดด้านความสามารถ ความปลอดภัย และการวิเคราะห์ศักยภาพทางธุรกิจ

ขั้นสูง12/24/2023, 8:22:48 AM
บทความนี้จะแนะนำคุณสมบัติขั้นสูงของ MetaMask Snap โดยสำรวจว่าเทคโนโลยีนี้ช่วยให้กระเป๋าเงิน MetaMask บรรลุแอปพลิเคชันที่หลากหลายมากขึ้นผ่านปลั๊กอินได้อย่างไร โดยเน้นย้ำถึงวิธีการฝ่าฝืนข้อจำกัดของกระเป๋าเงินแบบเดิมๆ ในขณะที่ยังคงรักษาความปลอดภัย และปลดปล่อยศักยภาพที่มากขึ้น

MetaMask Snap คืออะไร?

เมื่อไม่กี่วันที่ผ่านมา ConsenSys ได้ประกาศเปิดตัว MetaMask Snaps Open Beta ต่อสาธารณะ MetaMask Snaps เป็นปลั๊กอินที่ขยายขีดความสามารถของกระเป๋าเงิน MetaMask “Snaps” เหล่านี้เป็นแอปที่พัฒนาโดยบุคคลที่สามซึ่งสามารถติดตั้งเพื่อเพิ่มฟังก์ชันการทำงานใหม่ๆ ได้

หากเราเปรียบเทียบการเปลี่ยนแปลง MetaMask กับ WeChat ของ ConsenSys Snap ก็อาจถูกมองว่าเป็น WeChat Mini Program เป็นผลให้เห็นได้ชัดว่า MetaMask ด้วยความทะเยอทะยานเมื่อรวมกับขนาดของ ConsenSys และฐานผู้ใช้ของ MetaMask จะเปลี่ยนภูมิทัศน์ของภาคกระเป๋าสตางค์

เว็บไซต์อย่างเป็นทางการได้แสดงรายการ Snaps ที่มีอยู่แล้ว 35 รายการและเปิดตัว Snap App Store: https://snaps.metamask.io/

รายการ Snaps บางส่วน

ด้านเทคนิคของ MetaMask Snap

MetaMask Snaps เป็นอย่างไรจากมุมมองทางเทคนิค? ความสามารถและข้อจำกัดของพวกเขามีอะไรบ้าง? พวกเขาปลอดภัยหรือไม่? ประสบการณ์ของนักพัฒนาเป็นอย่างไร? ปัจจัยทั้งหมดเหล่านี้สามารถกำหนดศักยภาพในอนาคตของ MetaMask Snaps ได้

ตั้งแต่ปีที่แล้ว LXDAO มีส่วนร่วมอย่างลึกซึ้งในการค้นคว้าการนำ Snaps ไปใช้ สมาชิกหลายคนมีส่วนร่วมในการพัฒนา Snap และมีส่วนร่วมในแฮ็กกาธอนที่เกี่ยวข้อง วันนี้ เราจะเจาะลึกคำถามเหล่านี้จากมุมมองทางเทคนิค หรือแม้แต่พัฒนา Snap เพื่อมอบประสบการณ์ตรงให้กับนักพัฒนา

เริ่มต้นใช้งาน MetaMask Snap

การติดตั้ง MetaMask Snap

โดยทั่วไปคุณจะติดตั้ง Snaps ได้จากตลาด MetaMask Snap อย่างเป็นทางการ หรือจากเว็บไซต์ของโครงการโดยตรง ตัวอย่างเช่น ด้วย UniPass เมื่อคุณไปที่หน้าแอป จะมีปุ่มสำหรับเชื่อมต่อ MetaMask ของคุณ

การคลิกจะเป็นการเริ่มการติดตั้ง Snap:

การใช้ MetaMask Snap

เมื่อติดตั้งแล้ว คุณสามารถเริ่มใช้งานผลิตภัณฑ์และฟีเจอร์ของผลิตภัณฑ์ได้ ในกรณีนี้ UniPass จะสร้างบัญชีสัญญาอัจฉริยะให้กับคุณ ซึ่งคุณสามารถควบคุมผ่าน MetaMask EOA (บัญชีที่เป็นเจ้าของภายนอก)

เมื่อคุณเริ่มต้นการถ่ายโอน UniPass จะเรียกใช้ป๊อปอัป Snap เพื่อยืนยันว่าคุณต้องการดำเนินการกับกระเป๋าเงิน UniPass AA หรือไม่

หลังจากยืนยันผ่าน MetaMask แล้ว คุณสามารถดำเนินการธุรกรรมต่อได้ ในสถานการณ์นี้ MetaMask จะสามารถควบคุมกระเป๋าเงิน UniPass AA ผ่าน Snap ได้ โดยไม่จำเป็นต้องใช้ UniPass ในการพัฒนาปลั๊กอินกระเป๋าเงินของตัวเอง นอกจากนี้ยังช่วยให้ผู้ใช้เริ่มต้นใช้งานด้วยต้นทุนต่ำผ่าน MetaMask

เราสามารถรวบรวมข้อมูลเชิงลึกอะไรบ้างจากกระบวนการติดตั้งและการใช้งานนี้

  1. การควบคุมการอนุญาตแบบละเอียด: Snaps นำเสนอการตั้งค่าการอนุญาตที่ซับซ้อน ครอบคลุมการเชื่อมต่อกระเป๋าสตางค์ คำขอเครือข่าย และอื่นๆ อีกมากมาย ได้รับการออกแบบโดยใช้แนวทาง “หลักการของสิทธิพิเศษน้อยที่สุด” โดยให้ความสำคัญกับความปลอดภัยเป็นอันดับแรก
  2. การจัดการแพ็คเกจผ่าน NPM: ตามที่ระบุโดย npm:@unipasswallet/unipass-snap Snap อาศัย NPM ในการจัดการแพ็คเกจและเวอร์ชัน ซึ่งอาจมีปัญหาด้านความปลอดภัย ซึ่งเราจะอธิบายรายละเอียดในภายหลัง
  3. มีความยืดหยุ่นสูงแต่ UI ที่กระชับ: Snaps สามารถปรับเปลี่ยนได้สูง ช่วยให้โครงการสามารถพัฒนาและกำหนดคุณสมบัติและตรรกะของตนเองได้ อย่างไรก็ตาม อินเทอร์เฟซผู้ใช้อาจใช้การปรับแต่งบางอย่าง
  4. ประสบการณ์ที่เรียบง่ายและเชื่อถือได้: Snaps มอบประสบการณ์ผู้ใช้ที่ราบรื่นและเชื่อถือได้ ตรงตามมาตรฐานทั้งเบต้าและมาตรฐานระดับการผลิต

ความปลอดภัยมีความสำคัญเหนือกว่าเสมอเมื่อพูดถึงผลิตภัณฑ์กระเป๋าเงิน เรามาเจาะลึกการออกแบบความปลอดภัยของ Snaps กันดีกว่า

Snaps ปลอดภัยหรือไม่?

การวิเคราะห์รันไทม์ของ Snap Code

Snaps ขึ้นอยู่กับ NPM ซึ่งหมายความว่าเป็นแอปพลิเคชันเว็บและ JavaScript ดังที่เราทราบ JavaScript มีความยืดหยุ่นสูงแต่เสี่ยงต่อการถูกโจมตี เช่น XSS และฟิชชิ่ง MetaMask Snap จะรับมือกับความท้าทายเหล่านี้ได้อย่างไร

จากการค้นคว้า เราพบว่า MetaMask ได้ให้ทุนและผสานรวม Hardened JavaScript (หรือ Secure EcmaScript) ของ Agoric ให้เป็นโซลูชันแซนด์บ็อกซ์ "เสมือนจริงเต็มรูปแบบ" Agoric ได้ร่าง API การจำกัด JavaScript และส่งร่างข้อเสนอไปยัง TC-39: ข้อเสนอ TC-39

กล่าวง่ายๆ ก็คือ JavaScript แบบแข็งเป็นชุดย่อยที่ปลอดภัยกว่าของ JavaScript มาตรฐาน การปรับความสามารถบางอย่างของ JavaScript และการจำกัดการเรียก API ช่วยลดความเสี่ยงต่างๆ โดยจะสร้างแซนด์บ็อกซ์ที่ปลอดภัยสำหรับการรันโค้ดและปฏิบัติตาม “หลักการของสิทธิพิเศษน้อยที่สุด” ในการวางแผนการอนุญาตโค้ด

สำหรับข้อมูลเฉพาะทางเทคนิคโดยละเอียดเพิ่มเติมเกี่ยวกับ Hardened JavaScript โปรดดูที่: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf

Agoric และ MetaMask ได้ร่วมกันพัฒนา LavaMoat (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 หรือไม่?

ปัจจุบัน Snaps ได้รับการจัดการตามแพ็คเกจ NPM และการกำหนดเวอร์ชัน NPM เป็นเครื่องมือการจัดการแพ็คเกจที่ใช้กันอย่างแพร่หลายสำหรับการพัฒนาเว็บ ช่วยให้นักพัฒนาและทีมงานโครงการสามารถเผยแพร่แพ็คเกจและโค้ดใหม่ได้อย่างอิสระ

MetaMask ไม่สามารถควบคุมการเผยแพร่เวอร์ชันบนแพลตฟอร์ม NPM มีความเป็นไปได้ที่การเปลี่ยนแปลงเวอร์ชันล่าสุดอาจไม่ได้รับโอเพ่นซอร์สหรือตรวจสอบใช่ไหม

เมื่อมีการชี้แจงอย่างเป็นทางการ การเปลี่ยนแปลงเวอร์ชันแพ็คเกจ NPM ทั้งหมดจะต้องได้รับการตรวจสอบโดยทีมงานอย่างเป็นทางการ และเพิ่มลงในรายการที่อนุญาตก่อนจึงจะสามารถติดตั้งได้ ดังนั้น แม้ว่าทีมงานโครงการจะออกแพ็คเกจ NPM ใหม่ แต่ผู้ใช้ก็ไม่สามารถติดตั้งได้จนกว่าจะมีการระบุไว้อย่างเป็นทางการ วิธีการนี้จะเพิ่มค่าใช้จ่ายในการอัปเดตเวอร์ชัน Snap อย่างไม่ต้องสงสัย แต่เป็นวิธีแก้ปัญหาที่ปลอดภัยที่สุด มันสะท้อนถึงปรัชญาการออกแบบของ MetaMask Snap ที่ให้ความสำคัญกับความปลอดภัยเหนือสิ่งอื่นใด

ความสามารถทางเทคนิคและข้อจำกัดของ MetaMask Snap

MetaMask Snap เพิ่งประกาศอย่างเป็นทางการ แต่จริงๆ แล้วได้รับการพัฒนามานานกว่าสี่ปีแล้ว! แนวคิดเริ่มต้นของ MetaMask Snap เปิดตัวโดย Dan Finlay เมื่อวันที่ 10 ตุลาคม 2019 บนสื่อ บทความขนาดกลาง

การสร้างสมดุลระหว่างความปลอดภัย ความยืดหยุ่น และประสิทธิภาพถือเป็นความท้าทายที่สำคัญ เห็นได้ชัดว่า MetaMask ได้ลงทุนทรัพยากรจำนวนมากและการเตรียมพร้อมสำหรับความพยายามนี้

ปัจจุบัน API หลักสามรายการถูกเปิดเผยเป็นหลัก:

  1. การทำงานร่วมกัน: ช่วยให้นักพัฒนาสามารถสร้างกระเป๋าเงินสำหรับเครือข่ายอื่น ๆ ที่ใช้ MetaMask
  2. ข้อมูลเชิงลึกเกี่ยวกับธุรกรรม: ช่วยให้นักพัฒนาดึงข้อมูลธุรกรรมก่อนที่ผู้ใช้จะเริ่มธุรกรรม เพื่อการประเมินความเสี่ยง
  3. การแจ้งเตือน: อนุญาตให้ส่งข้อความโดยตรงไปยังผู้ใช้ผ่าน Snaps แม้ว่าจะต้องได้รับการสนับสนุนจากเว็บไซต์และดูเหมือนค่อนข้างจำกัด

ด้านล่างนี้เป็นคำแนะนำโดยย่อเกี่ยวกับความสามารถและเอฟเฟกต์เฉพาะที่เปิดโดย MetaMask Snap เพื่อให้คุณเข้าใจได้ชัดเจนยิ่งขึ้น

ความสามารถในการแจ้งเตือน

อินเทอร์เฟซ Snap_notify สามารถแสดงการแจ้งเตือนภายใน MetaMask หรือเบราว์เซอร์ Snaps สามารถส่งข้อความโดยตรงถึงผู้ใช้ผ่านอินเทอร์เฟซนี้ ดังที่แสดงในภาพด้านล่าง

ความสามารถด้านข้อมูลเชิงลึกของธุรกรรม

เมื่อผู้ใช้โต้ตอบกับสัญญาอัจฉริยะ MetaMask จะทริกเกอร์เหตุการณ์ onTransaction ของ Snap MetaMask ส่งผ่านธุรกรรมดิบที่ไม่ได้ลงนามไปยังวิธีตัวจัดการ onTransaction Snaps สามารถส่งคืนอินเทอร์เฟซบนหน้ายืนยันรองของธุรกรรม โดยปรับแต่งเนื้อหาที่แสดง

ด้วยความสามารถนี้ จึงสามารถรับรู้ถึงคุณสมบัติต่างๆ เช่น การตรวจสอบข้อมูลธุรกรรมอย่างปลอดภัย และการแสดงข้อมูลที่ขยายเพิ่มเติมได้

อินเทอร์เฟซการโต้ตอบและความสามารถของอินเทอร์เฟซแบบกำหนดเอง

ความสามารถของ Dialog ช่วยให้ Snaps ปรากฏขึ้นในหน้าต่างแยกต่างหากได้โดยตรง คล้ายกับกล่องโต้ตอบ Alert/Confirm/Prompt แบบดั้งเดิม สิ่งเหล่านี้ใช้สำหรับการแจ้งเตือน การยืนยัน และการส่งข้อมูลตามลำดับ

คุณจะสามารถปรับแต่งอินเทอร์เฟซและการดำเนินการแบบโต้ตอบที่เรียบง่ายผ่าน Dialog เพื่อรวมเข้ากับ DApp ของคุณได้

MetaMask Snap ไม่สามารถบรรลุผลสำเร็จได้ในขณะนี้?

เนื่องจากเหตุผลด้านความปลอดภัย ปัจจุบัน Snap จึงไม่รองรับเฟรมเวิร์กส่วนหน้าของบุคคลที่สาม และมีเพียง UIKit ที่จำกัดเท่านั้น ที่นี่ เรายังคงใช้ Insight เป็นตัวอย่าง โดยจัดแสดงไลบรารีส่วนประกอบ UI สำหรับนักพัฒนา

ดังที่แสดงในภาพ คุณสมบัติปัจจุบัน ได้แก่ ส่วนหัว (ข้อความขนาดใหญ่), ข้อความ (ข้อความขนาดเล็ก), แผง (การ์ดแบบใช้ครั้งเดียว), ตัวแบ่ง, คัดลอกได้ (คลิกเพื่อคัดลอก) และชุดย่อยของคุณสมบัติ Markdown (ตัวหนาและ ตัวเอียง). ดังนั้น ความสามารถเชิงโต้ตอบจึงดูเหมือนไม่สามารถทำได้ชั่วคราว และ HTML ที่ฝังไว้ไม่สามารถใช้สำหรับการโต้ตอบได้ อย่างไรก็ตาม หลังจากตั้งคำถามใน Discord อย่างเป็นทางการ พวกเขาระบุว่าข้อจำกัดเหล่านี้มีไว้เพื่อเหตุผลด้านความปลอดภัย และอาจมีการผ่อนคลายในเวอร์ชันที่กำลังจะมาถึง

นอกจากนี้ เพื่อเหตุผลด้านความปลอดภัย คำขอภายนอกได้รับการสนับสนุนผ่านวิธี Fetch เท่านั้น และไม่รองรับโปรโตคอลคำขอเพิ่มเติม เช่น WebSocket เนื่องจากข้อจำกัดด้านความปลอดภัย ความสามารถ และความเป็นส่วนตัว จึงไม่สามารถเข้าถึงข้อมูลลูกค้าได้ เช่น URL ปัจจุบันที่เรียกใช้ Snap ทำให้การนำคุณสมบัติต่างๆ ไปใช้ให้กว้างขึ้นเป็นเรื่องที่ท้าทาย

ปัญหาเหล่านี้ส่วนใหญ่เกิดจากข้อกังวลด้านความปลอดภัย เราเชื่อว่าเมื่อการรักษาความปลอดภัยได้รับการตรวจสอบเมื่อเวลาผ่านไป จะมีการให้สิทธิ์อนุญาตมากขึ้น

ด้วยการเปิดตัว API เหล่านี้ 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 จะทำหน้าที่เป็นไคลเอ็นต์เพื่ออำนวยความสะดวกในการโต้ตอบข้อความ การแจ้งเตือน การเตือน และฟังก์ชันพุช มันจะทำงานร่วมกับ DApps อื่นๆ ที่เชื่อมต่อกับ Web3MQ เช่น เครื่องมือแชทหรือเกมที่ใช้บล็อกเชน และอื่นๆ อีกมากมาย ด้วยความช่วยเหลือของ Web3MQ Snap ข้อความและการอัปเดตจะถูกส่งไปยังผู้ใช้ Metamask Snap โดยอัตโนมัติ ทำให้ไม่จำเป็นต้องมีการอนุญาตผู้ใช้เพิ่มเติม สิ่งนี้จะสร้างการเชื่อมต่อที่ไม่น่าเชื่อถือระหว่างผู้ใช้และระหว่างผู้ใช้กับแอปพลิเคชัน

Snaps ให้ความสำคัญกับนักพัฒนาเป็นอย่างมาก ด้วย Open API ประสบการณ์ของนักพัฒนาเป็นอย่างไร มาดำดิ่งสู่การสร้าง Snap เพื่อหาคำตอบกัน

การสร้าง Snap สำหรับการทดสอบ

กระบวนการคิด

เป็นที่ทราบกันดีว่าผู้ใช้ส่วนใหญ่มักไม่ทราบสัญญาอัจฉริยะที่พวกเขากำลังโต้ตอบอยู่ รวมถึงข้อกังวลต่อไปนี้:

  1. ไม่ว่าสัญญาธุรกรรมจะถูกแทนที่ด้วยไซต์ฟิชชิ่งหรือไม่
  2. ไม่ว่าสัญญาธุรกรรมจะสามารถอัพเกรดได้หรือไม่
  3. ไม่ว่าสัญญาอัจฉริยะจะถูกนำมาใช้ใหม่และยังไม่ได้รับการตรวจสอบจากหลาย ๆ คนหรือไม่
  4. ไม่ว่าสัญญาธุรกรรมจะเป็นโอเพ่นซอร์สหรือไม่

สำหรับผู้ใช้ทั่วไป การคาดหวังให้พวกเขาตรวจสอบรหัสสัญญาที่มั่นคงก่อนการดำเนินการทุกครั้งถือเป็นคำสั่งที่สูง สถานการณ์นี้เหมาะอย่างยิ่งสำหรับฟีเจอร์ Transaction Insight เพื่อวิเคราะห์สัญญาอัจฉริยะ เช่น การใช้ AI สำหรับการตรวจสอบความปลอดภัยเบื้องต้น ซึ่งอาจกรองการโจมตีแบบฟิชชิ่งพื้นฐานได้ถึง 80%

การตั้งค่าสภาพแวดล้อมการพัฒนา

การติดตั้งกระเป๋าสตางค์

ขั้นแรก ติดตั้ง MetaMask Flask

MetaMask Flask เป็นส่วนขยาย MetaMask เวอร์ชันที่เน้นนักพัฒนาเป็นหลัก ซึ่งส่วนใหญ่ใช้สำหรับการดูตัวอย่างคุณสมบัติใหม่และการพัฒนาฟังก์ชันการทำงานเชิงทดลอง จำไว้ว่ามีไว้เพื่อการพัฒนา ไม่ใช่เพื่อใช้ในชีวิตประจำวัน อย่านำเข้าคีย์ส่วนตัวที่ใช้ประจำวันของคุณ เราใช้ Flask ที่นี่เพื่อดูตัวอย่าง Snap ที่พัฒนาในท้องถิ่นของเราเป็นหลัก

ขอแนะนำให้ปิดการใช้งานกระเป๋าเงิน MetaMask ปกติและกระเป๋าเงินเบราว์เซอร์อื่น ๆ ชั่วคราวหลังจากติดตั้งหรือสร้างโปรไฟล์ Chrome ใหม่เพื่อหลีกเลี่ยงความขัดแย้ง

การสร้างบัญชี

หลังจากติดตั้งกระเป๋าสตางค์แล้ว ให้สร้างกระเป๋าสตางค์ใหม่เหมือนกับกระเป๋าสตางค์ MetaMask ทั่วไป นี่คือกระเป๋าเงินทดสอบ ดังนั้นอย่านำเข้ากระเป๋าเงินที่ใช้ประจำวันของคุณ

ต่อไป เราต้องฝากเหรียญทดสอบบางส่วนลงในกระเป๋าเงินที่สร้างขึ้นใหม่ ซึ่งสามารถรับได้ผ่าน faucets Snap ที่กล่าวถึงในบทความนี้ใช้ Goerli ดังนั้นเนื้อหาต่อไปนี้จะเน้นที่ Goerli เป็นหลัก

หากต้องการเริ่มต้น Snap ตามเทมเพลต ให้ปฏิบัติตามเอกสารประกอบอย่างเป็นทางการ ขั้นแรก ให้ใช้ @metamask/create-snap CLI เพื่อสร้างโปรเจ็กต์ Snap ใหม่ ในเวลาเดียวกัน เราจะเริ่มต้นโดยใช้เทมเพลตอย่างเป็นทางการ:

เส้นด้ายสร้าง @metamask/snap ธุรกรรมinsights-snap && cd ธุรกรรมinsights-snap

โครงสร้างไฟล์สแนป

ไฟล์ Snap หลักจะอยู่ใน ./packages/snap โครงสร้างไดเร็กทอรีคือ:

ไฟล์การกำหนดค่าของ Snap อยู่ใน snap.mainfest.json และเนื้อหาหลักของ Snap อยู่ใน ./src/index.ts ซึ่งค่อนข้างกระชับ

การเปิดใช้งานการอนุญาต

ขั้นแรก ให้เปิดใช้งานการอนุญาต เพิ่มสามบรรทัดต่อไปนี้ใน snap.mainfest.json:

รหัส jsonCopy

“สิทธิ์เริ่มต้น”: {

“endowment:transaction-insight”: {}, // ข้อมูลเชิงลึกเกี่ยวกับธุรกรรม

“endowment:ethereum-provider”: {}, // เข้าถึง RPC

“การบริจาค: การเข้าถึงเครือข่าย”: {} //

ในไฟล์ Manifest คุณยังสามารถอัปเดต description และ proposedName เพื่อแก้ไขคำอธิบายและชื่อของโปรเจ็กต์ได้

กำลังดึงธุรกรรม

สำหรับการสาธิตนี้ สิ่งที่คุณต้องทำก็แค่แก้ไขไฟล์ index.ts เพื่อให้ฟังก์ชันการทำงานทั้งหมดสมบูรณ์ ด้านล่างนี้คือข้อมูลโค้ดแบบง่าย สำหรับโค้ดที่รันได้ทั้งหมด โปรดไปที่: https://github.com/LidamaoHub/insights

รหัส tsxCopy

นำเข้า { OnTransactionHandler, OnRpcRequestHandler } จาก ' @metamask/snaps-types';

นำเข้า { heading, panel, text, copyable, divider } จาก ' @metamask/snaps-ui';

ส่งออก const บนธุรกรรม: OnTransactionHandler = async ({ transaction }) => {

// transaction ประกอบด้วยค่า to (ที่อยู่สัญญา) และ data (ข้อมูลการโต้ตอบ)

// ตัวอย่างโค้ดเพื่อดึงข้อมูลการตรวจสอบสำหรับสัญญาด้านล่าง

ข้อมูล const = รอการดึงข้อมูล (http://contract-info.audit.dev/?address=${transaction.to});

// ด้านล่างนี้คือโค้ดตัวอย่าง UI

กลับ {

เนื้อหา: [

 ข้อความ ( 

 `${info.riskList.length} รายการความเสี่ยง`, 

 ), 

 หัวข้อ (`${info.riskList.length ? 'Risk List' : ''}`), 

 ...info.riskList.map((รายการ, i) => text(`${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 Grants อย่างเป็นทางการจาก MetaMask Grants DAO ได้ สำหรับข้อมูลเพิ่มเติม โปรดไปที่ https://metamaskgrants.org/

เป็นที่น่าสังเกตว่า LXDAO รู้สึกเป็นเกียรติที่ได้สมัครและได้รับทุนสนับสนุนจาก MetaMask ในปีนี้ และได้มีส่วนร่วมอย่างแข็งขันในการพัฒนาโครงการที่เกี่ยวข้อง ซึ่งมีส่วนสนับสนุนระบบนิเวศของ MetaMask!

บทสรุป

เราได้แยกแยะว่า Snap คืออะไรจากมุมมองทางเทคนิค ข้อควรพิจารณาด้านความปลอดภัย ข้อจำกัด และประสบการณ์ของนักพัฒนา สรุป:

  • Snaps คล้ายกับ WeChat Mini Programs ซึ่งปลดล็อกขอบเขตความเป็นไปได้ที่กว้างขึ้นสำหรับ MetaMask
  • การรักษาความปลอดภัยค่อนข้างเชื่อถือได้ รหัสทำงานในสภาพแวดล้อมแซนด์บ็อกซ์แบบจำกัด รหัสจะต้องเป็นโอเพ่นซอร์สและตรวจสอบ ทีมงานอย่างเป็นทางการได้จัดทำรายการอนุญาตการติดตั้งเพื่อขออนุมัติการติดตั้ง
  • เนื่องจากข้อกังวลด้านความปลอดภัย พื้นผิว API ในปัจจุบันจึงค่อนข้างจำกัด อย่างไรก็ตาม มันยังคงให้ Snaps ในจินตนาการที่หลากหลาย
  • ด้วยการปรับปรุงและการทดสอบในโลกแห่งความเป็นจริงเป็นเวลาสี่ปี ประสบการณ์ของนักพัฒนาจึงอยู่ในระดับสูงสุด อย่างไรก็ตาม เนื่องจากมาตรการป้องกันด้านความปลอดภัยในตัว รวมถึงกลไกไวท์ลิสต์และการตรวจสอบที่จำเป็น อย่าคาดหวังว่า Snaps จำนวนมากจะท่วมตลาดในเร็วๆ นี้ แต่นี่ก็เป็นเรื่องที่เข้าใจได้ เนื่องจาก WeChat Mini Programs เริ่มต้นได้ช้าด้วย API ที่จำกัดมาก ซึ่งขยายตัวอย่างรวดเร็วตั้งแต่ปี 2018 และขณะนี้มี Mini-Programs มากกว่า 450M+ DAU และ 7M+ Mini-Programs

ปัจจุบัน MetaMask Snap ยังอยู่ระหว่างการทำซ้ำอย่างรวดเร็ว คาดว่าจะมีการเปิดใช้สิทธิ์และความสามารถเพิ่มเติมในอนาคต มีความหวังว่าจะมีการเปิดตัวกลไกที่เปิดกว้างแต่มีความปลอดภัยมากขึ้น เช่น ระบบตรวจสอบต้นทุนต่ำที่ปลอดภัยและไม่ได้รับอนุญาต เพื่อให้นักพัฒนาสามารถเข้าร่วมได้มากขึ้นด้วยต้นทุนที่ต่ำลง หากปัญหานี้ได้รับการแก้ไข ก็อาจมีความต้องการเพิ่มขึ้นในอนาคต อาจมีตำแหน่งนักพัฒนา Snap โดยเฉพาะด้วยซ้ำ

นักพัฒนาอินดี้อาจค้นพบโอกาสพิเศษด้วยการใช้ประโยชน์จากฐานผู้ใช้จำนวนมหาศาลของ MetaMask เรามาจับตาดูนวัตกรรมที่เปลี่ยนแปลงเกมครั้งต่อไปที่ Snaps จะนำมาไว้บนโต๊ะ

สุดท้ายนี้ขอขอบคุณสำหรับบทความของคุณ ฉันเชื่อว่าสิ่งนี้จะช่วยสร้างความตระหนักรู้เกี่ยวกับสถานะปัจจุบันของ MetaMask Snaps ได้อย่างมาก

โปรดติดตาม Twitter ของเราต่อไป:https://twitter.com/LXDAO_Official@lxdao_official เราจะเผยแพร่เนื้อหาที่เกี่ยวข้องกับ MetaMask Snap เพิ่มเติม เช่น เวิร์กชอป ดังนั้นโปรดคอยติดตาม!

ข้อสงวนสิทธิ์:

  1. บทความนี้พิมพ์ซ้ำจาก [กลาง] ลิขสิทธิ์ทั้งหมดเป็นของผู้แต่งต้นฉบับ [LXDAO] หากมีการคัดค้านการพิมพ์ซ้ำนี้ โปรดติดต่อทีม Gate Learn ( gatelearn@gate.io ) และพวกเขาจะจัดการโดยเร็วที่สุด
  2. การปฏิเสธความรับผิด: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงของผู้เขียนเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนใดๆ
  3. การแปลบทความเป็นภาษาอื่นดำเนินการโดยทีมงาน Gate Learn เว้นแต่จะกล่าวถึง ห้ามคัดลอก แจกจ่าย หรือลอกเลียนแบบบทความที่แปลแล้ว

การตรวจสอบทางเทคนิค MetaMask Snap: ประสบการณ์การพัฒนา ข้อจำกัดด้านความสามารถ ความปลอดภัย และการวิเคราะห์ศักยภาพทางธุรกิจ

ขั้นสูง12/24/2023, 8:22:48 AM
บทความนี้จะแนะนำคุณสมบัติขั้นสูงของ MetaMask Snap โดยสำรวจว่าเทคโนโลยีนี้ช่วยให้กระเป๋าเงิน MetaMask บรรลุแอปพลิเคชันที่หลากหลายมากขึ้นผ่านปลั๊กอินได้อย่างไร โดยเน้นย้ำถึงวิธีการฝ่าฝืนข้อจำกัดของกระเป๋าเงินแบบเดิมๆ ในขณะที่ยังคงรักษาความปลอดภัย และปลดปล่อยศักยภาพที่มากขึ้น

MetaMask Snap คืออะไร?

เมื่อไม่กี่วันที่ผ่านมา ConsenSys ได้ประกาศเปิดตัว MetaMask Snaps Open Beta ต่อสาธารณะ MetaMask Snaps เป็นปลั๊กอินที่ขยายขีดความสามารถของกระเป๋าเงิน MetaMask “Snaps” เหล่านี้เป็นแอปที่พัฒนาโดยบุคคลที่สามซึ่งสามารถติดตั้งเพื่อเพิ่มฟังก์ชันการทำงานใหม่ๆ ได้

หากเราเปรียบเทียบการเปลี่ยนแปลง MetaMask กับ WeChat ของ ConsenSys Snap ก็อาจถูกมองว่าเป็น WeChat Mini Program เป็นผลให้เห็นได้ชัดว่า MetaMask ด้วยความทะเยอทะยานเมื่อรวมกับขนาดของ ConsenSys และฐานผู้ใช้ของ MetaMask จะเปลี่ยนภูมิทัศน์ของภาคกระเป๋าสตางค์

เว็บไซต์อย่างเป็นทางการได้แสดงรายการ Snaps ที่มีอยู่แล้ว 35 รายการและเปิดตัว Snap App Store: https://snaps.metamask.io/

รายการ Snaps บางส่วน

ด้านเทคนิคของ MetaMask Snap

MetaMask Snaps เป็นอย่างไรจากมุมมองทางเทคนิค? ความสามารถและข้อจำกัดของพวกเขามีอะไรบ้าง? พวกเขาปลอดภัยหรือไม่? ประสบการณ์ของนักพัฒนาเป็นอย่างไร? ปัจจัยทั้งหมดเหล่านี้สามารถกำหนดศักยภาพในอนาคตของ MetaMask Snaps ได้

ตั้งแต่ปีที่แล้ว LXDAO มีส่วนร่วมอย่างลึกซึ้งในการค้นคว้าการนำ Snaps ไปใช้ สมาชิกหลายคนมีส่วนร่วมในการพัฒนา Snap และมีส่วนร่วมในแฮ็กกาธอนที่เกี่ยวข้อง วันนี้ เราจะเจาะลึกคำถามเหล่านี้จากมุมมองทางเทคนิค หรือแม้แต่พัฒนา Snap เพื่อมอบประสบการณ์ตรงให้กับนักพัฒนา

เริ่มต้นใช้งาน MetaMask Snap

การติดตั้ง MetaMask Snap

โดยทั่วไปคุณจะติดตั้ง Snaps ได้จากตลาด MetaMask Snap อย่างเป็นทางการ หรือจากเว็บไซต์ของโครงการโดยตรง ตัวอย่างเช่น ด้วย UniPass เมื่อคุณไปที่หน้าแอป จะมีปุ่มสำหรับเชื่อมต่อ MetaMask ของคุณ

การคลิกจะเป็นการเริ่มการติดตั้ง Snap:

การใช้ MetaMask Snap

เมื่อติดตั้งแล้ว คุณสามารถเริ่มใช้งานผลิตภัณฑ์และฟีเจอร์ของผลิตภัณฑ์ได้ ในกรณีนี้ UniPass จะสร้างบัญชีสัญญาอัจฉริยะให้กับคุณ ซึ่งคุณสามารถควบคุมผ่าน MetaMask EOA (บัญชีที่เป็นเจ้าของภายนอก)

เมื่อคุณเริ่มต้นการถ่ายโอน UniPass จะเรียกใช้ป๊อปอัป Snap เพื่อยืนยันว่าคุณต้องการดำเนินการกับกระเป๋าเงิน UniPass AA หรือไม่

หลังจากยืนยันผ่าน MetaMask แล้ว คุณสามารถดำเนินการธุรกรรมต่อได้ ในสถานการณ์นี้ MetaMask จะสามารถควบคุมกระเป๋าเงิน UniPass AA ผ่าน Snap ได้ โดยไม่จำเป็นต้องใช้ UniPass ในการพัฒนาปลั๊กอินกระเป๋าเงินของตัวเอง นอกจากนี้ยังช่วยให้ผู้ใช้เริ่มต้นใช้งานด้วยต้นทุนต่ำผ่าน MetaMask

เราสามารถรวบรวมข้อมูลเชิงลึกอะไรบ้างจากกระบวนการติดตั้งและการใช้งานนี้

  1. การควบคุมการอนุญาตแบบละเอียด: Snaps นำเสนอการตั้งค่าการอนุญาตที่ซับซ้อน ครอบคลุมการเชื่อมต่อกระเป๋าสตางค์ คำขอเครือข่าย และอื่นๆ อีกมากมาย ได้รับการออกแบบโดยใช้แนวทาง “หลักการของสิทธิพิเศษน้อยที่สุด” โดยให้ความสำคัญกับความปลอดภัยเป็นอันดับแรก
  2. การจัดการแพ็คเกจผ่าน NPM: ตามที่ระบุโดย npm:@unipasswallet/unipass-snap Snap อาศัย NPM ในการจัดการแพ็คเกจและเวอร์ชัน ซึ่งอาจมีปัญหาด้านความปลอดภัย ซึ่งเราจะอธิบายรายละเอียดในภายหลัง
  3. มีความยืดหยุ่นสูงแต่ UI ที่กระชับ: Snaps สามารถปรับเปลี่ยนได้สูง ช่วยให้โครงการสามารถพัฒนาและกำหนดคุณสมบัติและตรรกะของตนเองได้ อย่างไรก็ตาม อินเทอร์เฟซผู้ใช้อาจใช้การปรับแต่งบางอย่าง
  4. ประสบการณ์ที่เรียบง่ายและเชื่อถือได้: Snaps มอบประสบการณ์ผู้ใช้ที่ราบรื่นและเชื่อถือได้ ตรงตามมาตรฐานทั้งเบต้าและมาตรฐานระดับการผลิต

ความปลอดภัยมีความสำคัญเหนือกว่าเสมอเมื่อพูดถึงผลิตภัณฑ์กระเป๋าเงิน เรามาเจาะลึกการออกแบบความปลอดภัยของ Snaps กันดีกว่า

Snaps ปลอดภัยหรือไม่?

การวิเคราะห์รันไทม์ของ Snap Code

Snaps ขึ้นอยู่กับ NPM ซึ่งหมายความว่าเป็นแอปพลิเคชันเว็บและ JavaScript ดังที่เราทราบ JavaScript มีความยืดหยุ่นสูงแต่เสี่ยงต่อการถูกโจมตี เช่น XSS และฟิชชิ่ง MetaMask Snap จะรับมือกับความท้าทายเหล่านี้ได้อย่างไร

จากการค้นคว้า เราพบว่า MetaMask ได้ให้ทุนและผสานรวม Hardened JavaScript (หรือ Secure EcmaScript) ของ Agoric ให้เป็นโซลูชันแซนด์บ็อกซ์ "เสมือนจริงเต็มรูปแบบ" Agoric ได้ร่าง API การจำกัด JavaScript และส่งร่างข้อเสนอไปยัง TC-39: ข้อเสนอ TC-39

กล่าวง่ายๆ ก็คือ JavaScript แบบแข็งเป็นชุดย่อยที่ปลอดภัยกว่าของ JavaScript มาตรฐาน การปรับความสามารถบางอย่างของ JavaScript และการจำกัดการเรียก API ช่วยลดความเสี่ยงต่างๆ โดยจะสร้างแซนด์บ็อกซ์ที่ปลอดภัยสำหรับการรันโค้ดและปฏิบัติตาม “หลักการของสิทธิพิเศษน้อยที่สุด” ในการวางแผนการอนุญาตโค้ด

สำหรับข้อมูลเฉพาะทางเทคนิคโดยละเอียดเพิ่มเติมเกี่ยวกับ Hardened JavaScript โปรดดูที่: https://tvcutsem.github.io/assets/HardenedJS_BlueLava2022.pdf

Agoric และ MetaMask ได้ร่วมกันพัฒนา LavaMoat (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 หรือไม่?

ปัจจุบัน Snaps ได้รับการจัดการตามแพ็คเกจ NPM และการกำหนดเวอร์ชัน NPM เป็นเครื่องมือการจัดการแพ็คเกจที่ใช้กันอย่างแพร่หลายสำหรับการพัฒนาเว็บ ช่วยให้นักพัฒนาและทีมงานโครงการสามารถเผยแพร่แพ็คเกจและโค้ดใหม่ได้อย่างอิสระ

MetaMask ไม่สามารถควบคุมการเผยแพร่เวอร์ชันบนแพลตฟอร์ม NPM มีความเป็นไปได้ที่การเปลี่ยนแปลงเวอร์ชันล่าสุดอาจไม่ได้รับโอเพ่นซอร์สหรือตรวจสอบใช่ไหม

เมื่อมีการชี้แจงอย่างเป็นทางการ การเปลี่ยนแปลงเวอร์ชันแพ็คเกจ NPM ทั้งหมดจะต้องได้รับการตรวจสอบโดยทีมงานอย่างเป็นทางการ และเพิ่มลงในรายการที่อนุญาตก่อนจึงจะสามารถติดตั้งได้ ดังนั้น แม้ว่าทีมงานโครงการจะออกแพ็คเกจ NPM ใหม่ แต่ผู้ใช้ก็ไม่สามารถติดตั้งได้จนกว่าจะมีการระบุไว้อย่างเป็นทางการ วิธีการนี้จะเพิ่มค่าใช้จ่ายในการอัปเดตเวอร์ชัน Snap อย่างไม่ต้องสงสัย แต่เป็นวิธีแก้ปัญหาที่ปลอดภัยที่สุด มันสะท้อนถึงปรัชญาการออกแบบของ MetaMask Snap ที่ให้ความสำคัญกับความปลอดภัยเหนือสิ่งอื่นใด

ความสามารถทางเทคนิคและข้อจำกัดของ MetaMask Snap

MetaMask Snap เพิ่งประกาศอย่างเป็นทางการ แต่จริงๆ แล้วได้รับการพัฒนามานานกว่าสี่ปีแล้ว! แนวคิดเริ่มต้นของ MetaMask Snap เปิดตัวโดย Dan Finlay เมื่อวันที่ 10 ตุลาคม 2019 บนสื่อ บทความขนาดกลาง

การสร้างสมดุลระหว่างความปลอดภัย ความยืดหยุ่น และประสิทธิภาพถือเป็นความท้าทายที่สำคัญ เห็นได้ชัดว่า MetaMask ได้ลงทุนทรัพยากรจำนวนมากและการเตรียมพร้อมสำหรับความพยายามนี้

ปัจจุบัน API หลักสามรายการถูกเปิดเผยเป็นหลัก:

  1. การทำงานร่วมกัน: ช่วยให้นักพัฒนาสามารถสร้างกระเป๋าเงินสำหรับเครือข่ายอื่น ๆ ที่ใช้ MetaMask
  2. ข้อมูลเชิงลึกเกี่ยวกับธุรกรรม: ช่วยให้นักพัฒนาดึงข้อมูลธุรกรรมก่อนที่ผู้ใช้จะเริ่มธุรกรรม เพื่อการประเมินความเสี่ยง
  3. การแจ้งเตือน: อนุญาตให้ส่งข้อความโดยตรงไปยังผู้ใช้ผ่าน Snaps แม้ว่าจะต้องได้รับการสนับสนุนจากเว็บไซต์และดูเหมือนค่อนข้างจำกัด

ด้านล่างนี้เป็นคำแนะนำโดยย่อเกี่ยวกับความสามารถและเอฟเฟกต์เฉพาะที่เปิดโดย MetaMask Snap เพื่อให้คุณเข้าใจได้ชัดเจนยิ่งขึ้น

ความสามารถในการแจ้งเตือน

อินเทอร์เฟซ Snap_notify สามารถแสดงการแจ้งเตือนภายใน MetaMask หรือเบราว์เซอร์ Snaps สามารถส่งข้อความโดยตรงถึงผู้ใช้ผ่านอินเทอร์เฟซนี้ ดังที่แสดงในภาพด้านล่าง

ความสามารถด้านข้อมูลเชิงลึกของธุรกรรม

เมื่อผู้ใช้โต้ตอบกับสัญญาอัจฉริยะ MetaMask จะทริกเกอร์เหตุการณ์ onTransaction ของ Snap MetaMask ส่งผ่านธุรกรรมดิบที่ไม่ได้ลงนามไปยังวิธีตัวจัดการ onTransaction Snaps สามารถส่งคืนอินเทอร์เฟซบนหน้ายืนยันรองของธุรกรรม โดยปรับแต่งเนื้อหาที่แสดง

ด้วยความสามารถนี้ จึงสามารถรับรู้ถึงคุณสมบัติต่างๆ เช่น การตรวจสอบข้อมูลธุรกรรมอย่างปลอดภัย และการแสดงข้อมูลที่ขยายเพิ่มเติมได้

อินเทอร์เฟซการโต้ตอบและความสามารถของอินเทอร์เฟซแบบกำหนดเอง

ความสามารถของ Dialog ช่วยให้ Snaps ปรากฏขึ้นในหน้าต่างแยกต่างหากได้โดยตรง คล้ายกับกล่องโต้ตอบ Alert/Confirm/Prompt แบบดั้งเดิม สิ่งเหล่านี้ใช้สำหรับการแจ้งเตือน การยืนยัน และการส่งข้อมูลตามลำดับ

คุณจะสามารถปรับแต่งอินเทอร์เฟซและการดำเนินการแบบโต้ตอบที่เรียบง่ายผ่าน Dialog เพื่อรวมเข้ากับ DApp ของคุณได้

MetaMask Snap ไม่สามารถบรรลุผลสำเร็จได้ในขณะนี้?

เนื่องจากเหตุผลด้านความปลอดภัย ปัจจุบัน Snap จึงไม่รองรับเฟรมเวิร์กส่วนหน้าของบุคคลที่สาม และมีเพียง UIKit ที่จำกัดเท่านั้น ที่นี่ เรายังคงใช้ Insight เป็นตัวอย่าง โดยจัดแสดงไลบรารีส่วนประกอบ UI สำหรับนักพัฒนา

ดังที่แสดงในภาพ คุณสมบัติปัจจุบัน ได้แก่ ส่วนหัว (ข้อความขนาดใหญ่), ข้อความ (ข้อความขนาดเล็ก), แผง (การ์ดแบบใช้ครั้งเดียว), ตัวแบ่ง, คัดลอกได้ (คลิกเพื่อคัดลอก) และชุดย่อยของคุณสมบัติ Markdown (ตัวหนาและ ตัวเอียง). ดังนั้น ความสามารถเชิงโต้ตอบจึงดูเหมือนไม่สามารถทำได้ชั่วคราว และ HTML ที่ฝังไว้ไม่สามารถใช้สำหรับการโต้ตอบได้ อย่างไรก็ตาม หลังจากตั้งคำถามใน Discord อย่างเป็นทางการ พวกเขาระบุว่าข้อจำกัดเหล่านี้มีไว้เพื่อเหตุผลด้านความปลอดภัย และอาจมีการผ่อนคลายในเวอร์ชันที่กำลังจะมาถึง

นอกจากนี้ เพื่อเหตุผลด้านความปลอดภัย คำขอภายนอกได้รับการสนับสนุนผ่านวิธี Fetch เท่านั้น และไม่รองรับโปรโตคอลคำขอเพิ่มเติม เช่น WebSocket เนื่องจากข้อจำกัดด้านความปลอดภัย ความสามารถ และความเป็นส่วนตัว จึงไม่สามารถเข้าถึงข้อมูลลูกค้าได้ เช่น URL ปัจจุบันที่เรียกใช้ Snap ทำให้การนำคุณสมบัติต่างๆ ไปใช้ให้กว้างขึ้นเป็นเรื่องที่ท้าทาย

ปัญหาเหล่านี้ส่วนใหญ่เกิดจากข้อกังวลด้านความปลอดภัย เราเชื่อว่าเมื่อการรักษาความปลอดภัยได้รับการตรวจสอบเมื่อเวลาผ่านไป จะมีการให้สิทธิ์อนุญาตมากขึ้น

ด้วยการเปิดตัว API เหล่านี้ 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 จะทำหน้าที่เป็นไคลเอ็นต์เพื่ออำนวยความสะดวกในการโต้ตอบข้อความ การแจ้งเตือน การเตือน และฟังก์ชันพุช มันจะทำงานร่วมกับ DApps อื่นๆ ที่เชื่อมต่อกับ Web3MQ เช่น เครื่องมือแชทหรือเกมที่ใช้บล็อกเชน และอื่นๆ อีกมากมาย ด้วยความช่วยเหลือของ Web3MQ Snap ข้อความและการอัปเดตจะถูกส่งไปยังผู้ใช้ Metamask Snap โดยอัตโนมัติ ทำให้ไม่จำเป็นต้องมีการอนุญาตผู้ใช้เพิ่มเติม สิ่งนี้จะสร้างการเชื่อมต่อที่ไม่น่าเชื่อถือระหว่างผู้ใช้และระหว่างผู้ใช้กับแอปพลิเคชัน

Snaps ให้ความสำคัญกับนักพัฒนาเป็นอย่างมาก ด้วย Open API ประสบการณ์ของนักพัฒนาเป็นอย่างไร มาดำดิ่งสู่การสร้าง Snap เพื่อหาคำตอบกัน

การสร้าง Snap สำหรับการทดสอบ

กระบวนการคิด

เป็นที่ทราบกันดีว่าผู้ใช้ส่วนใหญ่มักไม่ทราบสัญญาอัจฉริยะที่พวกเขากำลังโต้ตอบอยู่ รวมถึงข้อกังวลต่อไปนี้:

  1. ไม่ว่าสัญญาธุรกรรมจะถูกแทนที่ด้วยไซต์ฟิชชิ่งหรือไม่
  2. ไม่ว่าสัญญาธุรกรรมจะสามารถอัพเกรดได้หรือไม่
  3. ไม่ว่าสัญญาอัจฉริยะจะถูกนำมาใช้ใหม่และยังไม่ได้รับการตรวจสอบจากหลาย ๆ คนหรือไม่
  4. ไม่ว่าสัญญาธุรกรรมจะเป็นโอเพ่นซอร์สหรือไม่

สำหรับผู้ใช้ทั่วไป การคาดหวังให้พวกเขาตรวจสอบรหัสสัญญาที่มั่นคงก่อนการดำเนินการทุกครั้งถือเป็นคำสั่งที่สูง สถานการณ์นี้เหมาะอย่างยิ่งสำหรับฟีเจอร์ Transaction Insight เพื่อวิเคราะห์สัญญาอัจฉริยะ เช่น การใช้ AI สำหรับการตรวจสอบความปลอดภัยเบื้องต้น ซึ่งอาจกรองการโจมตีแบบฟิชชิ่งพื้นฐานได้ถึง 80%

การตั้งค่าสภาพแวดล้อมการพัฒนา

การติดตั้งกระเป๋าสตางค์

ขั้นแรก ติดตั้ง MetaMask Flask

MetaMask Flask เป็นส่วนขยาย MetaMask เวอร์ชันที่เน้นนักพัฒนาเป็นหลัก ซึ่งส่วนใหญ่ใช้สำหรับการดูตัวอย่างคุณสมบัติใหม่และการพัฒนาฟังก์ชันการทำงานเชิงทดลอง จำไว้ว่ามีไว้เพื่อการพัฒนา ไม่ใช่เพื่อใช้ในชีวิตประจำวัน อย่านำเข้าคีย์ส่วนตัวที่ใช้ประจำวันของคุณ เราใช้ Flask ที่นี่เพื่อดูตัวอย่าง Snap ที่พัฒนาในท้องถิ่นของเราเป็นหลัก

ขอแนะนำให้ปิดการใช้งานกระเป๋าเงิน MetaMask ปกติและกระเป๋าเงินเบราว์เซอร์อื่น ๆ ชั่วคราวหลังจากติดตั้งหรือสร้างโปรไฟล์ Chrome ใหม่เพื่อหลีกเลี่ยงความขัดแย้ง

การสร้างบัญชี

หลังจากติดตั้งกระเป๋าสตางค์แล้ว ให้สร้างกระเป๋าสตางค์ใหม่เหมือนกับกระเป๋าสตางค์ MetaMask ทั่วไป นี่คือกระเป๋าเงินทดสอบ ดังนั้นอย่านำเข้ากระเป๋าเงินที่ใช้ประจำวันของคุณ

ต่อไป เราต้องฝากเหรียญทดสอบบางส่วนลงในกระเป๋าเงินที่สร้างขึ้นใหม่ ซึ่งสามารถรับได้ผ่าน faucets Snap ที่กล่าวถึงในบทความนี้ใช้ Goerli ดังนั้นเนื้อหาต่อไปนี้จะเน้นที่ Goerli เป็นหลัก

หากต้องการเริ่มต้น Snap ตามเทมเพลต ให้ปฏิบัติตามเอกสารประกอบอย่างเป็นทางการ ขั้นแรก ให้ใช้ @metamask/create-snap CLI เพื่อสร้างโปรเจ็กต์ Snap ใหม่ ในเวลาเดียวกัน เราจะเริ่มต้นโดยใช้เทมเพลตอย่างเป็นทางการ:

เส้นด้ายสร้าง @metamask/snap ธุรกรรมinsights-snap && cd ธุรกรรมinsights-snap

โครงสร้างไฟล์สแนป

ไฟล์ Snap หลักจะอยู่ใน ./packages/snap โครงสร้างไดเร็กทอรีคือ:

ไฟล์การกำหนดค่าของ Snap อยู่ใน snap.mainfest.json และเนื้อหาหลักของ Snap อยู่ใน ./src/index.ts ซึ่งค่อนข้างกระชับ

การเปิดใช้งานการอนุญาต

ขั้นแรก ให้เปิดใช้งานการอนุญาต เพิ่มสามบรรทัดต่อไปนี้ใน snap.mainfest.json:

รหัส jsonCopy

“สิทธิ์เริ่มต้น”: {

“endowment:transaction-insight”: {}, // ข้อมูลเชิงลึกเกี่ยวกับธุรกรรม

“endowment:ethereum-provider”: {}, // เข้าถึง RPC

“การบริจาค: การเข้าถึงเครือข่าย”: {} //

ในไฟล์ Manifest คุณยังสามารถอัปเดต description และ proposedName เพื่อแก้ไขคำอธิบายและชื่อของโปรเจ็กต์ได้

กำลังดึงธุรกรรม

สำหรับการสาธิตนี้ สิ่งที่คุณต้องทำก็แค่แก้ไขไฟล์ index.ts เพื่อให้ฟังก์ชันการทำงานทั้งหมดสมบูรณ์ ด้านล่างนี้คือข้อมูลโค้ดแบบง่าย สำหรับโค้ดที่รันได้ทั้งหมด โปรดไปที่: https://github.com/LidamaoHub/insights

รหัส tsxCopy

นำเข้า { OnTransactionHandler, OnRpcRequestHandler } จาก ' @metamask/snaps-types';

นำเข้า { heading, panel, text, copyable, divider } จาก ' @metamask/snaps-ui';

ส่งออก const บนธุรกรรม: OnTransactionHandler = async ({ transaction }) => {

// transaction ประกอบด้วยค่า to (ที่อยู่สัญญา) และ data (ข้อมูลการโต้ตอบ)

// ตัวอย่างโค้ดเพื่อดึงข้อมูลการตรวจสอบสำหรับสัญญาด้านล่าง

ข้อมูล const = รอการดึงข้อมูล (http://contract-info.audit.dev/?address=${transaction.to});

// ด้านล่างนี้คือโค้ดตัวอย่าง UI

กลับ {

เนื้อหา: [

 ข้อความ ( 

 `${info.riskList.length} รายการความเสี่ยง`, 

 ), 

 หัวข้อ (`${info.riskList.length ? 'Risk List' : ''}`), 

 ...info.riskList.map((รายการ, i) => text(`${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 Grants อย่างเป็นทางการจาก MetaMask Grants DAO ได้ สำหรับข้อมูลเพิ่มเติม โปรดไปที่ https://metamaskgrants.org/

เป็นที่น่าสังเกตว่า LXDAO รู้สึกเป็นเกียรติที่ได้สมัครและได้รับทุนสนับสนุนจาก MetaMask ในปีนี้ และได้มีส่วนร่วมอย่างแข็งขันในการพัฒนาโครงการที่เกี่ยวข้อง ซึ่งมีส่วนสนับสนุนระบบนิเวศของ MetaMask!

บทสรุป

เราได้แยกแยะว่า Snap คืออะไรจากมุมมองทางเทคนิค ข้อควรพิจารณาด้านความปลอดภัย ข้อจำกัด และประสบการณ์ของนักพัฒนา สรุป:

  • Snaps คล้ายกับ WeChat Mini Programs ซึ่งปลดล็อกขอบเขตความเป็นไปได้ที่กว้างขึ้นสำหรับ MetaMask
  • การรักษาความปลอดภัยค่อนข้างเชื่อถือได้ รหัสทำงานในสภาพแวดล้อมแซนด์บ็อกซ์แบบจำกัด รหัสจะต้องเป็นโอเพ่นซอร์สและตรวจสอบ ทีมงานอย่างเป็นทางการได้จัดทำรายการอนุญาตการติดตั้งเพื่อขออนุมัติการติดตั้ง
  • เนื่องจากข้อกังวลด้านความปลอดภัย พื้นผิว API ในปัจจุบันจึงค่อนข้างจำกัด อย่างไรก็ตาม มันยังคงให้ Snaps ในจินตนาการที่หลากหลาย
  • ด้วยการปรับปรุงและการทดสอบในโลกแห่งความเป็นจริงเป็นเวลาสี่ปี ประสบการณ์ของนักพัฒนาจึงอยู่ในระดับสูงสุด อย่างไรก็ตาม เนื่องจากมาตรการป้องกันด้านความปลอดภัยในตัว รวมถึงกลไกไวท์ลิสต์และการตรวจสอบที่จำเป็น อย่าคาดหวังว่า Snaps จำนวนมากจะท่วมตลาดในเร็วๆ นี้ แต่นี่ก็เป็นเรื่องที่เข้าใจได้ เนื่องจาก WeChat Mini Programs เริ่มต้นได้ช้าด้วย API ที่จำกัดมาก ซึ่งขยายตัวอย่างรวดเร็วตั้งแต่ปี 2018 และขณะนี้มี Mini-Programs มากกว่า 450M+ DAU และ 7M+ Mini-Programs

ปัจจุบัน MetaMask Snap ยังอยู่ระหว่างการทำซ้ำอย่างรวดเร็ว คาดว่าจะมีการเปิดใช้สิทธิ์และความสามารถเพิ่มเติมในอนาคต มีความหวังว่าจะมีการเปิดตัวกลไกที่เปิดกว้างแต่มีความปลอดภัยมากขึ้น เช่น ระบบตรวจสอบต้นทุนต่ำที่ปลอดภัยและไม่ได้รับอนุญาต เพื่อให้นักพัฒนาสามารถเข้าร่วมได้มากขึ้นด้วยต้นทุนที่ต่ำลง หากปัญหานี้ได้รับการแก้ไข ก็อาจมีความต้องการเพิ่มขึ้นในอนาคต อาจมีตำแหน่งนักพัฒนา Snap โดยเฉพาะด้วยซ้ำ

นักพัฒนาอินดี้อาจค้นพบโอกาสพิเศษด้วยการใช้ประโยชน์จากฐานผู้ใช้จำนวนมหาศาลของ MetaMask เรามาจับตาดูนวัตกรรมที่เปลี่ยนแปลงเกมครั้งต่อไปที่ Snaps จะนำมาไว้บนโต๊ะ

สุดท้ายนี้ขอขอบคุณสำหรับบทความของคุณ ฉันเชื่อว่าสิ่งนี้จะช่วยสร้างความตระหนักรู้เกี่ยวกับสถานะปัจจุบันของ MetaMask Snaps ได้อย่างมาก

โปรดติดตาม Twitter ของเราต่อไป:https://twitter.com/LXDAO_Official@lxdao_official เราจะเผยแพร่เนื้อหาที่เกี่ยวข้องกับ MetaMask Snap เพิ่มเติม เช่น เวิร์กชอป ดังนั้นโปรดคอยติดตาม!

ข้อสงวนสิทธิ์:

  1. บทความนี้พิมพ์ซ้ำจาก [กลาง] ลิขสิทธิ์ทั้งหมดเป็นของผู้แต่งต้นฉบับ [LXDAO] หากมีการคัดค้านการพิมพ์ซ้ำนี้ โปรดติดต่อทีม Gate Learn ( gatelearn@gate.io ) และพวกเขาจะจัดการโดยเร็วที่สุด
  2. การปฏิเสธความรับผิด: มุมมองและความคิดเห็นที่แสดงในบทความนี้เป็นเพียงของผู้เขียนเท่านั้น และไม่ถือเป็นคำแนะนำในการลงทุนใดๆ
  3. การแปลบทความเป็นภาษาอื่นดำเนินการโดยทีมงาน Gate Learn เว้นแต่จะกล่าวถึง ห้ามคัดลอก แจกจ่าย หรือลอกเลียนแบบบทความที่แปลแล้ว
Empieza ahora
¡Regístrate y recibe un bono de
$100
!