멀티 리졸버 Snap: 멀티 리졸버 문제 해결

ETHLisbon 해커톤 수상작

6분 읽기
멀티 리졸버 Snap: 멀티 리졸버 문제 해결

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

Multi-resolver Snap

Snap 저장소: https://github.com/idriss-crypto/multiresolver

Multi-resolver Snap을 개발한 이유는 무엇인가요?

Web3의 사용자 경험은 오랫동안 간과되어 왔습니다. 발전이 이루어지고 있는 분야 중 하나가 바로 계정 추상화입니다. 거의 매주 새로운 네이밍 서비스가 등장하는 것처럼 느껴집니다. 이러한 서비스들의 목표는 이 공간에서 서로 상호작용하는 방식을 단순화하는 것입니다. 이름은 지갑 주소보다 인식하기 쉽기 때문에 신원 및 평판 시스템의 기반 레이어를 구성합니다.

또한 독자적인 (네이밍) 표준은 프로젝트의 인기에 기여할 수 있습니다. 예를 들어, 어떤 프로젝트를 "x"라고 부른다고 가정해 봅시다. 이 프로젝트가 제안하는 새로운 네이밍 표준은 x-domains 또는 x-names라고 불릴 수 있습니다. 프로젝트의 성공은 자동으로 네이밍 서비스의 성장을 돕고, 네이밍 서비스의 성공은 프로젝트에도 동일한 효과를 가져다줍니다. 즉, 서로에게 이득이 되는 구조입니다. 그러나 현재 우리는 네임스페이스가 파편화된 상황에 처해 있습니다. 물론 모든 네이밍 서비스를 사용하려는 사람들도 있지만, 이는 일부 (도메인 기반) 네이밍 서비스의 제한된 네임스페이스 내에서 이름을 선점하려는 경쟁으로 이어집니다. 다른 네이밍 서비스들은 이메일, 전화번호, 또는 Twitter 사용자명이나 Instagram 핸들과 같이 사람들이 이미 보유한 더 친숙한 핸들을 사용하여 이러한 신원을 둘러싼 잠재적 시장을 없애려 합니다. 대부분의 사람들은 결국 서로 다른 네이밍 서비스에서 하나, 많아야 두 개의 핸들을 갖게 됩니다. 다양한 선택지로 인해 개발자들은 여러 네이밍 서비스 리졸버를 애플리케이션에 통합해야 합니다.

새로운 네이밍 서비스가 시장의 상당한 점유율을 차지하게 되면, 해당 네이밍 서비스 사용자를 배제하지 않기 위해 애플리케이션에도 통합되어야 합니다. 사용자 입장에서는 자신이 선택한 네이밍 서비스를 지원하는 유사한 기능의 대체 애플리케이션을 찾는 것이 번거롭습니다. 사람들이 익숙한 것을 그대로 사용할 수 있도록 하면서, 동시에 개발자들이 최고의 애플리케이션을 만드는 데 집중할 수 있는 솔루션을 제공하면 어떨까요?

Multi-resolver Snap이 바로 그 역할을 합니다.

기술적 구현 과정을 설명해 주시겠어요?

핵심 내용

이 Snap은 MetaMask Flask 10.20을 위해 개발되었습니다. 현재 버전은 endowment:network-accesssnap_confirm 권한을 사용합니다. 전자는 예비 버전에서 해석된 주소를 요청하고 Twitter ID를 Twitter 사용자명으로 변환하는 데 사용됩니다. 후자는 트랜잭션이 생성되기 전에 결과 주소를 강조 표시하는 확인 화면을 사용자에게 보여줍니다.

현재 지원되는 리졸버는 IDriss와 ENS입니다. Snap은 localhost에서 실행됩니다.

dApp 측 통합

개발자가 이 Snap, 즉 사용 가능한 모든 리졸버를 통합하려면 먼저 지갑과 Snap에 연결해야 합니다:

const connectSnap = async (
  snapId: string = defaultSnapOrigin,
  params: Record<'version' | string, unknown> = {},
) => {
  await window.ethereum.request({
    method: 'wallet_enable',
    params: [
      {
        wallet_snap: {
          [snapId]: {
            ...params,
          },
        },
      },
    ],
  });
};
복사

