MetaMask Snap 기술 해석: 개발 경험, 용량 제한, 보안 및 비즈니스 잠재력 분석
원본 출처:LXDAO
이 글은 LXDAO 전문 팀원인 Li Damao와 Bruce가 공동 집필했으며, MetaMask Snap의 기술적 측면을 자세히 살펴보겠습니다. 메타마스크 스냅이란 무엇입니까? 어떤 기술적 능력을 갖고 있나요? 안전을 확보하는 방법은 무엇입니까? 개발 경험은 어땠나요? 이러한 질문은 MetaMask Snap의 미래 잠재력을 결정할 수 있습니다.
메타마스크 스냅이란 무엇입니까?
며칠 전 ConsenSys는 MetaMask Snaps Open Beta를 대중에게 출시한다고 발표했습니다. MetaMask Snaps는 지갑의 기능을 확장할 수 있으며, 타사 개발자가 만든 앱(Snaps)을 설치하여 새로운 기능을 얻을 수 있습니다.
ConsenSys가 MetaMask를 WeChat에 구축했다면 Snap은 WeChat 애플릿입니다. 따라서 우리는 MetaMask의 야망을 볼 수 있으며 ConsenSys의 규모와 MetaMask 사용자 수와 함께 지갑 분야의 패턴이 바뀔 것입니다.
현재 관계자는 사용 가능한 Snap 모델 35개를 발표했으며 Snap 앱 스토어 https://snaps.metamask.io/를 출시했습니다.

일부 Snap 목록
그렇다면 기술적인 관점에서 MetaMask Snap은 정확히 어떤 모습일까요? 그들의 능력 제한은 무엇입니까? 안전 해요? 개발 경험은 어땠나요? 이는 모두 MetaMask Snap의 미래 잠재력을 결정할 수 있습니다.
LXDAO는 지난해부터 Snap 구현에 대해 심층적인 연구를 진행해 왔으며, 현재 많은 회원들이 Snap 개발에 참여하고 관련 해커톤에도 적극적으로 참여하고 있습니다. 오늘은 위의 문제들을 기술적인 관점에서 자세히 살펴보고 실제로 Snap을 개발하여 Snap 개발자 경험을 경험해 보도록 하겠습니다.
MetaMask Snap 첫 경험
메타마스크 스냅 설치
일반적으로 MetaMask Snap 공식 마켓을 통해 설치하거나 프로젝트 공식 웹사이트에서 직접 설치할 수 있습니다. UniPass를 예로 들면, 신청 페이지에 접속하면 MetaMask에 연결할 수 있는 버튼이 제공됩니다.

클릭하면 Snap이 설치됩니다.

메타마스크 스냅 사용
설치가 완료되면 해당 제품과 기능을 사용할 수 있습니다.이 애플리케이션에서 UniPass는 MetaMask의 EOA 계정을 통해 제어를 용이하게 하기 위해 스마트 계약 계정을 생성합니다.

전송을 수행할 때 UniPass는 UniPass AA 지갑에서 이 작업을 수행할지 여부를 확인하기 위해 Snap 팝업을 표시합니다.

