---
title: "모듈러 계정 추상화(Modular Account Abstraction)란?"
description: "스마트 컨트랙트 계정이 모듈과 플러그인을 사용해 새로운 확장 기능을 만드는 방법을 알아보세요"
---

# 모듈러 계정 추상화(Modular Account Abstraction)란?

Modular AA는 모듈화된 스마트 계정을 전파하기 위한 움직임입니다. 목표는 사용자가 계정을 커스터마이징할 수 있도록 하고, 개발자가 컨텍스트가 풍부하고 독립적인 계정 기능을 구축할 수 있도록 하는 것입니다.

모듈형 스마트 컨트랙트 계정\(SCA\)을 사용하면 빌더들이 계정에 [유용한 새로운 확장 기능](https://www.alchemy.com/overviews/smart-contract-wallet-benefits)을 추가할 수 있습니다. 몇 가지 예시는 다음과 같습니다:

1. **Social Recovery** - 신뢰할 수 있는 기기나 지인이 계정 접근 권한을 잃었을 때 복구를 도와줄 수 있도록 함
1. **Spending Limits** - [앱](https://www.alchemy.com/dapps/top/defi-dapps)이 지정된 한도까지 사용자를 대신하여 토큰을 사용할 수 있도록 함
1. **Passkey Support** - FaceID 같은 생체 인증으로 로그인

모듈성을 표준화함으로써 거래 상대방 리스크를 크게 줄일 수 있으며, 이는 단순하고 안전한 web3 사용자 경험으로 이어집니다.

[ERC-4337 표준](https://www.alchemy.com/overviews/what-is-account-abstraction)은 구현 시 사용자가 개인 키 대신 스마트 컨트랙트를 기본 계정 유형으로 사용할 수 있게 해주는 인프라 구성 요소와 코딩 표준을 정의합니다. 역사적으로 기본 계정 유형은 EOA\(End User Account\)였으며, 이는 SCA와 달리 커스텀 검증 및 실행 로직을 가지고 있지 않습니다.

이 글은 Modular Account Abstraction에 대한 개요와 이를 통해 가능해지는 것, 그리고 기존 표준 및 구현 사례를 다룹니다.

<CalloutBlock>
  시드 문구나 가스 없이 사용자를 온보딩하려면 web3 앱에 [모듈형 스마트 계정 지갑을 임베드](https://www.alchemy.com/smart-wallets)하고, 저희의 수직 통합된 AA 인프라로 확장하세요.
</CalloutBlock>

## 모듈형 스마트 컨트랙트 계정의 종류에는 어떤 것들이 있나요?

[스마트 컨트랙트 계정](https://www.alchemy.com/overviews/what-is-account-abstraction)은 근본적으로 스마트 컨트랙트입니다. 업그레이드 가능하고, 확장 가능하며, 상속도 가능합니다. SCA 구현 방식에 따라 플러그인/모듈 추가를 허용하거나 허용하지 않을 수 있습니다. 이 글에서 다룰 모듈형 AA의 두 가지 개념은 ERC-6900과 SAFE Modules입니다.

### **1. ERC-6900: 모듈형 스마트 컨트랙트 계정과 플러그인**

[ERC-6900](https://eips.ethereum.org/EIPS/eip-6900)의 목적은 표준 Account와 Module 구현 간의 인터페이스 집합을 정의하는 것입니다. 이 제안은 계정 구현 간 전환 시 개발자 경험, Module 상호운용성, 데이터 이식성을 개선하고자 합니다.

이 표준은 ERC-2535에서 영감을 받았지만, 개발자가 Diamond 패턴을 따르도록 요구하지는 않습니다.

#### 모듈형 스마트 컨트랙트 계정을 위한 ERC-6900 플러그인이란 무엇인가요?

<ExternalVideo
  url="https://youtu.be/YHy_d1pvtsw?si=KyuT9ynLNDm0zRCc"
  provider="youtube"
  providerUid="YHy_d1pvtsw"
/>

#### ERC-6900은 어떤 유형의 플러그인을 정의하나요?

표준에 따르면 플러그인은 다음 세 가지 유형이 있을 수 있습니다:

1. **Validation Schemes** - 모듈형 스마트 컨트랙트 계정\(MSCA\)이 자신을 대신하여 트랜잭션을 승인하는 조건을 정의**‍**
1. **Execution Logic** - 실행 중에 수행되는 임의의 로직
1. **Hooks** - [user operation](https://www.alchemy.com/overviews/user-operations)의 실행 전후에 실행되는 임의의 로직을 트리거할 수 있음

<ImageBlock
  src="https://media.alchemy.com/1703864824-erc-6900-module-diagram.jpeg"
  alt="ERC-6900 모듈 다이어그램"
  width={895}
  height={301}
  caption="ERC-6900 모듈 다이어그램"
/>

**이 표준은 또한 다음을 정의합니다:**

1. MSCA를 위한 Validation, Execution, Hook 플러그인을 구현하는 방법.
1. 규격을 준수하는 계정 구현체가 플러그인을 추가, 제거, 업데이트, 조회하는 방법.
1. **FunctionReference**와 같은 헬퍼 타입.

<ImageBlock
  src="https://media.alchemy.com/1703864850-transaction-flow-to-erc-6900-sca.jpeg"
  alt="트랜잭션이 entry point를 거쳐 ERC-6900 SCA로 흐르는 과정을 나타낸 다이어그램"
  width={2778}
  height={1500}
  caption="트랜잭션이 entry point를 거쳐 ERC-6900 SCA로 흐르는 과정을 나타낸 다이어그램"
/>

#### ERC-6900은 어떤 유형의 인터페이스를 정의하나요?

ERC-6900 명세는 IPluginUpdate, IPluginLoupe, IStandardExecutor라는 세 가지 주요 인터페이스를 정의합니다.

##### **1. IPluginUpdate**

IPluginUpdate 인터페이스는 다음을 정의합니다:

- 플러그인 액션 **ADD**,** REMOVE**,** REPLACE**
- Validator 타입과 Hook 타입
- 다양한 플러그인 타입을 업데이트하기 위한 사용자 정의 **struct**
- 플러그인 업데이트 시 호출되는 표준화된 **updatePlugins** 함수와, 업데이트 후 발생하는 **ExecutionPluginUpdate** 이벤트

##### **2. IPluginLoupe**

IPluginLoupe는 ERC-2535에서 영감을 받았으며, ERC-6900은 dapp이나 다른 컨트랙트가 MSCA가 지원하는 플러그인을 읽는 방법을 정의합니다.

##### **3. IStandardExecutor**

IStandardExecutor 인터페이스는 모듈형 스마트 컨트랙트 계정이 개방형 실행을 허용하기 위해 구현해야 하는 인터페이스입니다.

### **2. SAFE modules**

모든 SAFE 기반 계정은 SAFE Modules를 지원합니다. 높은 보안 수준을 유지하기 위해 SAFE 팀은 관심사 분리 패턴을 따랐으며 서로 다른 모듈 유형을 구현했습니다.

- **Modules** - Safe Smart Account를 대신하여 트랜잭션을 실행할 수 있도록 화이트리스트에 등록된 주소들.
- **Guard** - 실행될 트랜잭션에 대해 추가 검사를 수행하도록 설정할 수 있는 컨트랙트.
- **Fallback Handler** - 임의의 수신\(read\) 호출을 처리하도록 설정할 수 있는 컨트랙트.

자세한 내용은 Safe의 [모듈형 SCA 아키텍처 글](https://safe.mirror.xyz/t76RZPgEKdRmWNIbEzi75onWPeZrBrwbLRejuj-iPpQ)에서 확인할 수 있습니다.

#### **SAFE SCA 모듈이란 무엇인가요?**

SAFE의 Modules는 사용자의 SAFE 스마트 컨트랙트 계정에서 트랜잭션을 실행할 권한을 가진 개별 스마트 컨트랙트입니다. Modules는 **execTransactionFromModule** 함수를 통해 SAFE 계정에서 임의의 트랜잭션을 실행할 수 있습니다. SAFE 계정의 구현 방식을 SAFE 팀이 결정하기 때문에, 플러그인 개발자는 해당 규칙과 가이드라인을 준수해야 합니다. SAFE modules는 _SAFE 계정에서만_ 호환됩니다.

module 개발자와 사용자 사이에는 상당한 신뢰 가정이 존재하며, 따라서 충분히 검증된 modules가 계속 채택될 가능성이 더 높습니다.

<ImageBlock
  src="https://media.alchemy.com/1703864926-safe-account-module.jpeg"
  alt="SAFE Account Module 다이어그램"
  width={1920}
  height={1080}
  caption="SAFE Account Module 다이어그램"
/>

#### **SAFE SCA guard란 무엇인가요?**

Guard는 SAFE 계정에 설정하여 수신되는 트랜잭션에 대해 추가 보안 검사를 수행할 수 있는 스마트 컨트랙트입니다. 트랜잭션 실행 전에

Guard가 모든 트랜잭션 파라미터와 함께 호출되며, Guard가 되돌아가지(revert) 않으면 트랜잭션은 실행 단계로 진행됩니다.

Guard는 실행 후에도 다시 호출되어 상태 변경 검사를 수행하거나 임의의 로직을 실행합니다.

Guard는 트랜잭션 실행 전후 상태 검사에 적합하다는 점에서 hook으로도 볼 수 있습니다.

<ImageBlock
  src="https://media.alchemy.com/1703864905-safe-sca-guards-protect-accounts.jpeg"
  alt="Safe smart contract account의 Guard가 실행 전후로 트랜잭션을 검사하는 과정을 나타낸 다이어그램"
  width={1920}
  height={1080}
  caption="SAFE SCA Guard로 계정을 보호하는 방법"
/>

#### **SAFE SCA fallback handler란 무엇인가요?**

Fallback Handler는 SAFE 계정으로 전달되는 모든 호출 중 자신이 처리할 수 있는 호출을 실행합니다. 이는 컨트랙트 서명\(EIP-1271\) 같은 업계 전반의 표준을 준수하는 데 유용할 수 있습니다. SAFE에 따르면 "plugins는 핵심 SAFE 컨트랙트와 완전히 독립적이며 자체 스토리지를 유지합니다".

<ImageBlock
  src="https://media.alchemy.com/1703864999-safe-sca-fallback-handler.jpeg"
  alt="SAFE SCA Fallback Handler의 작동 방식을 나타낸 다이어그램"
  width={1920}
  height={1080}
  caption="SAFE SCA Fallback Handler의 작동 방식을 나타낸 다이어그램"
/>

## **결론**

ERC-6900에 설명되고 Safe Modules로 설계된 Modular Account Abstraction은 개발자가 만들고 스마트 컨트랙트 지갑 사용자가 안전하게 설치할 수 있는 플러그인을 통해 Smart Contract Account의 기능을 확장하는 것을 목표로 합니다.

더 자세한 내용은 저희 ERC-4337 education center를 살펴보시거나, 오늘 바로 시작할 수 있는 plug-and-play Embedded Accounts를 확인해보세요.