호출은 resolve_send 메서드를 통해 이루어지며 다음과 같이 호출할 수 있습니다:

const resolveInput = async (id_?: string) => {
  return await window.ethereum.request({
    method: 'wallet_invokeSnap',
    params: [
      defaultSnapOrigin,
      {
        method: 'resolve_send',
        identifier: id_,
      },
    ],
  });
};
복사

이는 해석된 주소를 반환합니다. 여기서 id_는 사용자가 전송 필드에 입력하는 식별자입니다.

새로운 multiChainProvider를 사용하면 필요한 권한으로 지갑에 연결하는 것만큼 간단하게 Snap에 연결할 수 있습니다:

import { MultiChainProvider } from "@metamask/multichain-provider";

const provider = new MultiChainProvider();
const { approval } = await provider.connect({
  requiredNamespaces: {
    eip155: {
      chains: [chains],
      methods: [
        permissions
      ],
    },
  },
});
const session = await approval();
복사

앞서 언급한 resolve_send 메서드는 eth_sendTransaction으로 이름을 변경할 수 있어, 앱이 기존 통합을 변경하지 않고도 Multi-resolver Snap을 사용할 수 있습니다. eth_sendTransaction이 호출될 때마다 Snap이 개입하여 트랜잭션을 생성하기 전에 입력값을 해석합니다. 애플리케이션은 사용자 입력이 주소와 일치하지 않을 때 오류를 발생시키는 대신 String 타입의 입력을 허용해야 합니다. 나머지는 Snap이 처리합니다!

다음 단계로 구현할 계획이 있다면 무엇인가요?

다음 단계로, 이 Snap은 다른 개발자들이 버그를 찾고, 코드를 개선하며, 자신만의 커스텀 리졸버를 추가할 수 있도록 오픈소스로 공개될 예정입니다. 오픈소스화는 이 Snap의 진정한 잠재력을 열어줄 것입니다. 단 한 명의 개발자나 단체가 새롭게 등장하는 모든 네이밍 서비스를 통합할 필요가 없어집니다. contribute.md 파일이 이 과정을 촉진합니다. 또한 MetaMask Snaps 팀의 추가 개발 사항도 지속적으로 추적될 예정입니다.

구체적으로, 두 가지 사항이 이 Snap에 크게 도움이 됩니다:

  1. 트랜잭션이 실행되기 전 추가적인 snap_confirm 호출을 제거하기 위한 계정 간 전송에 대한 endowment:transaction-insight 권한,

  2. MetaMask의 UI 주입 기능. 목표는 사용자가 웹사이트에 연결하지 않고도 multi-resolver를 활용할 수 있도록 전송 필드에 Snap을 구현하는 것입니다.

마지막으로, IDriss 리졸버와의 완전한 통합을 목표로 합니다. 완전한 통합을 통해 사용자는 IDriss 북에 등록하지 않고도 이메일, 전화번호, Twitter 사용자명으로 암호화폐와 NFT를 전송할 수 있게 됩니다.

본인과 팀에 대해 간략히 소개해 주시겠어요?

저는 Lennard이며, 2017년부터 블록체인 분야에 관심을 가져왔습니다. 1년 이상 이메일, 전화번호, Twitter 사용자명을 지갑 주소에 분산 매핑하는 서비스인 IDriss를 공동 창업하여 개발해 왔습니다. 보다 넓은 관점에서, 저는 더 사용하기 쉬운 Web3를 위한 도구를 만드는 데 집중하고 있으며, 이것이 이 Snap을 개발하게 된 동기입니다.

MetaMask Snaps를 처음 접하게 된 계기와 그 경험은 어떠셨나요?

Snaps 팀은 올해(2022년) 컨퍼런스에서 매우 활발하게 활동하고 있어, 여러 차례 만날 기회가 있었습니다. 코드베이스를 처음 접한 것은 파리에서 열린 EthCC 2022에서 그들의 발표 이후였습니다. 기능은 아직 제한적이었지만 문서화가 이미 유망했으며, MetaMask Snaps의 미래에 대해 매우 기대가 큽니다.

