Search

스마트월렛 ERC-4337 알아보기

이더리움 블록체인에서 토큰 송금과 같은 트랜잭션을 생성하기 위해서는 EOA라 불리는 외부 계정 주소를 필수적으로 사용해야 했습니다. EOAExtenally Owned Account의 줄임말로 말 그대로 외부에서 생성한 계정(지갑 주소)라는 뜻입니다. 메타마스크 월렛, 코인 거래소에서 입출금으로 사용되는 주소, 보안 저장소를 사용하는 콜드 월렛처럼 기존에 사용하는 모든 월렛은 블록체인 밖에서 개인 키와 함께 생성한 EOA를 사용하는 월렛입니다.
메타마스크를 사용해 보셨다면 월렛을 처음 생성할 때 12자리의 단어로 이루어진 니모닉 문구를 다른 사람이 알 수 없도록 별도로 기록해서 보관하는 과정을 진행해보신 경험이 있으실 겁니다. 니모닉 문구는 월렛의 시드 키(Seed Key)를 생성하는 단어 조합입니다. 메타마스크를 비롯한 거의 대부분의 암호화폐 월렛은 이 시드 키를 사용해 개인 키(Private Key)와 주소(Address)를 생성하고 사용하는 EOA 형태의 지갑입니다.
니모닉 기반의 지갑은 단어 코드를 통해 모든 지갑 계정을 생성하고 복구할 수 있지만 코드를 해킹 당하거나 분실할 경우 지갑 내 모든 계정의 자금도 잃게 되므로 각별하게 관리해야 합니다.
EOA 지갑의 가장 큰 단점은 지갑 사용에 필요한 키 관리가 매우 까다롭다는 것입니다. 니모닉 문구나 개인 키를 어딘가에 따로 기록해 보관 했지만 잊어버리거나 휴대폰 앱에만 월렛 키가 저장되어 있는데 휴대폰을 분실 했다던지 하는 경우가 발생하면 지갑을 복구할 옵션이 전혀 없어지게 되고 거기에 보관하고 있는 코인이나 토큰은 영영 사용할 수가 없게 됩니다.
지갑을 연계해 사용하는 Web3 앱에 익숙한 사용자라면 키 관리의 중요성을 알기 때문에 언제든 복구 또는 사용할 수 있도록 월렛 키를 잘 관리하겠지만, 기존 방식에 익숙한 일반적인 사용자들은 여기에 큰 진입 장벽을 느끼게 됩니다. 거기에 지갑을 사용해 토큰을 전송하거나 NFT 생성과 같은 트랜잭션 처리를 해야하는 경우에는 수수료로 사용되는 네이티브 코인(예를 들어 이더리움의 ETH나 폴리곤의 MATIC)을 미리 지갑 주소에 보유하고 있어야 하는데, 없다면 코인 거래소에서 구매하여 지갑으로 전송해야 하는 준비 과정도 필요하게 됩니다.
니모닉코드 관리부터 수수료로 사용될 코인을 준비하는 것까지 EOA 월렛의 불편한 UX는 기존 웹 사용자들에게 높은 진입 장벽이 됩니다.
이런 불편함 없이, 기존의 우리에게 익숙하고 간편한 방법인 아이디 비밀번호 비밀번호를 통한 로그인이나 소셜 로그인으로 지갑을 사용하고 관리할 수 있게 된다면 어떨까요? 지갑 계정을 분실했을 때 2차 복구 옵션으로 안전하게 지갑을 되찾을 수 있도록 하고 전송 수수료가 없거나 ERC-20 토큰으로도 지불할 수 있도록 할수는 없을까요?
ERC-4337 계정 추상화(Account Abstraction)를 통해 EOA 기반 지갑의 이런 고질적인 UX 문제를 해결함과 동시에 추가적인 유틸리티를 탑재할 수 있습니다.

ERC-4337 계정 추상화란?

ERC-4337은 지갑 계정을 EOA처럼 오프체인에서 키 관리를 통해 생성하고 사용하는 것이 아닌 온체인에서 스마트 컨트랙트 코드를 통해 지갑 계정을 추상화(Abstract)하여 사용합니다. 쉽게 얘기하면 ERC-4337은 니모닉코드나 개인 키 없이 블록체인에 등록된 컨트랙트 코드를 통해 지갑 계정을 생성하고 사용할 수 있는 기술입니다. 지갑이 개인 키를 사용하지 않고 컨트랙트 코드를 사용하게 되면서 소셜 로그인이나 구글 인증 또는 다중 서명과 같은 기존에 없던 방법으로 서명하고 트랜잭션을 전송할 수 있습니다. 스마트 컨트랙트로 생성하고 사용하는 월렛이므로 스마트 월렛 또는 스마트 계정이라고 부를 수 있겠네요.

어떻게 동작하는가

