콘텐츠로 건너뛰기

Composooor Snap: 하이브리드 온체인 및 오프체인 앱을 위한 컴포저빌리티 지원 도구

ETHDenver 해커톤 수상작

6분 읽기
Composooor Snap: 하이브리드 온체인 및 오프체인 앱을 위한 컴포저빌리티 지원 도구

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

Composooor Snap

Snap 저장소: https://github.com/kairos-loan/composooor/tree/main/packages/snap

왜 만들게 되었나요?

스마트 컨트랙트 기반 금융 프로토콜 및 기타 블록체인 앱을 개발하면서 반복적인 패턴을 발견했습니다. 블록체인의 기술적 한계로 인해 점점 더 많은 앱들이 컨트랙트 로직에서 검증되는 오프체인 리소스(연산이나 데이터 스토리지 등)를 활용하고 있습니다. 오더북, 에어드롭의 머클 트리, 정렬된 목록, 토큰 속성 등이 그 예입니다.

이러한 경우 중요한 정보가 오프체인에 저장되거나 연산되지만, 온체인 상호작용에 활용되어 큰 영향을 미칩니다. 이를 가능하게 하기 위해 컨트랙트는 해시나 서명과 같은 다양한 암호화 기법을 사용하여 유효성을 검증합니다. 그러면 Dapp은 컨트랙트에 필요한 관련 정보를 제공할 수 있는 특정 로직을 갖춘 프론트엔드/API를 필요로 합니다. 안타깝게도 이 패턴은 컴포저빌리티를 저해합니다. 예를 들어, AWS에서 제공되는 독점 오더북에 의존하는 DeFi 앱은 다른 스마트 컨트랙트와 쉽게 통합될 수 없습니다.

이러한 한계에 지쳐 모든 앱이 무엇과도 쉽게 통합될 수 있도록 하는 표준과 인프라를 만들기로 결정했습니다. 통합을 더 쉽게 만드는 것이 이 분야에 많은 기회를 열어줄 것이라고 굳게 믿습니다.

기술적 구현에 대해 설명해 주시겠어요?

소개

Composooor MetaMask Snap은 웹 클라이언트, 하나 이상의 오프체인 임의 리소스, 그리고 Composooor 표준을 구현하는 임의 수의 스마트 컨트랙트 간의 통신을 표준화하고 처리하는 데 사용됩니다. 모든 표준 리소스는 npm 패키지를 통해 쉽게 접근할 수 있으며, 대부분의 경우 Composooor의 강력한 기능을 단 한 줄의 코드로 사용할 수 있습니다.

단계별 설명

  • 트랜잭션을 준비할 때, MetaMask Snap 지갑은 원하는 온체인 컨트랙트에 가스 추정 호출을 요청합니다.

  • 컨트랙트가 작동하기 위해 오프체인에서 수행된 데이터나 연산이 필요한 경우, 누락된 데이터를 찾는 방법에 대한 사양이 포함된 표준화된 오류와 함께 revert됩니다. 표준화된 오류는 다음과 같습니다.

error MissingOffchainDataError(
    address registryAddress,
    string url,
    bytes abiArgs
);
복사

이 오류는 컨트랙트가 오프체인 리소스에 접근하기 위해 반드시 상속해야 하는 ComposooorRegister에 의해 노출됩니다.

  • MetaMask Snap 지갑은 이 오류를 디코딩하고, 탈중앙화 프로토콜이나 API에서 가져오거나, 해당 소스에서 가져온 코드를 실행하여 누락된 데이터를 찾습니다. ETHDenver 해커톤에서는 가장 간단한 옵션인 API 호출을 구현했습니다.

const responseData = await fetch(error.url + `?args=${error.abiArgs}`);
  • 그런 다음 지갑은 가스를 다시 추정하며, 이번에는 원하는 메서드를 호출하기 전에 가져온 데이터를 해당 컨트랙트의 표준화된 레지스트리에 저장하는 명령을 추가합니다.

const callToRegisterData: Call = {
    callee: error.registryAddress,
    functionSelector: utils.id('recordParameter(bytes)').slice(0, 10) as PrefixedBy0x,
    data: defaultAbiCoder.encode(['bytes'], [data]) as PrefixedBy0x,
};
복사
  • 트랜잭션 실행 중에 동일하거나 다른 컨트랙트가 작동하기 위해 또 다른 오프체인 리소스를 필요로 할 수 있습니다. 이 경우 지갑은 오프체인 리소스가 더 이상 필요하지 않을 때까지 트랜잭션 준비 단계를 반복합니다. 이를 통해 풍부한 오프체인 리소스에 접근하는 프로토콜 간 무한한 컴포저빌리티가 가능해집니다.

  • 가스 추정이 성공하면 사용자에게 준비된 트랜잭션의 서명을 요청하며, 필요한 모든 리소스가 포함된 상태로 성공적으로 실행됩니다.

Composooor 지원 앱을 통합하거나 직접 만드는 방법

ETHDenver에서 Composooor가 일반적인 하이브리드 앱 패턴의 코드 복잡성을 최소 80~90% 줄이는 방법을 시연했습니다.

스마트 컨트랙트 측면

import "@composooor/ComposooorRegister.sol";로 임포트합니다. 사용 예시:

contract Example is ComposooorRegister {
    function action() public {
        bytes memory data = consumeParameter("http://api.api/number", abi.encode(arguments));
        (uint256 offchainNumber) = abi.decode(data, (uint256));
        (...)
    }
}
복사

