Mulle 로고 Mulle

세상의 모든 투자를 GIWA에서

GIWA의 계정 인프라(EIP-7702 · Dojang KYC) 위에서, 투자자는 ETH 없이 서명만으로 외부 체인 자산에 투자합니다.

라이브 데모 ↗ GIWA Sepolia 91342 Robinhood Testnet 46630 컨트랙트 4개 verified

01 · Overview

문제와 접근

온체인 투자에는 세 가지 진입 장벽이 있습니다. 투자를 시작하려면 가스 토큰이 필요하고, 자산은 다른 체인에 있으며, RWA에 필요한 KYC는 서비스마다 반복됩니다. Mulle은 이를 각각 표준으로 해결합니다.

장벽접근표준
가스투자자는 서명만 하고, 가스는 스폰서가 대납EIP-7702
크로스체인요청과 정산을 분리한 비동기 볼트, 체결은 릴레이어가 외부 체인에서 수행ERC-7540
KYC체인 레벨 KYC(Dojang attestation)를 볼트 진입 시점에 검증Dojang (EAS)
투자자는 로그인과 서명만으로 전체 플로우를 진행합니다. 투자자 지갑의 ETH 잔액은 0입니다.

02 · Architecture

아키텍처

프론트엔드는 서명 데이터를 릴레이 API에 전달하고, 이후의 모든 조율은 볼트의 온체인 이벤트와 상태를 통해 이루어집니다. 프론트엔드와 백엔드가 별도로 상태를 공유하지 않으므로, 릴레이어가 중단되어도 요청은 볼트에 pending 상태로 유지되고 재시작 시 최근 블록을 다시 스캔해 처리됩니다.