이더리움 합의 프로토콜 자체를 변경하지 않고 스마트 컨트랙트 기반 월렛을 가능하도록 하기 위해서 ERC-4337은 기존의 클래식 트랜잭션 객체를 본뜬 유사(pseudo) 트랜잭션 객체인 UserOperation을 사용합니다. 기존 클래식 트랜잭션과 거의 동일하지만, 기존 트랜잭션들이 전송되어 처리되는 메모리 풀(Mempool)이 아닌 별도로 구성된 UserOperation mempool로 전송되어 처리됩니다.
UserOperation mempool로 전송된 이후에는 검증 계층인 Bundler들에 의해 검증 받은 뒤 클래식 트랜잭션 번들로 묶이게 됩니다. 번들로 묶여 패키징된 클래식 트랜잭션은 싱글톤 스마트 컨트랙트로 되어있는 Entry Point로 전송되어 온체인 검증과 함께 실행되고 결과가 블록체인에 저장됩니다. 번들러 검증과 번들 트랜잭션 전송 과정에서 검증 인센티브와 전송 수수료가 발생하는데, 이 수수료를 Paymaster에서 대신 내도록 할 수 있습니다. 이를 이용한 서비스에서는 사용자가 전송 수수료를 전혀 내지 않거나 ERC-20으로 대신 지불하도록 할 수 있습니다.
ERC-4337은 UserOperation이라고 하는 대체 트랜잭션을 사용하기 때문에 Entry Point 스마트 계약 코드에서 트랜잭션 수수료를 Paymaster에서 대납하도록 설정할 수 있습니다.

스마트 월렛의 Web3 앱 UX 개선

ERC-4337의 스마트 월렛은 개인 키를 사용하는 것이 아닌 스마트 컨트랙트로 동작하기 때문에 기존 월렛에서는 자체적으로 사용할 수 없었던 아래의 추가적인 기능들을 사용할 수 있습니다.
1.
 Gas 수수료 대납: Web3 앱 사용자가 수수료 없이 지갑을 사용하거나 ERC-20 토큰으로 수수료를 지불할 수 있도록 합니다.
2.
 커스텀 거래 인증: 개인 키의 디지털 서명을 통한 인증 방식인 클래식 트랜잭션을 사용하지 않으므로 소셜 로그인이나 구글 인증과 같은 다양한 인증 방식을 적용할 수 있습니다.
3.
 다중 서명 거래: 하나의 계정 주소가 아닌 여러개의 계정 주소로 서명을 해야 전송 가능한 다중 서명 거래가 가능합니다.
4.
 일괄 거래 전송: 여러번 거래를 승인하여 전송해야하는 경우 일괄 처리하여 한번에 전송할 수 있습니다.
5.
 2차 복구 계정: 원래 사용하던 인증 방식을 더 이상 사용하지 못할 경우를 대비해 인증 방식을 변경할 수 있는 2차 복구 계정을 지정해 계정을 분실하는 것을 방지할 수 있습니다.
6.
 전송 한도 설정: 일일 전송 한도를 설정하여 무분별한 자금 유출을 방지할 수 있습니다.
7.
 예약 전송: 은행의 자동이체처럼 특정 시간에 거래를 자동으로 전송하도록 설정할 수 있습니다.
사용자의 키 관리 문제 해결과 기존 금융 앱에서 사용할 법한 여러 편의 기능을 추가적으로 사용할 수 있게 됨에 따라 Web3 앱은 사용자 경험(UX)을 크게 개선할 수 있게 되었습니다. 이제 소셜 로그인으로 Web3 앱을 로그인하고 개인 키나 니모닉 문구 없이 지갑에 서명하고 트랜잭션을 전송할 수 있으며 만약 계정을 분실하더라도 2차 복구 계정을 통해 인증 방식을 변경하여 다시 계정을 사용할 수 있습니다. 팀 단위의 지갑을 설정하여 여러명이 서명해야만 거래를 할 수 있도록 하거나 자동 이체처럼 특정 시간대에 자동으로 전송하도록 하는 예약 전송을 걸어 놓을 수도 있습니다. 일일 지출 한도와 같은 보안 기능을 걸어 놓는 것도 가능합니다.
NFT 마켓플레이스나 탈 중앙 거래소(DEX)와 같은 DApp을 사용할 때도 NFT 거래 등록이나 토큰 스왑을 할 때에 여러번 트랜잭션에 서명해서 전송해야하는 경우가 많이 있는데요. 이럴 때도 스마트 월렛을 사용하면 일괄 거래를 통해 한번에 처리하도록 할 수 있게 되었습니다. 일괄 거래를 사용하는 경우 기존에 여러번 트랜잭션을 전송하는 것보다 전체적인 수수료는 절약되게 됩니다.
무엇보다 Web3 앱에 스마트 월렛을 적용하면 더 이상 메타마스크와 같은 외부 지갑을 연동할 필요가 없어집니다. 앱 자체 서비스에서 바로 지갑 온체인 기능을 사용할 수 있으므로 더 이상 Web3 앱 기능을 사용할 때 “거래에 서명하시겠습니까?”와 같은 외부 지갑의 알림창을 매번 확인해서 넘어가야하는 과정은 겪지 않아도 되는 점이 가장 큰 UX 개선점으로 느껴지겠네요.

Ethereum 관련 목록