ComposooorRegister는 Solidity로 작성되었습니다.

프론트엔드 측면

Composooor Snap은 프론트엔드 측면에서 가장 큰 효과를 발휘합니다. 일반적으로 200줄 이상의 통합 코드를… 0줄로 줄여줍니다! Snap 로직이 모든 것을 처리합니다.

데모

React-wagmi Dapp 형태로 완전히 통합된 데모를 제작했습니다. 이 Dapp은 NFT 가격의 일부만 선불로 지불하고 나머지는 나중에 상환할 대출을 받아 NFT를 구매할 수 있게 해줍니다. 온체인에서는 트랜잭션에 8개의 컨트랙트가 관여합니다. 그 과정에서 NFT 마켓플레이스는 NFT 판매자의 오프체인 서명을 요구합니다. Composooor Snap은 트랜잭션의 복잡성에도 불구하고 오류를 감지하고 디코딩하여 (API에서 가져온 후) 온체인으로 정보를 제공할 수 있습니다. Composooor 덕분에 이 앱의 구현이 훨씬 간단해졌습니다.

이를 구현한다면 다음 단계는 무엇인가요?

개발자들의 시간을 크게 절약하고 새로운 블록체인 사용 사례를 가능하게 하는 이러한 혁신의 일부는 바로 도입입니다. 우리는 Composooor Snap을 백그라운드에서 활용하는 여러 사용자 대면 앱을 구현하고 배포할 것입니다. 이러한 앱들이 주목을 받게 되면, 다른 앱들과 연동하는 파트너십을 맺어 간소화된 개발 경험을 기반으로 한 도입의 선순환을 시작할 것입니다. 그 과정에서 Snap과 표준은 원래의 비전에 맞는 보다 범용적이고 표준화된 제품으로 발전할 것입니다. 즉, 탈중앙화와 사용 사례에 구애받지 않는 방식으로 블록체인을 임의의 리소스에 동기적으로 연결하는 것입니다.

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

저희는 보다 자본 효율적인 방식으로 NFT를 담보로 사용하는 대출 프로토콜을 개발하는 팀입니다. 오더북과 같은 오프체인 컴포넌트를 활용하는 아키텍처를 선택했습니다. 이 선택은 자본 효율성과 사용자 경험을 향상시키지만 다른 프로토콜과의 상호운용성을 제한할 수 있습니다. 그래서 다른 프로토콜과의 쉬운 통합을 가능하게 하는 Composooor Snap을 개발했습니다. 이 라이브러리가 다른 팀들에게도 활용되어 새로운 가능성을 열고 그들의 작업을 더 쉽게 만들어 주기를 바랍니다.

MetaMask Snaps와 Web3 공간에서 열리는 가능성에 대해 어떤 기회를 보시나요?

지갑은 Web3의 주요하고 필수적인 핵심 구성 요소 중 하나이며, MetaMask는 대부분의 사용자에게 사실상의 기본 지갑입니다. 개발자들이 이를 임의의 새로운 사용 사례에 활용할 수 있도록 하는 것은 매우 중요하다고 생각합니다. 핵심은 지갑이 참여해야 할 모든 혁신을 예측하거나 준비할 수 없다는 것입니다. 따라서 지갑에 대한 접근권을 부여하는 것은 비트코인에서 이더리움으로의 전환과 같습니다. 기술 위에 임의의 사용 사례를 가능하게 하면 예측할 수 없는 기하급수적인 복리 효과가 발생합니다. 이 질문에 답하기는 어렵지만, 제가 가장 기대하는 것은 지갑이 단순히 메시지에 서명하는 것 이상을 수행하고, 사용자에게 맥락이 풍부한 방식으로 상호작용을 최적화하는 앱들입니다.

MetaMask Snaps를 시도하려는 개발자들에게 공유하고 싶은 조언이 있나요?

제공된 템플릿을 활용하고, 필요한 모든 사용자 승인을 올바르게 요청하되 가능한 한 최소한으로 사용하세요.

MetaMask Snaps로 개발하기

MetaMask Snaps를 시작하려면:

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

  2. MetaMask Flask를 설치하세요.

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

  4. Twitter, GitHub discussions, Discord에서 저희와 소통하세요.

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

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

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

번역 평가하기

이 글의 작성자:

  • MetaMask

    MetaMask(구 Consensys Software Inc)은 세계 최대의 자기 수탁형 금융 플랫폼으로, 암호화폐와 전통 자산 모두에 걸쳐 자산을 보유하고, 사용하고, 저축하고, 불릴 수 있는 단일 공간을 제공합니다. MetaMask는 결제, 저축, 투자, 디지털 자산을 하나의 seamless한 경험으로 통합하는 소비자 플랫폼을 구축하고 있습니다. 세계에서 가장 널리 사용되는 자기 수탁형 지갑에서 성장한 MetaMask는 약 190개국에 걸쳐 사용자가 자신의 자금과 자산을 직접 통제할 수 있도록 합니다. MetaMask는 2016년부터 이더리움의 성장에 핵심적인 역할을 해왔습니다. 오늘날 MetaMask는 블록체인 경제의 중심에 자리하며, 오픈 머니(Open Money)를 위한 운영 체제를 구축하고 사람들이 자신의 금융 생활을 완전히 주도할 수 있도록 하고 있습니다.

    모든 글 읽기