MetaMask를 통해 확인 후 해당 작업을 수행할 수 있습니다. 이 시나리오에서 MetaMask는 Snap을 통해 UniPass AA 지갑을 제어할 수 있는 기능을 가지고 있습니다. UniPass를 사용하면 사용자는 지갑 플러그인을 개발하지 않고도 지갑을 운영할 수 있으며 MetaMask를 사용하면 매우 저렴한 비용으로 사용자를 소개할 수도 있습니다!
이 설치 및 사용 프로세스에서 어떤 정보를 얻을 수 있습니까?
Snap은 지갑 연결, 네트워크 요청 등에 대한 권한을 포함하여 비교적 세분화된 권한 제어 기능을 갖추고 있습니다. 전체 설계는 안전을 최우선으로 하는 최소 권한 액세스 원칙(Principle of Least Privilege)을 기반으로 합니다.
npm:@unipasswallet/unipass-snap에서 Snap이 패키지 및 버전 관리를 위해 NPM을 기반으로 한다는 것을 확인할 수 있습니다. 보안에 대해서는 나중에 자세히 소개하겠습니다.
Snap은 매우 유연하며 프로젝트의 필요에 따라 디스플레이의 내용과 논리를 개발하고 결정할 수 있습니다. 하지만 UI가 비교적 단순하고 최적화할 여지가 어느 정도 있습니다.
Snap 경험은 매우 간단하고 안정적이며 실제로 베타 및 프로덕션 수준까지 가능합니다.
지갑 제품은 항상 보안이 최우선입니다.다음으로 Snap의 보안 설계를 분석해 보겠습니다.
스냅은 안전한가요?
스냅 코드 런타임 분석
위에서 언급했듯이 Snap은 패키지 및 버전 관리를 위해 NPM을 기반으로 하며 이는 Snap이 실제로 웹 및 JavaScript 기반 애플리케이션임을 보여줍니다. 우리 모두 알고 있듯이 JS의 구문은 매우 유연하고 무료이며 XSS 및 피싱과 같은 공격으로 쉽게 이어질 수 있습니다. MetaMask Snap은 이 문제를 어떻게 해결합니까?
몇 가지 조사를 한 후에 MetaMask가 Agoric에 자금을 지원하고 Agoric 팀의 Hardened JavaScript(Secure EcmaScript라고도 함)를 완전한 가상화 샌드박스 솔루션으로 깊이 통합한다는 사실을 찾는 것은 어렵지 않습니다. Agoric은 JavaScript 제한 API를 설계하고 https://github.com/tc39/proposal-ses에서 TC-39(JS Standardization Consortium)에 초안 제안을 제출했습니다.
간단히 말해서 강화된 JavaScript는 표준 JavaScript의 더 안전한 하위 집합입니다. 일부 JS 기능 및 메커니즘의 도움으로 일부 JS API 호출 권한 및 메서드가 줄어들어 일부 위험이 줄어듭니다. 해당 코드를 실행할 보안 샌드박스를 생성하고 최소 권한 원칙에 따라 코드 권한 제어를 계획합니다.

