EIP-7516 블롭 기본 수수료 조회 명령어 (BLOBBASEFEE instruction)
최종 확정 · EVM·실행 · 원문 상태 Final · 2023-09-11 작성
현재 블록의 블롭(blob) 기본 수수료를 스마트 컨트랙트가 직접 읽을 수 있게 하는 EVM 명령어 BLOBBASEFEE(0x4a)를 추가합니다.
왜 필요한가
이더리움은 EIP-4844로 블롭(blob)이라는 별도 데이터 공간을 도입했습니다. 롤업 같은 서비스가 대량의 데이터를 싸게 올리는 공간인데, 이 공간의 가격인 블롭 기본 수수료는 일반 거래 수수료와 별개로 정해집니다. 그런데 스마트 컨트랙트는 이 가격을 체인 위에서 직접 읽을 방법이 없었습니다. 그래서 롤업 컨트랙트가 블롭 데이터 사용 비용을 신뢰 없이(trustlessly) 정산하기 어려웠고 블롭 가격 변동을 완만하게 만들어 주는 블롭 가스 선물 같은 상품도 만들기 어려웠습니다. 일반 거래의 기본 수수료는 이미 BASEFEE 명령어(EIP-3198)로 읽을 수 있습니다. 이 EIP는 그와 똑같은 방식으로 블롭 기본 수수료를 읽는 명령어를 EVM에 추가해 이 공백을 메웁니다.
무엇이 바뀌나
지금
- 컨트랙트가 블롭 기본 수수료를 체인 위에서 직접 읽을 방법이 없습니다
- 롤업 컨트랙트가 블롭 데이터 비용을 정산하려면 체인 밖 정보에 기대야 합니다
- 일반 기본 수수료는 BASEFEE로 읽을 수 있지만 블롭 쪽에는 대응 명령어가 없습니다
EIP-7516 이후
- BLOBBASEFEE 명령어 하나로 현재 블록의 블롭 기본 수수료를 읽습니다
- 롤업 컨트랙트가 블롭 사용 비용을 신뢰 없이 계산할 수 있습니다
- 블롭 가격 변동을 완만하게 만드는 블롭 가스 선물을 컨트랙트로 구현할 수 있습니다
누구에게 영향이 있나
- 롤업·L2 팀: 블롭 데이터 사용 비용을 온체인에서 직접 계산하고 정산할 수 있습니다.
- 스마트 컨트랙트 개발자: 가스 2만 내면 현재 블록의 블롭 기본 수수료를 읽는 새 명령어를 쓸 수 있습니다.
- 클라이언트 팀: EVM에 옵코드 0x4a를 구현해야 합니다. 동작이 BASEFEE와 같아 구현 부담은 작습니다.
심층 설명
명령어 사양: 옵코드 0x4a, 입력 0, 출력 1, 가스 2
옵코드 0x4a에 BLOBBASEFEE 명령어를 추가합니다. 스택에서 가져가는 입력은 0개, 스택에 올리는 출력은 1개, 가스 비용은 2입니다. 동작 구조는 EIP-3198의 BASEFEE 옵코드와 동일하며 일반 기본 수수료 대신 EIP-4844가 정의한 블롭 기본 수수료를 반환한다는 점만 다릅니다. 반환하는 값은 명령어가 실행되고 있는 현재 블록 기준의 블롭 기본 수수료입니다.
반환값은 EIP-4844의 get_blob_gasprice(header)
BLOBBASEFEE가 스택에 올리는 값은 EIP-4844의 Gas accounting 절에 정의된 get_blob_gasprice(header) -> int 함수를 현재 블록 헤더에 적용한 결과입니다. 별도의 계산 규칙을 새로 만들지 않고 EIP-4844가 이미 정의한 블롭 가스 가격 함수를 그대로 가져다 쓰기 때문에, 블롭 트랜잭션 처리에 쓰이는 가격과 컨트랙트가 읽는 가격이 항상 같습니다. 원문 Motivation은 이 값을 바탕으로 롤업 컨트랙트가 블롭 데이터 비용을 신뢰 없이 정산하거나 블롭 가스 선물을 구현하는 용례를 듭니다.
가스 비용 2의 근거
블롭 기본 수수료는 블롭 트랜잭션을 처리하는 데 필요한 값이라 EVM 코드를 실행하기 전에 이미 준비되어 있습니다. 이 명령어는 헤더에 있는 값을 그대로 노출할 뿐 추가 복잡성이나 별도의 읽기·쓰기 작업을 만들지 않습니다. 그래서 가스 비용을 2로 정했고 이는 같은 성격의 명령어인 EIP-3198 BASEFEE 옵코드의 비용과도 동일합니다.
테스트 케이스
대표 케이스는 이렇습니다. 현재 블록 헤더에 get_blob_gasprice(header)를 적용한 결과가 7 wei라면, BLOBBASEFEE는 7을 왼쪽을 0으로 채운 32바이트 값으로 스택에 올려야 합니다. 바이트코드 0x4a00(BLOBBASEFEE, STOP)을 실행하면 출력은 0x이고 소모 가스는 2입니다. 전체 테스트 묶음은 ethereum/execution-spec-tests 저장소의 tests/cancun/eip7516_blobgasfee/test_blobgasfee_opcode.py에 있습니다.
호환성·보안·상태
이 명령어로 인한 하위 호환성 문제는 알려진 것이 없습니다. 보안 측면에서도 블롭 기본 수수료는 민감한 정보가 아니고 블록 헤더에 공개되어 있는 값이라, 알려진 보안 영향이 없습니다. 이 EIP의 상태는 Final로 명세가 확정되었고 테스트 묶음이 execution-spec-tests의 cancun 디렉터리에 들어 있습니다. EIP-3198과 EIP-4844를 전제 조건(requires)으로 둡니다.