ERC4337

EIP 문서

계정 구현시 주의할 점은, 서명 인증 시 리턴하는 값 SIG_VALIDATION_SUCCESSSIG_VALIDATION_FAILED 가 각각 0과 1로 매핑되어 있다는 점이다. 일반적인 true, false 와 반대임에 주의하자.

MUST

Account

  • 계정의 함수를 호출하는 이가 EntryPoint 인지를 확인한다.
  • 계정이 signature aggregation 을 지원하지 않는 경우, userOpHash 에 대한 서명을 확인해야 한다.
  • 서명 확인 시, 서명 불일치 외의 다른 오류가 발생했을 때에는 revert 한다.
  • EntryPoint 에게 최소한 missingAccountFunds 만큼은 지불해야 한다. 현재 계정의 예치금이 충분히 높다면 이 값은 0일 수도 있다.
  • 반환값은 authorizer 와 validUntil, validAfter 타임스탬프로 패킹되어야 한다. (uint256 으로 인코딩)
    • authorizer
      • 서명이 유효하다면 0(SIG_VALIDATION_SUCCESS), 유효하지 않다면 1(SIG_VALIDATION_FAILED) 로 설정한다. 20바이트를 이용한다.
      • 또는 authorizer 컨트랙트의 주소를 리턴한다. Signature aggregator 의 주소를 리턴한다.
    • validUntil
      • 6 바이트의 타임스탬프. 0으로 설정할 시 무한으로 설정된다. UserOp 는 이 시점까지만 유효하다.
    • validAfter
      • 6 바이트의 타임스탬프. UserOp 는 이 시점부터 유효하다.

SHOULD

Account

  • 서명이 일치하지 않는 경우 revert 하지 않고 SIG_VALIDATION_FAILED 를 리턴한다.

MAY

Account

  • 계정은 최소 값보다 더 많이 지불할 수 있다. 이는 미래에 트랜잭션을 또 실행할 시 사용된다. withdrawTo 를 통해 회수할 수 있다.
  • IAccountExecute 인터페이스 (executeUserOp 함수)를 구현할 수 있다. (안할 수도 있다)

tags: blockchain, defi, smart contract, account abstraction, wallet