Agoric은 Snap의 보안을 강화하기 위해 MetaMask와 협력하여 LavoMoat(https://github.com/LavaMoat/lavamoat) 프로젝트를 개발했습니다. LavaMoat는 JS 프로젝트의 외부 종속성으로 인한 보안 위험을 해결하는 데 중점을 두고 일부 API 및 로직에 제한 사항을 추가하는 도구 세트입니다.
Agoric과 MetaMask는 공동으로 블랙박스 및 화이트박스 보안 공격 및 방어 테스트를 시작하고 자세한 보안 보고서를 출력했습니다. 따라서 코드 런타임 수준에서 Snap이 안전하다고 믿을 만한 충분한 이유가 있습니다.
스냅 코드는 오픈 소스여야 하며 감사되어야 합니다.
명확한 사용자 인증 프로세스와 최소한의 권한 설계 외에도 공식적으로 인정받는 Snap이 되기 위해서는 코드를 오픈소스화해야 하며, 커뮤니티의 힘을 통해 Snap이 자체 악성 코드를 가져올 가능성을 크게 줄일 수 있습니다. .
또한 공식 웹사이트의 Snap은 출시되기 전에 제3자 보안 회사의 코드 감사를 거쳐야 한다는 점도 알아냈습니다. 이는 Snap의 보안 신뢰성을 크게 향상시키며, 감사자는 모두에게 매우 친숙한 SlowMist를 포함시킵니다.

지금까지 발견된 Snap 보안 위험
Snap은 현재 NPM의 패키지 및 버전 관리를 기반으로 하기 때문에 코드 수준에서 특정 변경이 발생할 가능성이 있으며, 비필수 감사로 인해 특정 보안 위험이 발생할 수 있습니다.
MetaMask는 NPM 플랫폼의 버전 출시를 제어할 수 없기 때문에 프로젝트는 사용자가 설치할 수 있도록 언제든지 새 버전을 출시할 수 있습니다. 감사 비용으로 인해 감사 회사는 모든 버전을 감사하지 않으므로 상황이 발생합니다. 최신 버전의 변경 사항은 오픈 소스가 아니거나 감사되지 않을 수 있습니다.
그러나 실행 환경은 샌드박스 환경이고 최소한의 권한 설계를 사용하기 때문에 사용자가 새로운 권한 변경을 수동으로 확인하지 않는 한 새 버전의 Snap은 이전 버전의 권한만 가지고 작업을 수행하게 됩니다. 그러나 Snap이 너무 많은 권한을 요구하는 경우에도 위험이 발생할 수 있으므로 Snap을 설치하고 사용할 때 여전히 주의가 필요합니다.
MetaMask Snap의 기술적 역량과 한계
MetaMask Snap은 최근 공식적으로 발표되었지만 실제로 Snap은 개발된 지 4년이 되었습니다! MetaMask Snap의 원래 아이디어는 2019년 10월 10일 Dan Finlay에 의해 게시되었습니다.Medium。
보안과 유연성, 효율성의 균형을 맞추는 것은 매우 큰 도전이며, 메타마스크가 이날을 위해 많은 비용을 지불하고 많은 준비를 했다는 점도 알 수 있습니다.
현재 세 가지 주요 API가 열려 있습니다.
상호 운용성을 통해 개발자는 MetaMask를 기반으로 다른 체인 지갑을 개발할 수 있습니다.
Transaction Insights를 사용하면 개발자는 사용자 거래가 시작되기 전에 거래 데이터를 얻어 거래에 위험이 있는지 분석할 수 있습니다.
알림, Snap을 통해 사용자에게 직접 메시지 푸시(단, 웹사이트 지원이 필요한 것 같은데 좀 맛이 없군요)

다음은 MetaMask Snap의 구체적인 오픈 기능과 효과를 간략하게 소개하여 더욱 생생한 인식을 하실 수 있도록 도와드립니다.
알림 알림 기능
Snap_notify 인터페이스는 MetaMask 또는 브라우저에 알림을 표시할 수 있습니다. Snap은 아래 그림과 같이 이 인터페이스를 통해 사용자에게 직접 메시지를 보낼 수 있습니다.

거래 통찰력 기능
사용자가 스마트 계약과 상호작용할 때 MetaMask는 Snap의 onTransaction 이벤트를 트리거합니다. MetaMask는 서명되지 않은 원래 트랜잭션을 onTransaction 핸들러 메소드에 전달합니다. Snap은 트랜잭션의 보조 확인 페이지에 인터페이스를 반환하고 표시 내용을 사용자 정의할 수 있습니다. .

이를 통해 거래 정보에 대한 보안 감사, 정보 확대 표시 등의 기능을 구현할 수 있습니다.
대화 상자 인터페이스 및 사용자 정의 인터페이스 기능
대화 상자 기능을 사용하면 Snap이 독립적인 창을 직접 팝업할 수 있어 알림, 확인 및 정보 제출에 각각 사용되는 기존의 경고/확인/프롬프트 팝업 창(아래 참조)과 유사한 기능을 얻을 수 있습니다.

Dialog를 통해 간단한 대화형 인터페이스와 작업을 사용자 정의하여 DApp과 연결할 수 있습니다.
현재 MetaMask Snap에서 사용할 수 없는 기능은 무엇입니까?
보안 및 기타 이유로 인해 Snap은 현재 타사 프런트 엔드 프레임워크를 지원하지 않으며 상대적으로 적은 수의 UIKit만 제공합니다. 다음은 여전히 Insight를 예로 들어 모든 개발자가 호출할 수 있는 UI 구성 요소 라이브러리를 보여줍니다.

그림에 표시된 대로 현재 Heading(큰 텍스트), Text(작은 텍스트), Panel(카드, 한 번만 사용할 수 있음), Divider(분할 선), Copyable(클릭하여 복사) 및 Markdown의 작은 하위 집합( 볼드체 및 이탤릭체)은 온라인)이므로 일시적으로 상호작용성을 구축하는 것이 불가능한 것으로 보이며, 임베디드 HTML을 사용하여 대화형 작업을 수행하는 것도 불가능합니다. 하지만 공식 디스코드에 질문을 던진 뒤 해당 관계자는 이는 보안상의 이유이며 다음 버전에서 공개될 예정이라고 주장했다.
또한 보안상의 이유로 외부 요청에는 Fetch 메서드만 지원되며 WebSocket과 같은 추가 요청 프로토콜은 지원되지 않습니다. 보안, 역량, 개인정보 보호의 한계로 인해 Snap을 불러일으키는 현재 URL 등의 클라이언트 정보 획득도 불가능하며, 더욱 풍부하고 다양한 기능을 구현할 수 없습니다.
이러한 문제와 제한 사항의 대부분은 보안 문제로 인한 것이며, 향후 보안이 검증된 후에는 더 많은 권한이 고려될 것이라고 믿습니다.
이러한 API를 제공하는 MetaMask는 실제로 오픈 플랫폼과 유사한 제품이 되었습니다. 이 느낌은 WeChat이 공식 계정과 미니 프로그램을 출시했을 때 사람들이 더 이상 단순한 채팅 도구가 아니라는 느낌을 즉시 느끼게 한 것과 같습니다.
MetaMask는 2019년 현재의 시장 구조, 즉 퍼블릭 체인과 프로젝트 당사자가 많고 다양한 맞춤형 지갑 요구 사항을 예상했습니다. 각 프로젝트 당사자가 자체 플러그인을 개발해야 하고 사용자가 동시에 여러 플러그인을 설치해야 하는 대신 MetaMask Snap을 기반으로 개발하는 것이 좋습니다. 처음 출시된 Snaps 중에는 Sui Wallet, Solana Wallet, Arweave Wallet과 같은 EVM이 아닌 다른 생태 지갑도 발견했습니다. 기존 사용자 기반을 통해 MetaMask Snap은 지갑 환경에 상당한 영향을 미칠 것입니다.
실제로 MetaMask Snap의 상상력은 지갑의 범위를 넘어서도 우리가 예상했던 것보다 더 클 수 있습니다. MetaMask Snaps를 기반으로 범용 비밀번호 관리자 키체인을 만드는 EthSign 팀의 작업도 볼 수 있습니다. 모든 브라우저의 비밀번호는 지갑 키로 암호화되어 저장될 수 있습니다. 이런 식으로 지갑을 잘 관리하고 모든 비밀번호를 잘 보관하세요.

