Consensys가 구축한 선도적인 자기 보관형 암호화폐 지갑이자 Web3로 가는 관문입니다.
모든 글 읽기ETHLisbon 해커톤 수상작

MetaMask Snaps는 MetaMask를 세계에서 가장 확장 가능한 지갑으로 만들기 위한 로드맵입니다. 개발자로서 여러분은 완전히 새로운 방식으로 MetaMask에 기능과 API를 추가할 수 있습니다. Web3 개발자들은 이러한 성장의 핵심이며, 이 시리즈는 현재 개발 중인 혁신적인 MetaMask Snaps를 소개하는 것을 목표로 합니다.
Snap 저장소: https://github.com/Tbaut/template-snap-monorepo
왜 만들었나요?
이더리움에서 트랜잭션에 서명할 때, 대부분의 사용자들이 자신이 무엇에 서명하는지 거의 알지 못한다는 문제가 있습니다. 메서드와 인수를 디코딩하는 것은 좋은 첫 번째 단계이지만, 사용자가 악의적인 컨트랙트와 상호작용할 경우 표시되는 정보가 오해를 불러일으킬 수 있습니다. 이를 보완하기 위해, 코드 색상 🟥 🟧 🟩을 활용하여 정량적 데이터를 매우 간단한 방식으로 보여주는 방법을 생각했습니다. 여러 소스에서 쉽게 검증할 수 있는 데이터를 기반으로 신뢰 점수를 표시하는 것이 핵심 아이디어입니다. 저는 다음 4가지 기준으로 시작하기로 했습니다:
스마트 컨트랙트와 전체적으로 상호작용한 사용자 수
현재 계정이 해당 컨트랙트와 상호작용한 빈도
해당 컨트랙트의 배포 기간
해당 컨트랙트 코드의 검증 여부
기술적 구현 과정을 설명해 주시겠어요?
이 Snap은 매우 단순하며 확장하기 쉽습니다. 살펴볼 전체 코드는 여기에 있습니다.
MetaMask에서 insights 탭을 클릭하면 onTransaction 함수가 호출됩니다. 그 안에서 고려하기로 결정한 각 기준을 제공하는 함수들을 호출합니다.
이 함수들은 일반적으로 API를 호출하고 결과를 처리합니다. 이해를 돕기 위해 그 중 하나를 자세히 살펴보겠습니다.
컨트랙트가 받은 총 트랜잭션 수를 기반으로 점수를 산출하는 함수를 자세히 살펴보겠습니다. 여기서는 Etherscan API를 사용하지만, 동일한 데이터를 검증하는 데 다른 API도 활용할 수 있습니다.
이제 각 기준에 대한 TrustResult가 생겼으니, 가중치를 적용할 차례입니다. 실제로 모든 기준의 신뢰 점수가 동일한 가중치를 가져야 하는 것은 아닙니다. 예를 들어, 컨트랙트와의 과거 트랜잭션 수는 비용이 수반됩니다. 사기꾼이 이를 조작하려 한다면 가스비로 ETH를 소비해야 합니다. 따라서 이 기준은 조작 비용이 더 높다고 판단되어 더 중요하게 여겨지며, 가중치 3을 부여했습니다.
마찬가지로, 컨트랙트의 배포 기간은 공격자가 우회할 수 없습니다. 높은 신뢰 점수를 얻으려면 컨트랙트를 배포한 후 공격을 시작하기 전에 일정 기간을 기다려야 합니다. 이 기준에는 가중치 2를 부여했습니다.
나머지 기준들은 상대적으로 약한 것으로 간주되어 가중치 1을 부여했습니다.
이제 스마트 컨트랙트의 신뢰 점수를 얻었으니, 이를 간단하게 표시해야 합니다. MetaMask insights API는 키-값 쌍만 표시할 수 있습니다. 키는 굵게 표시되고, 값은 일반 폰트 두께로 표시됩니다. 이모지를 활용하면 사용자에게 부담스럽지 않으면서도 수집된 모든 정보를 보여주는 인터페이스를 만들 수 있다고 생각했습니다.
신뢰 점수를 이모지로 변환하는 함수:
그리고 키-값을 보기 좋게 표시하기 위한 몇 가지 트릭이 포함된 onTransaction 함수의 반환 부분:
마지막으로, 2가지 유형의 컨트랙트를 호출하는 매우 간단한 인터페이스를 만들었습니다. 하나는 잘 알려진 Uniswap 컨트랙트이고, 다른 하나는 Remix에서 기본으로 제공되는 최근에 배포된 스토리지 컨트랙트입니다. 이 Snap을 사용하여 Uniswap 라우터 컨트랙트와 상호작용하면 다음과 같은 화면을 볼 수 있습니다:
이를 실제로 구현한다면 다음 단계는 무엇인가요?
이것은 사용자에게 신뢰를 주거나 피싱을 방지할 수 있는 정보의 극히 일부에 불과합니다. 가장 명확한 첫 번째 단계는 데이터에 더 많은 소스를 활용하는 것입니다. 컨트랙트 검증은 이미 Sourcify와 Etherscan을 사용하고 있지만, 각 기준에 대해 여러 소스를 활용하는 것이 더 좋을 것입니다.
그 다음으로, 사기꾼들이 점수를 쉽게 조작하지 못하도록 더 고도화된 알고리즘을 적용해야 합니다. 예를 들어, 컨트랙트와 트랜잭션을 수행한 고유 계정 수를 집계해야 합니다. 또한 과거에 상호작용한 계정들이 모두 하나의 출처에서 비롯된 것이 아닌지 확인하기 위해 해당 계정들에 대한 분석도 수행할 수 있습니다. 단점은 여러 신뢰 소스를 활용하여 이러한 분석을 수행하기가 더 어렵다는 점입니다.
스마트 컨트랙트의 사기 탐지에 관한 흥미로운 연구도 있으며, 이를 통합할 수 있습니다. 자세한 내용은 여기를 참조하세요.
전반적으로, 이 해킹에 대해 받은 압도적인 긍정적 반응은 사용자들이 더 많은 정보를 원하고 있음을 보여주며, 소화하기 쉬운 방식으로 제공된다는 점이 핵심적인 역할을 했다고 생각합니다.
본인에 대해 간략히 소개해 주시겠어요?
저는 ChainSafe의 소프트웨어 엔지니어이며, 이전에는 Parity에서 근무했습니다. 저는 좋은 UX에 중점을 둔 제품을 만드는 것을 좋아합니다. Web3는 저에게 훌륭한 놀이터입니다. 모든 것이 매우 복잡하기 때문에, 가능한 한 많은 사람들이 이해할 수 있도록 만드는 것은 큰 도전입니다. 저는 이 분야에서 거의 5년을 보냈으며, 많은 해커톤에 참가했지만 주로 해커보다는 자원봉사자, 멘토 또는 심사위원으로 활동했습니다. 주된 이유는 제가 완벽주의자이고 일반적으로 빠르고 지저분한 해결책을 좋아하지 않기 때문입니다 :).
MetaMask Snaps를 처음 접한 것은 언제이며, 어떤 경험이었나요?
흥미롭게도, ChainSafe의 동료들이 최초의 Snap 중 하나인 Filecoin용 Snap을 만들었습니다. 당시에 코드를 살펴봤을 수도 있지만, 더 깊이 파고들지는 않았습니다.
해킹 당시에는 insights API가 실제로 개발자들에게 제공되지 않았습니다. 리스본에서 MetaMask 팀과 이야기를 나누면서, MetaMask에 사용자 인터페이스를 추가할 수 있을 것이라고는 기대하지 않았습니다. 그들은 곧 출시될 예정이며 지금 바로 개발을 시작할 수 있다고 알려주었습니다. 실제로 이는 커스텀 빌드에서만 사용 가능했고, 문서도 아직 공개되지 않은 상태였습니다.
MetaMask Snaps가 다른 지갑과 다른 점은 무엇인가요?
탭에 커스텀 코드를 추가하면서도 해당 코드가 안전하게 실행될 수 있도록 보장하는 기능은 다양한 개선 가능성의 문을 열어줍니다. 앞으로 어떤 것들이 나올지 매우 기대됩니다.
MetaMask로 Snaps를 개발하는 경험은 어떤가요?
템플릿 모노레포 덕분에 시작하기가 매우 수월했습니다. 모든 코드를 하나의 저장소에서 작성할 수 있고, 테스트 dapp과 Snap을 모두 자동 새로고침과 함께 하나의 명령으로 실행할 수 있다는 점이 훌륭한 개발자 경험이었습니다.
Snaps는 당신에게 어떤 의미인가요?
확장 프로그램의 확장입니다. 어떤 제품도 모든 사용자의 요구를 충족할 수는 없습니다. 이 컴포저블 레이어를 추가하는 것은 특정 기능을 원하는 누구에게나 직접 만들 수 있는 훌륭한 기회입니다.
MetaMask Snaps와 Web3 공간에서 열리는 가능성에 대해 어떤 기회를 보시나요?
특히 insights에 대해 이야기하자면, 필요에 따라 무한한 커스터마이징 가능성을 열어주고 있습니다. 앞으로 더 많은 보안 관련 insights가 개발될 것이라고 확신합니다.
MetaMask Snaps를 시도하려는 개발자들에게 조언이 있다면?
모노레포를 클론하고, 매우 빠른 시작을 즐기세요.
MetaMask Snaps를 시작하려면:
개발자 문서를 확인하세요
MetaMask Flask를 설치하세요
MetaMask Snaps 가이드를 참고하세요
Twitter, GitHub discussions, Discord에서 저희와 소통하세요
가까운 지역의 다음 해커톤에서 저희 팀을 만나보세요! 즐거운 BUIDLing ⚒️
면책 조항: MetaMask Snaps는 일반적으로 Consensys Software 이외의 제3자에 의해 개발됩니다. 제3자가 개발한 MetaMask Snaps의 사용은 전적으로 사용자 본인의 판단과 위험 부담 하에 이루어지며, 그러한 활동으로 인한 손실이나 피해에 대한 책임은 전적으로 사용자에게 있음에 동의하는 것으로 간주됩니다. Consensys는 제3자가 개발한 MetaMask Snaps에 대해 구두 또는 서면을 불문하고 어떠한 명시적 또는 묵시적 보증도 하지 않으며, 제3자가 개발한 Snaps에 대한 모든 책임을 부인합니다. 블록체인 관련 소프트웨어 사용에는 위험이 수반되며, MetaMask Snaps를 사용함으로써 해당 위험을 전적으로 감수하는 것에 동의하게 됩니다.
AI가 번역했습니다. 오류가 있을 수 있습니다. 항상 정보를 확인하시기 바랍니다.