교육 참고용이며 투자 조언이 아닙니다. 투자로 인해 손실이 발생할 수 있습니다.
직접 답변
계정 기반 모델은 실행 상태를 주소를 키로 하는 데이터로 표현합니다. 이더리움 실행 계층에서 계정 리프에는 [nonce, balance, storageRoot, codeHash] 가 들어 있습니다. 네이티브 balance 는 wei 단위이고, 컨트랙트 데이터는 해당 계정의 storageRoot 가 가리키는 곳에 있으며, 블록 실행 후 stateRoot 는 결과 월드 스테이트를 확약합니다. 지갑, RPC 제공자 또는 블록 탐색기는 이 상태를 읽고 해석할 뿐 사용자를 대신해 정규 원장의 잔액을 보관하지 않습니다.
ERC-20 잔액, 허용량, 대출 부채와 담보는 일반적으로 보유자의 프로토콜 계정에 추가된 필드가 아니라 컨트랙트 스토리지의 값입니다. 마찬가지로 탐색기의 “내부 트랜잭션”은 대개 EVM 메시지 호출을 트레이스로 재구성한 것이며, 독립적인 트랜잭션 해시와 발신자 nonce를 가진 별도의 서명된 이더리움 트랜잭션이 아닙니다.
전통적인 외부 소유 계정(EOA)과 컨트랙트 계정의 구분은 여전히 유용하지만, EIP-7702를 활성화한 체인에서는 “EOA는 항상 코드가 비어 있다”는 전제가 절대적이지 않습니다. EOA는 위임 표시자 0xef0100 || address 를 가질 수 있고 EOA 트랜잭션 권한을 유지하면서 위임 대상 코드를 실행할 수 있습니다. 따라서 오래된 UI 레이블이 아니라 체인 규칙과 실제 계정 코드를 사용해 분류해야 합니다.
상태 전환을 감사하는 7단계
- 관측 기준을 고정합니다. 네트워크,
chainId, 포크 규칙, 블록 번호와 해시, 타임스탬프, 그리고pending,latest,safe,finalized같은 블록 태그를 기록합니다. 체인 선두에 가까운 상태는 리오그 후 바뀔 수 있으므로 서로 다른 블록의 사실을 표시 없이 합쳐서는 안 됩니다. - 프로토콜 계정 필드인
nonce, 네이티브balance,storageRoot,codeHash를 읽습니다. 코드가 EIP-7702 위임 표시자라면 해당 포크 규칙에 따라 위임 대상을 확인합니다. 프록시 및 위임 계정은 구현 코드, 업그레이드 통제, 스토리지 레이아웃을 각각 식별합니다. - 애플리케이션 잔액의 위치를 찾습니다. ETH는 네이티브 잔액을 바꾸지만 ERC-20 잔액은 일반적으로 토큰 컨트랙트 스토리지의 매핑을 바꿉니다. 허용량, 부채, 담보 및 보상은 다른 컨트랙트와 슬롯에 있을 수 있습니다. 토큰 소수 자릿수와 로그는 해석을 돕지만 추가 계정 리프 필드는 아닙니다.
- 최상위 트랜잭션의 유형, 체인 도메인, 서명, 발신자 nonce, 수신자 또는 생성, value, 입력, Gas 한도, 수수료 상한, 선택적 액세스 목록 또는 EIP-7702 인가를 디코딩하고 사전 검사합니다. 발신자는 value와 최대 수수료 약정을 감당해야 합니다. 거부된 트랜잭션은 블록에 포함되지 않고 온체인 Gas도 소비하지 않습니다.
- 이전 상태에서 시작해 블록 순서대로 트랜잭션을 실행합니다. EVM은 중첩 메시지 호출과 컨트랙트 생성 프레임을 처리하며 각 프레임에는 호출자, 피호출자, value, calldata, Gas 및 반환 상태가 있습니다. 공유 읽기와 쓰기 때문에 결과는 순서에 의존합니다. EIP-2930 액세스 목록은 명시된 계정과 슬롯을 웜 상태로 만들고 Gas 계산을 바꾸지만, 선언하지 않은 접근을 금지하거나 안전한 병렬 실행을 입증하지는 않습니다.
- 커밋과 롤백 경계를 적용합니다. 성공한 프레임의 상태와 로그는 부모가 나중에 되돌리지 않는 한 커밋됩니다.
REVERT는 실패 프레임의 쓰기, value 이전 및 로그를 롤백하고 사용하지 않은 Gas를 반환합니다. 외부 컨트랙트는 자식 호출 실패를 포착하고도 성공할 수 있습니다. 블록에 포함된 최상위 실패의 영수증은status = 0이지만 발신자 트랜잭션 nonce는 증가하고 소비한 Gas는 지급됩니다. EIP-7702 인가 처리는 후속 실행이 되돌려져도 적용되는 자체 영속성 규칙이 있습니다. - 실행 후 상태를 대조합니다. 네이티브 및 토큰 잔액 차이, 스토리지 변경, 영수증 상태, Gas 사용량, 실효 Gas 가격, 로그, 제공자 트레이스를 블록이 확약한 루트와 맞춥니다. 트레이스는 제공자가 재구성한 것이며 별도의 합의 트랜잭션이 아닙니다. 필요한 최종성을 기다린 뒤 대체 트랜잭션, 리오그, 인덱서 수정, 브리지, 롤업 및 회계상 환입을 명시적으로 처리합니다.
네 가지 계산 예시
- EIP-1559 ETH 이체. A의 시작 잔액은
5 ETH, nonce는12이고 B의 시작 잔액은1 ETH입니다. A가1 ETH를 보내며21,000 gas, 기본 수수료20 gwei, 우선 수수료 상한3 gwei, 최대 수수료40 gwei를 지정합니다. 실효 Gas 가격은min(40, 20 + 3) = 23 gwei이고 총수수료는21,000 × 23 gwei = 0.000483 ETH이며, 이 중0.000420 ETH가 기본 수수료로 소각되고0.000063 ETH가 우선 수수료입니다. 서명 시점의 최대 필요액은1 ETH + 21,000 × 40 gwei = 1.000840 ETH입니다. 최종 잔액은 A가3.999517 ETH, B가2 ETH이며 A의 nonce는13입니다. - 포함되었지만 되돌려진 트랜잭션. A의 시작 잔액은
2 ETH, nonce는7입니다. A가0.50 ETH를 포함해 컨트랙트를 호출하고 최상위 실행이80,000 gas소비 후 되돌려졌다고 가정합니다. 실효 Gas 가격은25 gwei이므로 수수료는80,000 × 25 gwei = 0.002000 ETH입니다. 컨트랙트 스토리지 쓰기, 로그 및0.50 ETH이전은 롤백되지만 A의 최종 잔액은1.998000 ETH, nonce는8, 영수증은status = 0입니다. 자식 호출 실패가 포착되었다면 외부 영수증이status = 1일 수도 있습니다. - 토큰 잔액은 컨트랙트 스토리지. 토큰 컨트랙트에 Alice가
1,000 units, Bob이200 units로 기록되어 있습니다.250 units이체에 성공하면 Alice는750 units, Bob은450 units가 되어 총1,200 units가 유지됩니다. Alice의 최상위 트랜잭션이60,000 gas × 20 gwei = 0.001200 ETH를 사용했다면 네이티브 ETH 잔액은 별도로 그 수수료만큼 감소합니다. 토큰 계정의storageRoot와 전역stateRoot는 바뀌지만 토큰 원금이 Alice의 네이티브 계정 잔액이 된 적은 없습니다. - EIP-7702 영속성 경계. 후원자가 nonce
5인 계정 A가 구현 D에 보낸 인가를 포함한 set-code 트랜잭션을 제출합니다. 프로토콜은23-byte표시자0xef0100 || 20-byte address를 기록하고 A의 인가 nonce를6으로 올립니다. 그 외부 트랜잭션의 후속 실행이 되돌려져도 이미 처리된 위임 표시자와 인가 nonce는 남습니다. 이는 실패 호출이 일반 EVM 스토리지에 쓴 값의 롤백 경계와 다릅니다.
위험과 통제
- 잘못된 체인, 포크, 블록 해시 또는 블록 태그를 읽으면 내부적으로 일관되지 않은 상태 스냅샷이 생성됩니다.
- 오래되거나 신뢰할 수 없는 RPC는 체인 선두 상태를 누락하거나 지연하거나 잘못 보고할 수 있습니다.
- 대기 중 nonce 경쟁, 공백, 대체로 인해 대기열 가정이 무효가 될 수 있습니다.
- 지갑의 “취소”는 보통 프로토콜 수준 삭제가 아니라 대체 트랜잭션입니다.
- value와 최대 수수료를 감당할 잔액이 부족하면 트랜잭션이 포함되지 않습니다.
- 기본 수수료 변동이나 수수료 상한 오류는 포함을 늦추거나 비용을 바꿀 수 있습니다.
- EIP-7702 코드로 인해 오래된 계정 판별법이 EOA를 잘못 분류할 수 있습니다.
- 악성 위임 대상, 초기화 결함 또는 인가 재실행이 EIP-7702 계정을 침해할 수 있습니다.
- 프록시 업그레이드와 위임 호출로 코드 및 스토리지 해석이 시간에 따라 바뀔 수 있습니다.
- 키, 서명 도메인 또는 체인 ID 오류가 탈취나 재실행을 인가할 수 있습니다.
- 재진입과 공유 상태 순서가 한 번의 실행 안에서 잔액을 바꿀 수 있습니다.
- 자식 호출 실패를 포착해 외부 트랜잭션이 여전히 성공으로 표시될 수 있습니다.
- 최상위 되돌림이나 Gas 소진도 Gas를 소비하고 발신자 nonce를 증가시킵니다.
- 토큰 소수 자릿수, 이체 수수료, 리베이스 및 훅은 단순한 잔액 계산을 무효화할 수 있습니다.
- 지갑 잔액만 대조하면 허용량, 부채, 담보 및 보상을 빠뜨릴 수 있습니다.
- 로그는 없거나, 되돌려지거나, 오해를 일으키거나, 최종 상태 증명에 충분하지 않을 수 있습니다.
- 탐색기의 “내부 트랜잭션”과 제공자 트레이스는 재구성 방식 때문에 서로 다를 수 있습니다.
- 액세스 목록은 불완전하거나 중복되거나 비경제적일 수 있으며 읽기/쓰기 집합을 잠그지 않습니다.
- 공유 상태 순서, 우선 수수료 및 MEV가 실행 결과를 바꿀 수 있습니다.
- 리오그, 프루닝, 증명 이용 불가, L2 시스템 전환 및 브리지 최종성이 회계를 되돌리거나 불명확하게 할 수 있습니다.
흔한 오해
- “지갑이 온체인 잔액을 저장한다.” 지갑은 자격 증명을 보관하고 네트워크에서 얻은 상태를 표시합니다.
- “모든 주소는 코드가 없는 EOA 또는 일반 컨트랙트 중 하나로 영구히 남는다.” EIP-7702 위임은 이런 코드 판별법을 바꿉니다.
- “표시되는 모든 이체는 별도의 이더리움 트랜잭션이다.” 토큰 이벤트와 내부 메시지 호출 트레이스는 최상위 서명 트랜잭션이 아닙니다.
- “실패한 트랜잭션은 아무것도 바꾸지 않고 비용도 들지 않는다.” 블록에 포함된 실패는 Gas를 소비하고 발신자 nonce를 진행시킬 수 있습니다.
- “계정 모델이나 액세스 목록은 UTXO보다 빠른 병렬 실행을 보장한다.” 성능과 충돌은 전체 프로토콜과 작업 부하에 달려 있습니다.