Snap은 개발자와 관련성이 매우 높은데, 오픈 API를 사용하는 구체적인 개발자 경험은 어떤가요? 우리는 그것을 경험하기 위해 Snap을 직접 개발할 수도 있습니다.
Snap 테스트 직접 개발
아이디어 정리
우리 모두 알고 있듯이 대부분의 사용자는 자신이 상호 작용하는 스마트 계약이 무엇인지 실제로 알지 못합니다. 여기에는 주로 다음 문제가 포함됩니다.
거래되는 계약이 피싱사이트로 대체된 계약인지 여부
거래되는 계약이 업그레이드 가능한 계약인지 여부
스마트 컨트랙트는 이제 막 배포되어 많은 사람이 검증하지 않은 컨트랙트인가요?
거래계약은 오픈소스인가요?
일반 사용자의 경우, 작업을 수행하기 전에 계약서의 견고성 코드를 읽어 보도록 요청하는 것은 더욱 불가능합니다. 이때 Transaction Insight 기능을 사용하여 일부 스마트 계약 분석을 구현하는 것은 실제로 매우 적합합니다.예를 들어 AI를 사용하여 스마트 계약에 대한 비교적 간단한 보안 감사를 수행하면 낮은 수준의 피싱 공격의 80%를 필터링할 수 있습니다.
개발 환경 준비
지갑 다운로드
먼저 MetaMask Flask를 설치해야 합니다.

MetaMask Flask는 개발자 중심의 MetaMask 확장 배포판으로 주로 새로운 기능 미리보기 및 실험적인 기능 개발에 사용됩니다. 참고로 메타마스크 개발자 버전이므로 매일 사용하지 마시고, 매일 사용하는 개인키를 가져오지 마세요. Flask는 주로 우리가 개발한 Snap의 로컬 및 실시간 미리보기를 용이하게 하기 위해 사용됩니다.
설치 후 Little Fox 지갑 및 기타 브라우저 지갑을 일시적으로 닫거나 새 Chrome 프로필을 생성하여 사용할 것을 권장합니다. 그렇지 않으면 충돌이 발생합니다.
계정 만들기
지갑 설치 후, 평소 메타마스크 지갑 생성과 동일하게 새 지갑을 생성해 주세요. 테스트용 지갑이므로, 본인의 일일 지갑을 가져오지 마시기 바랍니다.
다음으로 새로 생성된 지갑에 테스트 코인을 충전해야 합니다. 테스트 코인은 Faucet을 통해 얻을 수 있습니다. 이 기사에서 언급한 Snap은 Goerli를 사용하므로 다음 기사에서는 Goerli에 중점을 두겠습니다.
템플릿을 기반으로 Snap 초기화
공식 문서에 따르면 먼저 @metamask/create-snap CLI를 사용하여 새 Snap 프로젝트를 생성하고 초기화를 위해 공식 템플릿을 사용합니다.

스냅 파일 구조
Snap의 주요 파일은 ./packages/snap에 있으며, 파일 디렉터리 구조는 다음과 같습니다.

Snap의 구성 파일은 snap.mainfest.json에 위치하며, Snap의 메인 파일은 ./src/index.ts로 매우 간결합니다.
권한 활성화
먼저 권한을 활성화해야 하며, 먼저 snap.mainfest.json에 다음 세 가지 항목을 추가합니다.

