EIP-2970은 현재 실행 컨텍스트가 정적(static) 호출 중인지 확인하는 IS_STATIC 오프코드를 제안합니다. 계약이 자신의 실행 컨텍스트를 인식할 수 있게 하려 했으나 정체 상태입니다.
제안 내용
STATICCALL로 호출된 계약은 상태 변경 작업을 수행할 수 없지만, 현재 정적 컨텍스트인지 알 방법이 없습니다. IS_STATIC 오프코드는 현재 컨텍스트가 정적인 경우 1을, 아닌 경우 0을 스택에 푸시합니다. 이를 통해 계약이 실행 컨텍스트에 따라 다르게 동작하거나 더 명확한 오류 메시지를 제공할 수 있습니다.
활용 사례
계약이 정적 컨텍스트에서 호출될 때 미리 실패하여 더 나은 오류 메시지를 제공할 수 있습니다. 조건부로 상태 변경이 필요한 작업을 수행하거나 건너뛸 수 있습니다. 가스 시뮬레이션과 정적 분석 도구에서도 유용하게 활용될 수 있습니다.
정체 이유
실제 개발 현장에서 IS_STATIC의 필요성이 그리 높지 않다는 평가를 받았습니다. 정적 컨텍스트 감지가 필요한 경우 try-catch 패턴으로 대부분 처리할 수 있었습니다. 새로운 오프코드 추가의 복잡성 대비 이점이 크지 않다는 의견이 많았습니다.
현재 상황
EIP-2970은 Stagnant 상태로 추가 논의가 중단되었습니다. EVM 오프코드 확장은 명확한 필요성과 광범위한 합의가 있을 때만 이루어집니다. 정적 컨텍스트 감지는 라이브러리와 설계 패턴으로 처리되고 있습니다.