ERC-4337: Account Abstraction Using Alt Mempool
해당 링크를 기반으로 제가 이해한 내용을 보태서 작성하였습니다.
계정 추상화 제안(Account Abstraction Proposal)
ERC-4337은 계정 추상화를 위한 제안입니다. 계정 추상화는 사용자가 스마트 컨트랙트를 자신의 계정으로 사용할 수 있게 하여, 다양한 검증 로직을 적용할 수 있게 하는 개념입니다.
합의 계층 프로토콜 변경 회피
이 제안의 핵심은 기존 합의 계층(Consensus layer) 프로토콜에 변경을 가하지 않으면서도, Account 추상화를 가능케 하는 것입니다. 즉, 새로운 프로토콜 기능 추가나 기존 트랜잭션의 구조를 변경 없이도 계정 추상화를 구현할 수 있습니다.
UserOperation 객체 도입
ERC-4337은 UserOperation이라는 새로운 상위 계층의 가상(pseudo) 트랜잭션 객체를 도입합니다. 사용자들은 이 객체를 특별한 메모리 풀(mempool)에 전송하게 됩니다.
Bundlers의 중요 역할
Bundlers는 ERC-4337 프로토콜에서 특별한 역할을 수행하는 참여자입니다. 그들의 주 역할은 여러 UserOperation 객체들을 수집하여 하나의 트랜잭션으로 묶는 것이며, 이를 통해 특별한 Smart Contract의 handleOps() 함수를 호출합니다. 이 함수는 다수의 UserOperation 객체들을 처리하며, 그 결과로써 실제 이더리움 트랜잭션을 실행합니다.
블록에 포함되는 과정
Bundlers는 여러 사용자로부터 받은 UserOperation 객체들을 하나의 트랜잭션으로 결합합니다. 이렇게 결합된 트랜잭션을 이용하여, Bundlers는 특수한 스마트 컨트랙트의 handleOps() 함수를 호출하게 됩니다. 이 함수 호출을 통해 생성된 트랜잭션은 최종적으로 Ethereum Blockchain의 블록에 포함되게 됩니다.
각각의 핵심 요소와 인터페이스에 대한 설명
UserOperation은 사용자를 대신하여 보낼 트랜잭션을 설명하는 구조로, 일반적인 이더리움 트랜잭션과 유사한 필드를 가지고 있습니다. 이 필드들은 다음과 같습니다
이 외에도 UserOperation은 일반 트랜잭션과 달리, 추가적인 필드들을 포함합니다. 이 필드들은 UserOperation이 어떻게 처리되어야 하는지에 대한 추가 정보를 제공합니다.
Sender는 User Operation을 보내는 Contract Account를 의미합니다.
EntryPoint는 ERC-4337 프로토콜에서 핵심적인 역할을 수행하는 싱글턴(Singleton) 컨트랙트입니다.
UserOperation들의 번들 처리 및 실행
사용자들이 생성한 UserOperation 객체들은 mempool에 전송되며, 이들을 Bundler라는 특별한 역할을 하는 노드가 사용자들이 생성한 ‘UserOperation’ 객체들을 수집하여 Bundle로 구성합니다. 이렇게 구성된 Bundle은 EntryPoint Contract를 통해 처리되고 실행됩니다.
화이트리스트 등록
Bundler와 클라이언트들은 EntryPoint Contract를 사용하기 위해(신뢰성을 보장하기 위해), EntryPoint Contract Address를 화이트리스트에 등록합니다.
클라이언트에 의해 사용될 수 있도록 승인되거나 호환성이 확인된 경우를 의미합니다. 이는 특정 EntryPoint 컨트랙트가 ERC-4337 프로토콜을 올바르게 구현하고 있으며, Bundler나 클라이언트와의 상호작용이 가능함을 나타냅니다.
이를 통해, Bundler와 클라이언트들은 안전하게 UserOperation들을 EntryPoint 컨트랙트에 전달할 수 있습니다.
화이트리스팅을 거친 Bundler는 UserOperation들을 번들로 구성하고 EntryPoint 컨트랙트의 메서드를 호출하여 번들을 네트워크에 전파합니다.
Bundler는 ERC-4337 프로토콜에서 핵심적인 역할을 수행하는 노드입니다. 이들의 주요 역할은 여러 개의 UserOperation을 수집하여 하나의 트랜잭션으로 결합하는 것입니다. 이렇게 생성된 트랜잭션은 EntryPoint 컨트랙트의 handleOps()
함수를 호출하여, UserOperation들이 실행되게 합니다. 이 트랜잭션은 이더리움 네트워크의 다른 노드들에 의해 검증된 후, 새로운 블록에 추가됩니다.
Bundler는 이러한 트랜잭션을 블록에 포함시키기 위해 여러 방법을 사용할 수 있습니다.
이와 같은 다양한 방식을 통해 Bundler는 UserOperation들을 결합하여 트랜잭션을 생성하고, 이를 이더리움 블록체인에 포함시키는 핵심적인 역할을 합니다.