EstimageGas метод использует тот же инструментарий что и во время создания блоков. Только применятся меньше правил.
Общие моменты:
- берут состояние state на запрошенный блок Х
- подготавливают EVM контекст для исполнения транзакций
Разные моменты:
- EstimateGas ограничивается исполнением транзакции и взятием только GasUsed (/internal/ethapi/api.go:1056
DoEstimateGas)- Во время создания блока исполняются все транзакции и формируется их receipt с сохранением нового состояния state. (Копать от core/state_processor.go:95
applyTransaction)В теории возможно производить симуляцию своих транзакций *без signTransaction* и получать tx.Logs и прочие детали будто транзакция смайнена.