MetaMask Snaps가 다른 지갑과 다른 점은 무엇인가요?

지갑 개발에 외부 기여자를 포함하는 유사한 접근 방식을 아직 본 적이 없습니다. 일부 다른 지갑들이 코드를 오픈소스로 공개했지만, Snaps는 개발자들이 MetaMask의 기능을 직접 확장할 수 있게 합니다. 이 접근 방식은 더 잘 유지될 수 있기 때문에 다른 프로젝트들도 채택할 것이라고 확신합니다.

MetaMask로 Snaps를 개발하는 경험은 어떠셨나요?

해커톤 기간 동안 이 Snap을 개발하는 것은 훌륭한 기회였습니다. MetaMask Snaps 팀이 함께 있어 질문이 생길 때마다 도움을 받을 수 있었습니다. 아직 아쉬운 점은 MetaMask의 UI를 커스터마이징하는 기능이 부족하다는 것입니다. 또한 일부 의존성 문제는 디버깅하기 어려워 개발 시간의 대부분을 차지합니다.

MetaMask Snaps는 당신에게 어떤 의미인가요?

Snaps는 개발자들이 퍼미션리스 방식으로 자신의 프로젝트나 아이디어를 MetaMask에 직접 통합할 수 있는 플레이그라운드를 제공합니다. 저에게 이것은 사용자들이 이미 보유한 도구(지갑)를 통해 더 많은 혜택을 갑자기 누릴 수 있게 되면서 모든 프로젝트의 성장이 가속화될 수 있음을 의미합니다.

MetaMask Snaps와 그것이 Web3 공간에 열어주는 가능성에서 어떤 기회를 보시나요?

Snaps는 트랜잭션 인사이트를 통해 사기를 방지하고, 키링을 통해 더 네트워크 포용적인 경험을 만들며, 커스텀 리졸버와 UI 개선을 결합하여 더 사용자 친화적인 Web3 경험을 가능하게 합니다. 이 모든 것이 함께 더 많은 사람들을 이 공간으로 이끌 것입니다.

MetaMask Snaps를 시도하고자 하는 개발자들에게 조언이 있다면요?

해커톤에 참가하세요! 팀과 직접 소통하고 즉각적인 피드백을 받을 수 있는 최고의 방법입니다.

MetaMask Snaps로 개발하기

MetaMask Snaps를 시작하려면:

  1. 개발자 문서를 확인하세요

  2. MetaMask Flask를 설치하세요

  3. MetaMask Snaps 가이드를 참고하세요

  4. Twitter, GitHub 토론, Discord에서 저희와 소통을 유지하세요

가까운 지역의 다음 해커톤에서 저희 팀을 만나보세요! 즐거운 BUIDLing ⚒️

면책 조항: MetaMask Snaps는 일반적으로 Consensys Software 이외의 제3자에 의해 개발됩니다. 제3자가 개발한 MetaMask Snaps의 사용은 전적으로 귀하의 재량과 위험 부담 하에 이루어지며, 그러한 활동으로 인해 발생하는 손실이나 피해에 대한 책임은 전적으로 귀하에게 있습니다. Consensys는 제3자가 개발한 MetaMask Snaps에 대해 구두 또는 서면을 불문하고 어떠한 명시적 또는 묵시적 보증도 하지 않으며, 제3자가 개발한 Snaps에 대한 모든 책임을 부인합니다. 블록체인 관련 소프트웨어 사용에는 위험이 수반되며, MetaMask Snaps를 사용함으로써 귀하는 해당 위험을 전적으로 감수하게 됩니다.

AI가 번역했습니다. 오류가 있을 수 있습니다. 항상 정보를 확인하시기 바랍니다.

번역 평가하기
  • MetaMask
    MetaMask

    Consensys가 구축한 선도적인 자기 보관형 암호화폐 지갑이자 Web3로 가는 관문입니다.

    모든 글 읽기