Consensys가 구축한 선도적인 자기 보관형 암호화폐 지갑이자 Web3로 가는 관문입니다.
모든 글 읽기보고타에서 제작된 Sozu House 해커톤 Snap

MetaMask Snaps는 MetaMask를 세계에서 가장 확장 가능한 지갑으로 만들기 위한 로드맵입니다. 개발자로서 완전히 새로운 방식으로 MetaMask에 기능과 API를 추가할 수 있습니다. Web3 개발자들은 이러한 성장의 핵심이며, 이 시리즈는 현재 개발 중인 혁신적인 MetaMask Snaps를 소개하는 것을 목표로 합니다.

Snap 저장소: https://github.com/Web3Auth/openlogin-snap/
왜 만들게 되었나요?
Web3Auth에서 저희는 항상 다중 인증(MFA)이 암호화폐 자산을 보호하는 가장 좋은 방법이며, 시드 구문보다 훨씬 뛰어나다고 믿어왔습니다. ETHBogota에서 최신 MetaMask Snaps 빌드가 외부 키 관리 기능을 제공할 수 있다는 것을 확인한 후, Sozu House 해커톤에서 MPC 기술을 MetaMask에 통합하는 도전을 하기로 결정했습니다.
기술적 구현 과정을 설명해 주시겠어요?
저희의 목표는 신규 사용자가 로그인하고 MetaMask에서 계정에 접근하기 위한 2FA를 설정할 수 있도록 하는 것이었습니다. 이후 사용자가 트랜잭션에 서명하려 할 때마다, 내부적으로 저희 MPC SDK가 임계값 ECDSA 서명을 수행합니다. 이는 개인 키를 두 부분으로 분할하여 수행됩니다: snap에 저장되는 로컬 공유와 서명 서버에 저장되는 공유입니다. 여러 통신 라운드를 거쳐 서명 서버와 snap이 공동으로 이더리움 트랜잭션에 서명하고 Goerli 네트워크에서 확인될 수 있습니다. 시드 구문과 달리, 이 설정은 키의 돌이킬 수 없는 손실로 이어지는 단일 실패 지점이 없습니다: 사용자의 노트북이 해킹되거나 서명 서버가 해킹되더라도 사용자는 개인 키를 잃지 않습니다.
다른 모든 snap과 마찬가지로, 저희 snap은 두 부분으로 구성됩니다: 실제 snap 패키지와 snap을 로드하고 상호작용하는 페이지입니다. 이상적인 사용자 흐름은 모든 키 관리 상호작용을 MetaMask 확장의 UI 내에서 유지하는 것이었지만, 권한 제한으로 인해 그렇게 할 수 없었습니다. 대신 사용자 인증이 snap 외부에서 이루어지고, 완료되면 상태를 snap으로 마이그레이션합니다. 이후 MetaMask의 RPC 엔진에 연결하여 snap의 MPC SDK와 마이그레이션된 상태를 사용해 트랜잭션에 대한 임계값 ECDSA 서명을 생성함으로써 트랜잭션 요청에 응답합니다. 놀랍게도 해커톤 첫 몇 시간 내에 상태 마이그레이션 부분을 완료하고 서명 기능만 남겨두었습니다.
나머지 과정은 두 가지 주요 작업으로 나눌 수 있습니다:
들어오는 트랜잭션 요청을 처리하기 위해 기존 Web3 프로바이더를 MPC SDK에 맞게 재활용하기
MetaMask Snaps SES 환경에서 MPC SDK 실행하기
MetaMask의 작동 방식이나 다른 지갑의 기능에 익숙하다면, 이더리움 트랜잭션에 서명하는 것이 단순히 개인 키로 메시지에 서명하는 것보다 훨씬 많은 작업이 필요하다는 것을 알 것입니다. 서명할 메시지 객체를 형성하는 데 많은 작업이 필요합니다. 각 트랜잭션은 각 체인과 트랜잭션 유형에 특정한 형식을 따르고, 하위 호환성을 위해 지원해야 하는 레거시 동작이 있으며, 현재 가스 가격에 대한 정보를 가져와야 하고, 사용할 가스/가스 한도를 계산해야 하며, 계정 nonce 등을 추적해야 합니다. 다행히 대부분의 기존 Web3 프로바이더는 이미 이러한 기능을 기본적으로 제공합니다. 그러나 임계값 서명 라이브러리가 이러한 SDK와 잘 작동하도록 하기 위해 모든 단일 모듈을 깊이 파고들어 eth-sig-util 라이브러리의 서명 함수를 저희 자체 임계값 서명 라이브러리 서명 함수로 교체해야 했으며, 이에 상당한 시간이 소요되었습니다. 또한 저희 MPC SDK가 체인에 구애받지 않고 이더리움 특정 검사를 고려하지 않았기 때문에, 교체한 eth-sig-util 라이브러리의 검사를 역공학하고 재구현해야 했습니다. 예를 들어, EIP-2는 트랜잭션 가변성 공격을 방지하기 위해 ECDSA 서명의 s-값이 n/2 + 1보다 크지 않아야 한다고 명시합니다(여기서 n은 secp256k1 타원 곡선의 차수). 이는 ECDSA 서명 라이브러리가 s-값이 이 범위를 벗어날 경우 서명을 "플립"해야 함을 요구합니다.
또 다른 과제는 MetaMask Snaps 환경에서 MPC SDK를 실행하는 것이었습니다. 저희 MPC SDK는 브라우저에서 효율적으로 실행하기 위해 wasm(rust에서 컴파일)을 사용합니다. SDK와 서명 서버 간의 여러 통신 라운드로 인해 HTTP 헤더의 오버헤드를 피하기 위해 Socket.IO도 사용합니다. snap에 wasm 코드를 로드하려는 시도 중에 wasm 메서드의 혼합 인수 유형과 관련된 이상한 문제가 발생했습니다. 안타깝게도 wasm 디버깅 도구는 여전히 매우 부족하며, 오류 메시지가 도움이 되지 않고 정보가 없습니다(예: "Uncaught RuntimeError: unreachable"). 결국 모든 혼합 입력 인수를 문자열로 받아들이고 wasm 코드 내에서 정수/바이트 배열로 파싱하는 방식으로 이 제한을 우회했습니다. 또 다른 문제는 socket.io가 MetaMask Snaps 환경에서 작동하지 않는다는 것이었습니다. Socket.IO는 일반 WebSocket 위에 구축된 별도의 라이브러리/사양으로, 연결 업그레이드, 연결 끊김, 롱 폴링으로의 폴백 등을 처리하며, 프로덕션 환경에서 WebSocket을 사용할 때 매우 유용합니다. 안타깝게도 MetaMask Snap 환경에서 Socket.IO 라이브러리를 실행할 수 없었습니다. 따라서 일반 WebSocket으로 폴백하고, 서명 서버도 socket.io 대신 기본 WebSocket을 사용하도록 재작성하며, WebSocket에 문제가 있을 경우 폴링 전략으로 폴백해야 했습니다.
본인과 팀에 대해 간략히 소개해 주시겠어요?
Zhen과 저는 Web3Auth의 공동 창업자이며, 저희 회사는 직관적이고 안전하며 비수탁형 키 관리 솔루션을 제공하는 데 전문화되어 있습니다. 저희는 좋은 보안은 사용하기 쉽고 눈에 띄지 않아야 하며, 그렇지 않으면 널리 채택되지 않을 것이라고 믿습니다. 그래서 저희는 개인 키에 다중 인증을 사용하는 것을 강력히 지지합니다.
MetaMask Snaps를 처음 접한 것은 언제이며, 어떤 경험이었나요?
약 1년 전에 MetaMask Snaps를 시도했지만, 당시에는 MetaMask 내에서 개인 키 관리 기능을 확장할 수 있는 기능이 없었습니다. 최근 SIP-2의 도입(Olaf에게 감사합니다!)으로 MetaMask Snaps가 MetaMask의 키링을 확장할 수 있게 되어, 무엇이 가능한지 매우 기대됩니다! snap을 구축하면서 MetaMask Snaps의 기반이 되는 SES 시스템도 탐구했는데, MetaMask가 개발자들이 MetaMask Snaps를 통해 기능을 추가할 수 있는 플랫폼으로 작동하기 위한 매우 견고한 기반이라고 생각합니다.
MetaMask Snaps가 다른 지갑과 다른 점은 무엇인가요?
확장성입니다! MetaMask Snaps는 MetaMask 확장 자체의 보안을 손상시키지 않으면서 개발자들이 실험하고 MetaMask를 강화할 수 있는 안전한 인터페이스를 제공한다고 생각합니다. 다른 유형의 프로젝트와 달리, 지갑은 높은 수준의 보안을 요구하므로 제3자의 새로운 기능을 통합하는 것은 항상 길고 힘든 코드 검토 및 감사 과정이며, 이는 혁신을 저해합니다. MetaMask Snaps는 MetaMask 팀이 안전한 제품을 계속 구축하면서도 외부 개발자들이 실험하고 기능을 확장할 수 있도록 합니다.
MetaMask로 Snaps를 구축하는 경험이 어떤가요?
MetaMask Snaps는 기본 MetaMask 확장을 안전하게 유지하면서 기능을 구축할 수 있게 해주는 확실한 방향이라고 생각합니다. 현재 몇 가지 문제가 있지만 매일 개선되고 있으며, 전반적으로 매우 흥미롭다고 생각합니다.
MetaMask Snaps가 당신에게 어떤 의미인가요?
MetaMask Snaps를 통해 MetaMask에 다중 인증 기능을 추가함으로써 MetaMask의 수백만 명의 일반 사용자들이 계정을 더 안전하게 관리하고 사기와 해킹의 피해자가 되는 것을 방지할 수 있기를 바랍니다. MFA는 이미 수십억 명의 Web2 사용자들에게 이를 실현하고 있으며, 저희는 이러한 안전한 모범 사례를 Web3에 도입하고자 합니다.
MetaMask Snaps와 그것이 Web3 공간에 열어주는 가능성에서 어떤 기회를 보시나요?
전반적으로 MetaMask Snaps는 MetaMask가 보안을 손상시키지 않으면서 다른 사람들이 코드베이스에 기여할 수 있도록 개방하는 현실적인 방법을 나타낸다고 생각합니다.
MetaMask Snaps를 시도하고 싶은 개발자들에게 조언이 있다면?
그냥 시도해 보세요! 조금 새로워 보일 수 있지만 지금까지 매우 접근하기 쉬웠으며, MetaMask Snaps를 위한 Consensys 디스코드 채널에서 지원이 훌륭합니다. 많은 훌륭한 개발자들이 작업하고 있으며, MetaMask Snaps를 형성하는 대화에 참여하고 싶다면 지금이 바로 구축하고 피드백을 제공할 때입니다!
MetaMask Snaps를 시작하려면:
개발자 문서를 확인하세요
MetaMask Flask를 설치하세요
MetaMask Snaps 가이드를 확인하세요
가까운 지역의 다음 해커톤에서 저희 팀을 만나보세요! 즐거운 BUIDLing ⚒️
면책 조항: MetaMask Snaps는 일반적으로 Consensys Software 이외의 제3자에 의해 개발됩니다. 제3자가 개발한 MetaMask Snaps의 사용은 본인의 재량과 위험 부담 하에 이루어지며, 그러한 활동으로 인한 손실이나 피해에 대해 전적으로 책임을 진다는 데 동의합니다. Consensys는 제3자가 개발한 MetaMask Snaps에 대해 구두 또는 서면으로 명시적이거나 묵시적인 보증을 하지 않으며, 제3자가 개발한 MetaMask Snaps에 대한 모든 책임을 부인합니다. 블록체인 관련 소프트웨어 사용에는 위험이 따르며, MetaMask Snaps를 사용할 때 이러한 위험을 전적으로 감수합니다.
AI가 번역했습니다. 오류가 있을 수 있습니다. 항상 정보를 확인하시기 바랍니다.