EIP-8015 예치·Eth1 데이터 필드 제거 (Remove `deposit` and `eth1data` fields)
Hegota 포함 확정 (SFI) · 합의·스테이킹 · 원문 상태 Draft · 2025-08-22 작성
비컨 블록 본문과 비컨 상태에서 더 이상 쓰지 않는 옛 예치(deposit) 필드와 Eth1 데이터 투표 장치를 제거합니다. EIP-6110으로 예치 처리가 실행 계층에 옮겨진 뒤 남은 잔재를 정리하는 변경입니다.
왜 필요한가
이더리움에서 검증자가 되려면 자금을 맡기는 예치(deposit)를 해야 합니다. 예전에는 이 예치 기록이 실행 계층(옛 Eth1 체인)에 쌓이고 합의 계층의 블록 제안자들이 그 기록을 보고 투표해서 비컨 체인에 반영했습니다. EIP-6110은 이 처리를 실행 계층 안으로 옮겨 제안자 투표를 없앴습니다. 다만 옮기는 동안에는 옛 방식과 새 방식이 함께 남아 있어야 했습니다. 풀루(Fulu) 포크에서 옛 예치 처리는 이미 빠졌지만, 블록 본문과 비컨 상태에는 빈 필드와 Eth1 데이터 투표 장치가 그대로 남아 있습니다. 옛 예치가 모두 처리된 뒤에는 이 필드들이 영원히 쓰이지 않습니다. 이 EIP는 그 잔재를 걷어내서 검증 코드를 단순하게 만들고 전환기의 기술 부채를 없앱니다.
무엇이 바뀌나
지금
- 비컨 블록 본문에 eth1_data와 deposits 필드가 남아 있습니다. 풀루 이후 deposits는 항상 비어 있어야 하지만 자리는 차지합니다.
- 비컨 상태에 eth1_data, eth1_data_votes, eth1_deposit_index, deposit_requests_start_index 네 필드가 남아 있습니다.
- 제안자는 블록마다 Eth1 데이터 투표를 넣고 클라이언트는 매 에포크 끝에 투표 초기화 코드를 돌립니다.
EIP-8015 이후
- 블록 본문에서 두 필드가 빠집니다. 제안자는 Eth1 데이터 투표를 넣지 않습니다.
- 비컨 상태에서 네 필드가 빠지고 관련 처리 함수 호출도 모두 사라집니다.
- 남은 필드의 머클 트리 위치는 그대로라서 기존 머클 증명 검증기는 수정 없이 계속 동작합니다.
누구에게 영향이 있나
- 클라이언트 팀: Eth1 데이터 폴링·투표·에포크 초기화 코드와 빈 deposits 검사를 제거합니다. 폐기된 검증 경로가 사라져 코드가 단순해집니다.
- 검증자(스테이커): 옛 방식 예치가 모두 처리된 뒤에만 활성화되므로 어떤 검증자도 영향을 받지 않습니다. 새 예치는 EIP-6110 방식으로 계속 처리됩니다.
- 머클 증명 검증기 개발자: 남은 필드의 일반화 인덱스가 바뀌지 않아 기존 증명 검증 코드를 고칠 필요가 없습니다. 과거 블록과 상태도 원래 스키마로 계속 검증할 수 있습니다.
- 일반 사용자: 이미 쓰이지 않는 데이터를 정리하는 변경이라 체감하는 변화는 없습니다.
심층 설명
배경과 목적
EIP-6110은 검증자 예치 처리를 EIP-7685 요청(request) 체계의 일부로 실행 계층에 옮겼습니다. 그 결과 합의 계층에서 제안자가 Eth1 데이터에 투표해 예치를 끌어오던 장치가 필요 없어졌습니다. 다만 전환기에는 옛 방식(deposits, eth1_data 필드)과 새 방식이 함께 남아 있었습니다. 풀루(Fulu) 포크는 옛 예치 처리를 제거하고 body.deposits가 비어 있어야 한다고 요구했습니다. 이 EIP는 남은 deposits, eth1_data 블록 본문 필드와 Eth1 데이터 투표 장치, 쓰지 않는 BeaconState 필드를 제거합니다. 원문이 적는 이점은 두 가지입니다. 폐기된 검증 로직과 코드 경로를 없애 검증을 단순하게 하고 전환기에서 비롯된 기술 부채를 없애 유지보수성을 높입니다.
활성화 조건과 시점 선택
이 EIP는 두 조건이 모두 맞을 때만 활성화됩니다(SHALL). 첫째, EIP-6110이 완전히 마무리되어 state.eth1_deposit_index == state.deposit_requests_start_index가 성립해야 합니다. 옛 방식으로 들어온 예치가 모두 처리됐다는 뜻입니다. 둘째, 글램스테르담(EIP-7773)이 적용된 상태여야 합니다. Rationale 절은 이 시점을 고른 이유를 네 가지로 적습니다. 옛 시스템의 대기 중 예치가 모두 처리됐고 어떤 검증자도 제거의 영향을 받지 않으며 전환이 끝나 되돌릴 수 없고 모든 정직한 노드가 같은 상태를 유지한다는 것입니다.
BeaconBlockBody 변경
블록 본문에서 eth1_data: Eth1Data와 deposits: ProgressiveList[Deposit] 두 필드를 제거합니다. 제거는 EIP-7688의 ProgressiveContainer 규칙대로 해당 위치의 active_fields 비트를 0으로 바꾸는 방식으로 표현합니다. 새 비트 배열은 [1] + [0] + [1] * 4 + [0] + [1] * 6입니다. 두 번째 자리(eth1_data)와 일곱 번째 자리(deposits)가 0입니다. 남는 필드는 randao_reveal, graffiti, proposer_slashings, attester_slashings, attestations, voluntary_exits, sync_aggregate, bls_to_execution_changes, signed_execution_payload_bid, payload_attestations, parent_execution_requests입니다. 원문이 참조하는 명세 링크는 consensus-specs의 gloas 폴더를 가리킵니다.
블록·에포크·검증자 처리 변경
블록 처리에서는 두 가지를 뺍니다. process_block에서 process_eth1_data() 호출을 제거하고 process_operations에서 assert len(body.deposits) == 0 검사를 제거합니다. 필드 자체가 없어지므로 비어 있는지 확인할 필요도 없어집니다. 에포크 처리에서는 process_epoch에서 process_eth1_data_reset() 호출을 제거합니다. 원문이 가리키는 phase0 명세의 Eth1 data votes updates 단계입니다. 정직한 검증자(honest validator) 명세에서는 Eth1 데이터 폴링과 get_eth1_vote 장치를 통째로 제거합니다. 제안자는 이제 블록에 eth1_data 투표를 넣지 않습니다.
BeaconState 변경
비컨 상태에서 네 필드를 제거합니다. eth1_data: Eth1Data, eth1_data_votes: List[Eth1Data, EPOCHS_PER_ETH1_VOTING_PERIOD * SLOTS_PER_EPOCH], eth1_deposit_index: uint64, deposit_requests_start_index: uint64입니다. 앞의 세 필드는 historical_roots 바로 뒤에 연달아 있던 자리이고 deposit_requests_start_index는 historical_summaries 뒤에 있던 자리입니다. 블록 본문과 같이 active_fields 비트를 0으로 바꿔 표현합니다. 새 비트 배열은 [1] * 8 + [0] * 3 + [1] * 17 + [0] + [1] * 17입니다. 나머지 필드(validators, balances, pending_deposits, builders, ptc_window 등)는 이름과 순서가 모두 그대로입니다.
하위 호환성과 보안
BeaconBlockBody와 BeaconState가 ProgressiveContainer이기 때문에, 필드를 빼도 남은 필드의 일반화 인덱스(generalized index)는 바뀌지 않습니다. 비트만 0으로 바뀌고 자리는 유지되기 때문입니다. 그래서 제거되지 않은 필드를 검증하는 머클 증명 검증기는 수정 없이 계속 동작합니다. 과거 블록과 상태는 원래 스키마를 그대로 유지하며 여전히 검증할 수 있습니다. 보안 위험은 최소라고 원문은 적습니다. 제거되는 필드는 EIP-6110 마무리 뒤에는 이미 아무 데도 쓰이지 않고 모든 예치는 EIP-6110 방식으로만 처리되기 때문입니다.
상태와 포크 포함 결정
이 EIP는 Draft 상태라 내용이 아직 바뀔 수 있습니다. 코어 개발자 콜 기록을 보면 07.23 ACDC #183에서 헤고타(Hegota) 후보로 접수(PFI)됐습니다. 09.17 ACDC #187에서 헤고타 포함 검토(CFI)로 올라갔습니다. 10.12 ACDT #100에서는 heze-devnet-2에 EIP-7805(FOCIL), EIP-8015, EIP-8365, EIP-8198을 함께 포함하기로 확정했습니다. 10.29 ACDC #190에서 헤고타 포함이 확정(SFI)됐습니다. 원문은 활성화 조건으로 글램스테르담(EIP-7773) 적용을 적고 있고 콜 기록은 헤고타 포함을 확정한 상태입니다.