가스 환불이 포함된 오버클러킹 블록

이 기사는 기계로 번역되었습니다
원문 표시

가스 환불로 블록 오버클로킹하기

요약: 저장소 정리 환불은 가치 있지만 블록 가스 수치를 부풀릴 수 있습니다 - 사용자를 위해 유지하되, 블록 가스 사용량에는 포함하지 마세요. EIP-7778은 정확한 온체인 가스 회계를 복원합니다.

이더리움의 가스 메커니즘은 계산 리소스 소비를 정확하게 반영하는 것을 목표로 합니다. 사용자가 상태를 깨끗하고 관리 가능하게 유지하도록 장려하기 위해, 이더리움은 저장소 슬롯이 0으로 재설정될 때 가스 환불을 제공합니다. 상태 비대를 줄이는 데 효과적이지만, 이러한 환불은 현재 가스 회계를 복잡하게 만들어 블록이 실제로 소비하는 리소스보다 적게 소비하는 것처럼 보이게 합니다.

현재 가스 환불 작동 방식

...

n = ⌊log(21,000/45,000,000)/log(0.2)⌋ + 1
n=log(21,000/45,000,000)log(0.2)+1

(⌊x⌋은 바닥 함수로, x보다 작거나 같은 가장 큰 정수를 나타냅니다.)

총 계산 가스

단계 n-1까지 사용된 모든 계산 가스의 합:

G_total = G_0 + G_0 r + G_0 r^2 + ... + G_0 r^(n-1)
Gtotal=G0+G0r+G0r2++G0rn1

G_0를 인수분해:

G_total = G_0 (1 + r + r^2 + ... + r^(n-1))
Gtotal=G0(1+r+r2++rn1)

기하급수 공식 사용:

1 + r + r^2 + ... + r^(n-1) = (1 - r^n) / (1 - r)
1+r+r2++rn1=1rn1r

결과:

G_total = G_0 × (1 - r^n) / (1 - r)
Gtotal=G0×1rn1r

값 대입:

  • G_0 = 45,000,000G0=45,000,000
  • r = 0.2r=0.2
  • G_min = 21,000Gmin=21,000

n 계산:

n = ⌊log(21,000/45,000,000)/log(0.2)⌋ + 1 = ⌊4.766⌋ + 1 = 5
n=log(21,000/45,000,000)log(0.2)+1=4.766+1=5

총 가스 계산:

G_{\text{total}} = 45,000,000 \times \frac{1 - (0.2)^5}{1 - 0.2} = 56,232,000
Gtotal=45,000,000×1(0.2)510.2=56,232,000

이는 초기 가스 한도에서 약 25% 증가를 보여주며, 현재 환불이 블록 가스 회계를 얼마나 크게 왜곡시키는지 강조합니다.

예시 계약

이러한 계약은 다음과 같이 보일 수 있습니다:

// SPDX-License-Identifier: MIT솔리디티 ^0.8.0;contract Refundooor {mapping(uint256 => uint256) private storageSlots;/// @notice 시작 키부터 `maxSlots` 키 사전 채우기function chargeStorage(uint256 startKey, uint256 maxSlots) external {for (uint256 i = 0; i < maxSlots; i++) {storageSlots[startKey + i] = startKey + i + 1;}}/// @notice 정확히 MAX_LOOPS 슬롯을 무조건적으로 지우기fallback() external {assembly {let base := storageSlots.slotmstore(0x20, base)// MAX_LOOPS * ~5,109 가스/반복 ≈ 45,000,000 가스let MAX_LOOPS := 8805for { let i := 0 } lt(i, MAX_LOOPS) { i := add(i, 1) } {// 키 = i에 대한 스토리지 슬롯 계산mstore(0x0, i)let s := keccak256(0x0, 0x40)// 무조건적으로 제로로 쓰기sstore(s, 0)}}}}
  • 먼저 빈 스토리지 슬롯에 쓰기로 계약을 충전합니다.
  • 둘째, 계약의 폴백을 호출하여 8805개의 스토리지 슬롯을 제로로 설정합니다.

SSTORE 작업의 최대 수를 달성하는 이 샘플 트랜잭션을 Holesky에서 확인해보세요.

결국 "밀반입된" 가스는 블록 가스 한도와 선형적으로 확장됩니다. 100M 가스에서 블록은 실제 작업 125M 가스와 함께 올 수 있습니다.


제안된 변경: 트랜잭션 환불을 블록 가스 회계와 분리

EIP-7778은 효율적인 스토리지 관리를 장려하기 위해 사용자 수준의 환불을 유지하면서 이러한 환불을 블록 수준의 가스 회계에서 제거할 것을 제안합니다. 이를 통해 블록 가스 사용량이 실제 자원 소비를 정확하게 반영할 수 있습니다.

EIP를 구현할 경우의 이점은 다음과 같습니다:

  • 향상된 예측 가능성: 블록의 실제 작업이 의도된 한도 이하로 유지됩니다.
  • 증가된 네트워크 안정성: 최악의 시나리오와 관계없이 DoS 위험 감소.
  • 보존된 사용자 인센티브: 사용자들은 상태 정리에 대한 동기를 유지합니다.

EIP-7778은 사용자 인센티브를 블록 전체 자원 제약과 깔끔하게 분리하여 블록 가스 사용량을 실제 수행된 작업에 더 가깝게 정렬합니다.


출처
면책조항: 상기 내용은 작자의 개인적인 의견입니다. 따라서 이는 Followin의 입장과 무관하며 Followin과 관련된 어떠한 투자 제안도 구성하지 않습니다.
라이크
즐겨찾기에 추가
코멘트