pub const fn call_cost(
spec_id: SpecId,
transfers_value: bool,
account_load: AccountLoad,
) -> u64
Expand description
Calculate call gas cost for the call instruction.
There is three types of gas.
- Account access gas. after berlin it can be cold or warm.
- Transfer value gas. If value is transferred and balance of target account is updated.
- If account is not existing and needs to be created. After Spurious dragon this is only accounted if value is transferred.
account_load.is_empty will be accounted only if hardfork is SPURIOUS_DRAGON and there is transfer value.
This means that [bytecode::opcode::EXTSTATICCALL
],
[bytecode::opcode::EXTDELEGATECALL
] that dont transfer value will not be
effected by this field.
[bytecode::opcode::CALL
], [bytecode::opcode::EXTCALL
] use this field.
While [bytecode::opcode::STATICCALL
], [bytecode::opcode::DELEGATECALL
],
[bytecode::opcode::CALLCODE
] need to have this field hardcoded to false
as they were present before SPURIOUS_DRAGON hardfork.