Mainfest 파일에서 설명과 ProposedName을 수정하여 프로젝트의 설명과 이름을 수정할 수도 있습니다.
거래 받기
다음, 이 경우 index.ts 파일만 수정하면 모든 기능이 완료됩니다. 간단한 코드 예시는 다음과 같습니다. 완전히 실행 가능한 코드는 https://github.com/LidamaoHub 를 참조하세요. /인사이트.

자세한 내용은 MetaMask Snap 개발자 문서를 참조하여 더 복잡한 Snap 제품을 완성하세요.
설치 후에는 각 거래에 대해 유사한 위험 경고 정보가 표시됩니다.

현재 Snap의 개발 경험은 매우 원활하여 문제가 거의 발생하지 않으며 공식 템플릿도 매우 풍부하고 다양합니다. 광범위한 경험을 갖춘 개발자는 일반적으로 몇 시간 내에 필요한 Snap을 시작하고 개발을 시작할 수 있습니다. 하지만 공식적으로 출시되어 주류 사용자에게 제공되어야 하며 가장 큰 장애물은 보안 감사입니다. 모든 독립 개발자와 소규모 팀이 Snap을 감사할 수 있는 리소스를 갖고 있는 것은 아닙니다. 따라서 Snap의 수와 풍부함은 앞으로도 오랫동안 아주 큰 폭발적 성장을 보이지는 않을 것으로 예상할 수 있습니다.
개발자 지원
위의 예를 실행할 수 있다면 자격을 갖춘 Snap 초급 개발자가 되신 것을 축하합니다!
MetaMask 관계자는 보조금 프로그램을 통해 MetaMask 생태계의 고부가가치 프로젝트에 자금을 지원하기 위해 작년에 MetaMask Grants DAO를 설립했습니다. MetaMask 보조금 DAO는 MetaMask 생태계 내에서 영향력 있는 경험을 구축하기 위해 전 세계 외부 개발자에게 보조금을 수여하는 실험적인 직원 주도 프로그램입니다. MetaMask는 매 분기마다 이 DAO에 수익의 일부를 투입하고 있으며, 현재 MetaMask Grants DAO의 연간 예산은 240만 달러입니다.
현재 MetaMask 생태계를 풍요롭게 할 수 있는 모든 프로젝트는 공식 MetaMask Grants DAO(MetaMask Grant)를 신청할 수 있습니다. 자세한 내용은 https://metamaskrants.org/를 참조하세요.
LXDAO가 올해 MetaMask Grants를 신청하고 관련 프로젝트 개발에 참여하게 된 것을 영광으로 생각하며 연락 채널을 구축했다는 점을 언급할 가치가 있습니다.LXDAO 회원이시며 관련 아이디어가 있으시면 보다 효율적으로 연락하여 신청서를 제출하세요.

발문
위에서는 Snap이 무엇인지 기술적인 관점에서 안전한지, 기능의 한계, 개발자 경험 등의 관점에서 분석했습니다. 간략한 요약은 다음과 같습니다.
Snap은 WeChat 애플릿과 유사하며 MetaMask를 더 넓은 상상의 공간으로 열어줍니다.
보안은 일반적으로 좋지만 특정 위험이 있으므로 여전히 위험도가 높은 권한에 대해 경계해야 합니다.
보안 고려 사항으로 인해 현재 개방형 기능은 많지 않지만 여전히 상상력이 풍부한 Snap을 충분히 생성할 수 있습니다.
4년간의 다듬기와 테스트 끝에 개발자 경험은 훌륭하지만 보안을 고려하여 화이트리스트 메커니즘과 감사 요구 사항이 설계되었으므로 앞으로 Snap이 많이 등장하지 않을 것으로 예상할 수 있습니다.
현재 MetaMask Snap은 여전히 빠르게 반복되고 있으며 앞으로 더 많은 권한과 기능이 열릴 것이라고 믿습니다. Apple의 공식 감사 검토 메커니즘, 공식 코드 저장소 버전 관리 등 보다 개방적이고 안전한 메커니즘이 도입되어 더 많은 개발자가 저렴한 비용으로 참여할 수 있기를 바랍니다. 이 문제가 개선된다면 앞으로 많은 수요가 생길 것으로 예상할 수 있다. 전담 Snap 개발자 자리도 있을 것입니다.
엄청난 수의 MetaMask 사용자로 인해 독립 개발자에게도 특정 기회가 있을 수 있습니다. Snap이 어떤 차세대 혁신을 가져올지 기다려 보시기 바랍니다.
마지막으로 글을 남겨주셔서 감사드리며, 더 많은 분들이 MetaMask Snap의 개발 현황을 이해하는데 도움이 되리라 믿습니다.


