Skip to content

Commit

Permalink
fix logic regarding failure code of precompiles
Browse files Browse the repository at this point in the history
  • Loading branch information
enitrat committed Sep 23, 2024
1 parent cc95f86 commit f7829db
Show file tree
Hide file tree
Showing 2 changed files with 14 additions and 10 deletions.
21 changes: 13 additions & 8 deletions src/kakarot/interpreter.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -83,18 +83,23 @@ namespace Interpreter {
caller_code_address,
caller_address,
);

let precompile_reverted = is_not_zero(revert_code);
// Consume all gas if precompile execution __failed__
if (precompile_reverted != FALSE) {
tempvar gas_used = evm.gas_left;
// No need to charge gas as precompiles can only trigger EXCEPTIONAL_REVERT
// which will consume the entire gas of the context.
let evm = EVM.stop(evm, output_len, output, revert_code);
tempvar range_check_ptr = range_check_ptr;
tempvar evm = evm;
} else {
tempvar gas_used = gas_used;
// Charge gas before stopping
let evm = EVM.charge_gas(evm, gas_used);
let evm = EVM.stop(evm, output_len, output, evm.reverted);
tempvar range_check_ptr = range_check_ptr;
tempvar evm = evm;
}
let gas_used = [ap - 1];
let evm = EVM.charge_gas(evm, gas_used);
let evm_reverted = is_not_zero(evm.reverted);
let success = (1 - precompile_reverted) * (1 - evm_reverted);
let evm = EVM.stop(evm, output_len, output, 1 - success);
let range_check_ptr = [ap - 2];
let evm = cast([ap - 1], model.EVM*);
let is_cairo_precompile_called = PrecompilesHelpers.is_kakarot_precompile(
evm.message.code_address.evm
);
Expand Down
3 changes: 1 addition & 2 deletions src/kakarot/precompiles/precompiles.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -24,7 +24,6 @@ from kakarot.precompiles.precompiles_helpers import (
FIRST_KAKAROT_PRECOMPILE_ADDRESS,
)
from utils.utils import Helpers
from tests.utils.debug import Debug

// @title Precompile related functions.
namespace Precompiles {
Expand All @@ -38,7 +37,7 @@ namespace Precompiles {
// @return output_len The output length.
// @return output The output array.
// @return gas_used The gas usage of precompile.
// @return reverted Whether the precompile ran successfully or not
// @return reverted The reverted code in {0(success), REVERTED, EXCEPTIONAL_HALT}.
func exec_precompile{
syscall_ptr: felt*,
pedersen_ptr: HashBuiltin*,
Expand Down

0 comments on commit f7829db

Please sign in to comment.