From e9201f67243ed20c106f868745f0d23ba6375268 Mon Sep 17 00:00:00 2001 From: siddharth0a Date: Wed, 10 Apr 2024 11:02:44 +0900 Subject: [PATCH] EIPs: fix line break of eip-2929.md --- EIPs/eip-2929.md | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/EIPs/eip-2929.md b/EIPs/eip-2929.md index b7b814f1e5..9684ad9fdf 100644 --- a/EIPs/eip-2929.md +++ b/EIPs/eip-2929.md @@ -1,6 +1,7 @@ # EIP-2929: Gas cost increases for state access opcodes DATE: April 10, 2024 + AUTHOR: Gyeongdeok Maeng(@siddharth0a) ## Abstract @@ -14,10 +15,14 @@ EIP-2929는 `베를린 하드포크`에서 시행되었습니다. 이 EIP는 이 ## Motivation EIP-2929는 이더리움의 가스비용 매커니즘을 개선하여 네트워크 보안과 성능을 향상시키고자 하는 목표가 있습니다. + 과거에는 storage access (`SLOAD`, `CALL`, `BALANCE`, `EXT`)등의 opcode의 가스 비용이 실제 처리 시간에 비해 낮게 책정되어 있었습니다. 이로 인해 `2016년 Shanghai DoS attack`에서 공격자가 다수의 계정에 액세스하거나, 호출하는 트랜잭션을 보내는 형태의 DoS 공격이 발생할 수 있었습니다. + 이 문제를 완화하기 위해 가스 비용이 인상되었으나, 충분하지 않았습니다. EIP-2929에서는 이러한 opcode들의 비용을 대략 3배 정도 올림으로써, 최대 처리 시간을 7~27초로 단축시키고자 합니다. 이는 이더리움 state machine 데이터베이스의 안정성 개선과 성능을 향상시킬 수 있습니다. + EIP-2929는 이더리움 확장성 로드맵 중 하나인 stateless witness를 실현할 수 있는 작업의 기반작업이 될 수 있습니다. BALANCE opcode의 가스비용이 700에서 2600으로 증가하여, (12500000 gas limit) / (700 gas per BALANCE) * (800 witness bytes per BALANCE) ~= 14.3M bytes to 12500000 / 2600 * 800 ~= 3.85M bytes로 코드 크기를 제외한 이론적인 witness의 이론적인 최대 크기가 14.3MB에서 3.85MB로 줄어들수 있기 때문입니다. + 또한 SNARK/STARK의 witness 개선에도 기여할 수 있습니다. 이러한 영지식 증명기술에서도 머클패트리샤 트리를 사용하는데, 각 브랜치에 25개의 해시가 있고 블록이 state access로 가득 차 있다고 가정할 경우, 현재는 witness를 생성하는데 약 44.64초가 소요됩니다. 그러나 EIP-2929를 적용한 후에는 이 시간이 12.5초로 단축됩니다. ## Change @@ -210,10 +215,12 @@ https://github.com/ethereum/go-ethereum/pull/21509/files ## Reasoning ### opcode의 가스비용을 조정 Witness 데이터의 크기를 gas비에 반영하기 위해서는 opcode의 가스비용을 조정하는 방식과 witness데이터의 바이트당 gas 비용을 측정하여 청구하는 방법이 있습니다. 그러나 단기적인 보안 해결이 필요했던 베를린 하드포크에서는 빠르게 업데이트할 수 있는 전자의방식을 택했습니다. + 또한 바이트당 비용을 청구하는 방식을 사용할 경우 컨트랙트 코드에 접근하는 트랜잭션의 가스 비용이 지나치게 높아질 수 있습니다. 이는 해당 트랜잭션은 컨트랙트 코드의 모든 바이트를 측정해야 하고, 이 접근에 대한 비용을 청구해야하기 때문입니다. 이는 개발환경의 부담을 만들어내므로 적합하지 않습니다. 단기적인 DoS공격 예방 측면에서는 24kB를 읽어오는 것과 32Byte를 읽어오는 것에 비용차이가 크지 않으므로 코드 크기에 지나친 신경을 쓸 필요가 없습니다. ### accessed_addresses와 accessed_storage_keys 세트의 도입 EIP-2929는 이미 액세스한 계정과 스토리지 슬롯의 세트를 추적하기 위해 accessed_addresses와 accessed_storage_keys를 도입했습니다. 이는 캐시될 수 있는 데이터에 대해 불필요한 비용 청구를 피하기 위한 것입니다. 대부분의 효율적인 구현에서는 이미 이러한 데이터를 캐시하고 있습니다. + 또한, 이를 통해 자기 호출(self-call)이나 프리컴파일 호출 시 불필요하게 높은 비용이 발생하는 문제를 해결할 수 있습니다. 나아가 향후 실행에서 예상된 양의 가스를 사용할 수 있도록 일부 스토리지 키를 미리 가져오는 등의 계약 중단 완화 방안을 가능하게 합니다. ## Conclusion