flowchart LR
  subgraph B["브라우저 — 서명만"]
    FE["웹 프론트엔드 + 임베디드 지갑
EIP-712 · 7702 authorization 서명"] end subgraph R["릴레이어 — Node"] RELAY["Sponsor Relay API
POST /relay · /setup"] SETTLE["Settlement Worker
이벤트 폴링 → 외부 체결 → fulfill"] NAV["NAV Oracle · 60s"] end subgraph G["GIWA Sepolia"] ACC["MulleAccount
7702 위임 · ERC-7821 배치"] VAULT["MulleVault
ERC-7540 비동기 볼트"] KYC["DojangKyc → DojangScroll"] end subgraph X["Robinhood Testnet"] V4["Uniswap v4
TSLA / USDC 풀"] end FE -- "서명 페이로드" --> RELAY RELAY -- "스폰서 tx" --> ACC ACC --> VAULT VAULT -- "KYC 게이트" --> KYC SETTLE -- "이벤트 감시" --> VAULT SETTLE -- "실제 매수·매도" --> V4 SETTLE -- "fulfill" --> VAULT NAV -- "postNav" --> VAULT

03 · Account

계정 추상화 — EIP-7702

투자자의 EOA는 최초 1회 authorization 서명으로 MulleAccount 구현체에 위임됩니다. 이후 모든 실행은 다음 순서로 진행됩니다.

  1. 투자자가 실행 내용에 EIP-712 서명 — SponsoredExecution { mode, executionData, nonce }
  2. 프론트엔드가 서명 데이터를 POST /relay로 전달 — 스폰서 키는 서버에만 보관
  3. 스폰서가 트랜잭션을 구성해 서명·제출 — 최초 실행 시 authorizationList 포함
  4. MulleAccount가 온체인에서 서명과 nonce를 검증한 뒤 배치를 투자자 계정으로 실행

ERC-4337의 EntryPoint · bundler · paymaster 역할을 컨트랙트 하나와 서버 하나로 구성한 형태입니다. 배치 실행 인터페이스는 ERC-7821 표준을 따르므로, 프로덕션에서는 위임 대상을 ERC-7579 모듈러 계정으로 교체할 수 있습니다.

릴레이 API는 투자자가 서명한 실행만 제출할 수 있습니다. 서명과 nonce는 온체인에서 검증되고, 동일 서명의 재사용은 nonce 증가로 차단됩니다.

04 · Vault

비동기 볼트 — ERC-7540

크로스체인 정산에는 지연이 따르므로, 예치와 출금은 request → fulfill → claim 3단계의 비동기 플로우로 처리됩니다.

sequenceDiagram
  participant U as 투자자 (서명만)
  participant R as 릴레이어
  participant V as MulleVault (GIWA)
  participant X as Uniswap v4 (외부 체인)
  U->>R: EIP-712 서명 (approve + requestDeposit)
  R->>V: 스폰서 tx 제출
  V->>V: KYC 체크 · 에스크로 · requestId 발급
  R->>V: DepositRequest 이벤트 감지
  R->>X: USDC → TSLA 실제 매수
  R->>V: fulfillDeposit(requestId, shares)
  U->>R: EIP-712 서명 (claim)
  R->>V: 스폰서 tx 제출 → shares 민팅
      

출금은 동일한 구조로 처리됩니다 — 외부 체인 매도 후 fulfillRedeem, 정산금 수령.

05 · KYC

체인 레벨 KYC — Dojang

투자자(7702 배치) → Dojang Faucet.payAndIssueEAS() → attestation이 DojangScroll(GIWA 공식 레지스트리)에 기록 → 볼트가 예치 시 DojangKyc.isVerified() 조회

faucet 호출은 7702 배치로 실행되므로 msg.sender가 투자자 본인이며, attestation은 투자자 주소로 발급됩니다. 수수료와 가스는 스폰서가 부담합니다.

DojangKyc는 유효한 attester 목록(메인넷 Upbit, 테스트넷 faucet)을 관리하고, Dojang이 없는 환경에서는 폴백 검증을 제공합니다. 볼트는 isVerified(address) 인터페이스만 참조하므로, KYC 정책이 변경되어도 볼트 코드는 영향을 받지 않습니다.

06 · Relayer

릴레이어

릴레이어는 현재 GIWA 테스트넷과 외부 체인 사이의 임시 브리지 역할을 합니다. 양쪽 체인에 유동성을 보유하고, 예치 시 외부 체인에서 매수한 뒤 GIWA의 에스크로를 회수하며, 출금 시 매도 대금을 GIWA에서 정산합니다. 장애 상황(RPC 오류, nonce 경합, 프로세스 재시작)에 대비해 다음 장치를 갖추고 있습니다.

장치내용
Redrive미체결 요청은 컨트랙트에서 소진이 확인될 때까지 매 폴링마다 재시도됩니다
Backfill재시작 시 최근 약 12시간의 블록을 스캔해 다운타임 중 요청을 회수합니다
체결 idempotency외부 체결 결과를 fulfill 전에 기록해, 재시도 시 중복 체결을 방지합니다
Nonce 직렬화매니저와 스폰서 트랜잭션을 각각 단일 nonce 레인으로 순차 처리합니다
NAV 오라클외부 시세를 60초마다 볼트에 기록해, GIWA 위에서 포지션을 평가할 수 있습니다

체결은 Robinhood Chain 테스트넷의 Uniswap v4 풀(TSLA/USDC)에서 실행됩니다. 시세는 PoolManager의 extsload로 slot0의 sqrtPriceX96을 조회해 계산합니다.

07 · Trust Assumptions

신뢰 가정과 로드맵

항목현재 (해커톤)프로덕션 방향
브리지단일 릴레이어 (trusted solver)인텐트·솔버 네트워크 또는 정식 브리지 메시징
계정자체 MulleAccount (미니멀)ERC-7579 모듈러 계정으로 위임 대상 교체
스폰서단일 서버 + 단일 키ERC-4337 paymaster · bundler 인프라
KYCDojang + 데모 allowlist 폴백폴백 제거, Upbit attester 단독
NAV단일 서버 오라클검증 가능한 오라클 피드

검증 — Foundry 테스트 26개(요청 단위 체결, 서명 재사용 차단, KYC 게이트 등), 예치부터 출금까지 전체 플로우의 E2E 테스트, 배포 컨트랙트 4개 소스 검증.

Appendix

배포 주소 — GIWA Sepolia (91342)

컨트랙트주소 (전부 verified)
MulleVault · ERC-7540 0x8A78E6Aa63704471e4CFB11504880Ecd4F7C126A
MulleAccount · 7702 위임 대상 0x736a0703eaF453AdCACDcF1cfe103fA7Cf86a7F0
DojangKyc 0x260d335834a3A9656eaF9A0C050eB004ad9BEd5C
mUSD · 정산 자산 0x970F3c5D468a0F6Ae608A51317a9189fa48770e5
DojangScroll · GIWA 공식 0xd5077b67dcb56caC8b270C7788FC3E6ee03F17B9
Dojang Faucet · GIWA 공식 0x63CCe2b569A7bC35895ee24306c1512fefc06121

김상욱Smart Contract Engineer — MulleVault · MulleAccount · DojangKyc
원알렉스Backend — 크로스체인 릴레이어 · 스폰서 relay API
김기황Web3 Product & Frontend Engineer — 투자 플로우 UI
윤성권DevOps / Infra Engineer — 인프라 · 배포 자동화
샴쇼드 로지코프Product Owner — 프로덕트 전략 · BM · GTM

상세 소개: github.com/mulle-protocol/team