---
title: "ERC-4337 스마트 컨트랙트 지갑은 어떻게 작동할까?"
description: "ERC-4337을 준수하는 스마트 컨트랙트 지갑의 작동 방식 알아보기"
---

# ERC-4337 스마트 컨트랙트 지갑은 어떻게 작동할까?

[Account Abstraction (ERC-4337)](https://www.alchemy.com/overviews/what-is-account-abstraction)을 사용하는 스마트 컨트랙트 지갑은 EOA(Externally Owned Address) 지갑처럼 단일 개인키로 관리되는 지갑이 아니라 스마트 컨트랙트로 관리되는 지갑을 생성합니다.

스마트 컨트랙트 지갑의 프로그래밍 가능한 특성은 다양한 새로운 사용 사례의 개발을 가능하게 합니다. 보안이나 익명성을 해치지 않으면서 복잡성을 줄임으로써, 스마트 컨트랙트 지갑은 다음 세대 블록체인 사용자들의 온보딩을 촉진하는 데 도움이 될 것입니다.

<CalloutBlock>
  앱에 [임베디드 스마트 컨트랙트
  지갑](https://www.alchemy.com/smart-wallets)을 추가하고 싶으신가요? 엔터프라이즈급 Embedded Accounts와 수직 통합된 AA 인프라를 사용하여 시드 문구, 가스, 마찰 없이 사용자를 온보딩하세요.
</CalloutBlock>

## **스마트 컨트랙트 지갑이란?**

[스마트 컨트랙트 지갑](https://www.alchemy.com/dapps/best/smart-contract-wallets)은 스마트 컨트랙트를 사용하여 디지털 자산(예: 암호화폐, NFT 등)을 저장하고 관리합니다. 스마트 컨트랙트 지갑은 account abstraction의 기반이 됩니다. 즉, 다양한 Ethereum 계정 유형을 단일 유형으로 통합하는 과정으로, 계정의 제어권을 네트워크로부터 '추상화'하여 스마트 컨트랙트로 정의하는 것입니다.

**ERC-4337을 사용하는 스마트 컨트랙트 지갑의 몇 가지 예시:**

1. Soul Wallet
1. Candide
1. UniPass
1. Castle
1. Openfort

ERC-4337을 사용하지 않는 두 가지 주요 스마트 컨트랙트 지갑은 **Safe**와 **Argent**입니다.

## **컨트랙트 계정(CA)이란?**

스마트 컨트랙트라고도 불리는 컨트랙트 계정은 당사자 간의 정보 교환을 관리하는 코드를 포함합니다. 컨트랙트 계정은 모든 DeFi 프로토콜, NFT 컬렉션, ERC-20 토큰에서 사용됩니다.

컨트랙트의 모든 비즈니스 로직과 상태 변수는 온체인에 저장됩니다. 스마트 컨트랙트의 상태와 코드가 온체인에 저장되기 때문에, 이를 배포하는 외부 소유 계정이 수수료를 지불해야 합니다.

**참고**: web3 프로그래밍에는 '스마트 컨트랙트 팩토리' 패턴이 있는데, 이는 컨트랙트가 미리 정의된 인터페이스를 통해 다른 컨트랙트를 배포할 수 있는 패턴입니다. 이 경우에도, 이를 시작하는 트랜잭션은 반드시 EOA로부터 시작되고 EOA가 비용을 지불해야 합니다.

### 컨트랙트 계정은 **외부 소유 계정(EOA)**과 어떻게 다르게 작동하는가?

스마트 컨트랙트 계정과 EOA 계정의 주요 차이점은 스마트 컨트랙트 계정이 로직을 포함할 수 있다는 것입니다. EOA 계정만이 트랜잭션을 시작할 수 있기 때문에, 스마트 컨트랙트 계정은 Bundlers의 EOA 계정에 의존하여 사용자 오퍼레이션을 블록체인에 게시되는 단일 트랜잭션으로 묶습니다.

현재 Ethereum 프로토콜에서, EOA는 컨트랙트 호출이든 가치 전송이든 트랜잭션을 시작할 수 있는 유일한 계정 유형입니다. 컨트랙트 계정이 다른 컨트랙트 계정을 호출하는 경우에도, 트랜잭션의 출처는 항상 외부 소유 계정에서 비롯됩니다.

다음은 컨트랙트 계정과 EOA 계정을 비교한 것입니다:

<EmbeddedTable
  table={{
    columns: [
      { key: "1", width: 200, title: "EOA", dataType: "object" },
      { key: "2", width: 200, title: "CONTRACTS", dataType: "object" },
    ],
    data: [
      {
        "1": { title: "<p>Controlled by a human, through a private key</p>", tooltip: "", icon: "" },
        "2": { title: "<p>No private key. Governed by its own code</p>", tooltip: "", icon: "" },
        id: 0,
      },
      {
        "1": { title: "<p>Can initiate transactions</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Can never be the origin of a transaction initiation</p>", tooltip: "", icon: "" },
        id: 1,
      },
      {
        "1": { title: "<p>Does not contain code</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Contains code and state, stored in storage</p>", tooltip: "", icon: "" },
        id: 2,
      },
      {
        "1": { title: "<p>Created offchain for free</p>", tooltip: "", icon: "" },
        "2": { title: "<p>Created onchain for a cost, incurred by the deployer</p>", tooltip: "", icon: "" },
        id: 3,
      },
    ],
  }}
/>

그렇다면 스마트 컨트랙트 지갑은 스스로 트랜잭션을 시작할 수 없는데 어떻게 트랜잭션을 실행할까요?

## ERC-4337 스마트 컨트랙트 지갑의 작동 방식

스마트 컨트랙트 지갑은 트랜잭션을 시작할 수 없기 때문에, EOA 지갑에 의해 호출되어야 합니다. 이 과정은 여러 [Account Abstraction 인프라 제공업체](https://www.alchemy.com/account-abstraction)(예: Bundlers)와 스마트 컨트랙트(예: EntryPoint)에 의해 지원됩니다.

<ExternalVideo
  url="https://youtu.be/FjK5rYznJjU?si=0e-DgU5kxxxOwaVg"
  provider="youtube"
  providerUid="FjK5rYznJjU"
/>

**스마트 컨트랙트 지갑 트랜잭션의 일반적인 흐름은 다음과 같습니다:**

1. 사용자가 [UserOperation](https://www.alchemy.com/overviews/user-operations)을 실행하고자 합니다
1. UserOperations가 "대체 mempool"로 전송됩니다
1. EOA 지갑을 가진 [Bundler](https://www.alchemy.com/overviews/what-is-a-bundler)가 모든 UserOperations를 묶어서 EntryPoint 컨트랙트로 전송합니다
1. EntryPoint 컨트랙트가 모든 UserOperations를 검증하고 실행합니다
1. UserOperations를 묶은 EOA 지갑은 사용자들을 대신해 지출한 ETH를 사용자의 지갑 또는 [Paymaster](https://www.alchemy.com/overviews/what-is-a-paymaster)로부터 상환받습니다

<ImageBlock
  src="https://media.alchemy.com/1703265387-how-user-operations-are-bundled-for-4337.jpeg"
  alt="UserOps가 번들링, 검증, 실행되는 과정을 보여주는 다이어그램."
  width={960}
  height={540}
  caption="UserOps가 번들링, 검증, 실행되는 과정을 보여주는 다이어그램."
/>

스마트 컨트랙트 지갑의 작동 방식을 기술적 관점에서 이해하는 것은 어려울 수 있지만, 최종 사용자 입장에서는 [스마트 컨트랙트 지갑이 EOA 지갑에 비해 프로그래밍 가능성 및 소셜 복구와 같은 기능 등 여러 개선점을 제공합니다](https://www.alchemy.com/overviews/smart-contract-wallet-benefits).

### 스마트 컨트랙트 지갑 작동 방식을 배우기 위한 추가 자료

Account Abstraction의 각 구성 요소가 어떻게 작동하는지에 대한 자세한 내용은, Alchemy의 Account Abstraction Infrastructure 엔지니어링 팀 소속인 **David Philipson**이 작성한 "You Could Have Invented Account Abstraction" 시리즈를 참고하세요.

1. [UserOps, Bundlers, and the EntryPoint Contract](https://www.alchemy.com/overviews/what-is-account-abstraction)
1. [Sponsoring Gas Using Paymasters](https://www.alchemy.com/overviews/what-is-account-abstraction-paymasters)
1. [Creating Smart Contract Wallets](https://www.alchemy.com/overviews/what-is-account-abstraction-wallet-creation)
1. [Aggregating Signatures](https://www.alchemy.com/overviews/account-abstraction-aggregate-signatures)

## 자주 묻는 질문

### 스마트 컨트랙트 지갑이란 무엇인가요?

스마트 컨트랙트 지갑은 단일 개인키 대신 스마트 컨트랙트를 사용하여 암호화폐와 NFT 같은 디지털 자산을 저장하고 관리하며, account abstraction의 기반 역할을 합니다.

### ERC-4337 스마트 컨트랙트 지갑은 어떻게 작동하나요?

ERC-4337 지갑은 사용자가 UserOperations를 생성하여 대체 mempool로 전송하면, bundler들이 이를 수집하여 검증 및 실행을 위해 EntryPoint 컨트랙트에 제출하고, 이후 지갑 또는 Paymaster로부터 상환받는 흐름을 사용합니다.

### 스마트 컨트랙트 계정과 EOA 계정의 차이점은 무엇인가요?

스마트 컨트랙트 계정은 프로그래밍 가능한 로직을 포함하지만 스스로 트랜잭션을 시작할 수 없는 반면, EOA 계정은 트랜잭션을 시작할 수 있지만 프로그래밍 가능한 기능이 없습니다.

### UserOperations란 무엇인가요?

UserOperations는 사용자가 생성하는 트랜잭션 요청으로, 대체 mempool로 전송되어 bundler들이 EntryPoint 컨트랙트를 통한 처리를 위해 수집합니다.

### ERC-4337에서 bundler의 역할은 무엇인가요?

Bundler는 EOA 지갑을 가진 노드로, 대체 mempool에서 UserOperations를 수집하여 묶은 후, 검증 및 실행을 위해 EntryPoint 컨트랙트에 제출합니다.

### EntryPoint 컨트랙트란 무엇인가요?

EntryPoint 컨트랙트는 bundler가 제출한 묶인 UserOperations를 검증하고 실행하는 온체인 스마트 컨트랙트입니다.

### 스마트 컨트랙트 지갑도 가스 수수료가 필요한가요?

스마트 컨트랙트 지갑은 Paymaster를 사용하여 가스 수수료를 지원받을 수 있으며, 이를 통해 사용자가 직접 가스를 지불할 필요가 없는 가스리스 트랜잭션이 가능합니다.

### ERC-4337 스마트 컨트랙트 지갑의 예시를 들어주시겠어요?

예시로는 Soul Wallet, Candide, UniPass, Castle, Openfort가 있으며, Safe와 Argent는 ERC-4337을 사용하지 않는 스마트 컨트랙트 지갑입니다.
