https://eips.ethereum.org/EIPS/eip-4337
https://medium.com/@0xasdf_eth/a-complete-guide-on-account-abstraction-b885542e7552
https://github.com/eth-infinitism/account-abstraction
https://piatoss3612.tistory.com/m/160
Account contract = Smart contract wallet
UserOperation: a transaction.
Sender: account contract.
Bundler**:** a node that can handle UserOperations. validate txs.
EntryPoint: a singleton contract. UserOperation Gateway
Paymaster: a helper contract that agrees to pay for the transaction, instead of the sender itself.
Aggregator: 서명 집계를 수행하는 도우미 컨트랙트 (Rationale: EntryPoint.simulateValidation 검증 → 계정 컨트랙트 validateUserOp 검증. 이렇게 트랜잭션 번들에서 UserOperation을 다시 검증하는 것은 비효율적), 그래서 user operation 단위의 서명 검증이 아닌 bundler 단위의 서명 검증을 함.
플로우:
로그인 -> 개인/공개키 생성 -> 개인키는 비멀번호와 함께 암호화해서 저장. (여기까지 클라이언트) -> 공개키는 서버에 전달. -> 서버는 공개키와 salt으로 계정 컨트랙트 생성. -> 서명을 서버에 전달하여 트랜잭션 실행. -> 계정 컨트랙트는 서명과 계정 컨트랙트의 소유자와 맞는지 확인.
복구 -> 새로운 개인/공개키 생성 -> JWT 신원 확인 -> 관리자가 새로운 공개키로 계정 컨트랙트 소유자를 변경.