Skip to content
This repository has been archived by the owner on Jan 9, 2025. It is now read-only.

Commit

Permalink
revert tx if multicall input is incoherent
Browse files Browse the repository at this point in the history
  • Loading branch information
enitrat committed Dec 5, 2024
1 parent 5a67ae1 commit 4ae241a
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 15 deletions.
7 changes: 3 additions & 4 deletions cairo_zero/kakarot/precompiles/kakarot_precompiles.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -150,10 +150,9 @@ namespace KakarotPrecompiles {
) = Internals.execute_multiple_cairo_calls(caller_address, calls_len, calls_ptr, 0);

if (reverted == FALSE and nb_executed_calls != number_of_calls) {
let (revert_reason_len, revert_reason) = Errors.precompileInputError();
return (
revert_reason_len, revert_reason, CAIRO_PRECOMPILE_GAS, Errors.EXCEPTIONAL_HALT
);
with_attr error_message("Number of executed calls does not match precompile input") {
assert nb_executed_calls = number_of_calls;

Check warning on line 154 in cairo_zero/kakarot/precompiles/kakarot_precompiles.cairo

View check run for this annotation

Codecov / codecov/patch

cairo_zero/kakarot/precompiles/kakarot_precompiles.cairo#L154

Added line #L154 was not covered by tests
}
}

return (output_len, output, gas_cost, reverted);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@

from kakarot_scripts.utils.kakarot import deploy, eth_send_transaction
from kakarot_scripts.utils.starknet import get_contract, invoke
from tests.utils.errors import evm_error
from tests.utils.errors import cairo_error, evm_error


@pytest_asyncio.fixture(scope="module")
Expand Down Expand Up @@ -107,16 +107,14 @@ async def test_should_fail_when_number_of_calls_mismatch_actual_calls(
# modify the number of calls to be different than the actual calls
tx_data = f"{wrong_nb_calls:064x}" + tx_data[64:]

_, response, success, _ = await eth_send_transaction(
to=f"0x{0x75003:040x}",
gas=21000 + 20000 * (len(calls)),
data=tx_data,
value=0,
caller_eoa=owner.starknet_contract,
)

assert not success
assert "Precompile: input error".encode() == bytes(response)
with cairo_error("Number of executed calls does not match precompile input"):
_, response, success, _ = await eth_send_transaction(
to=f"0x{0x75003:040x}",
gas=21000 + 20000 * (len(calls)),
data=tx_data,
value=0,
caller_eoa=owner.starknet_contract,
)

async def test_should_increase_counter_single_call_from_solidity(
self, cairo_counter, multicall_cairo_counter_caller
Expand Down

0 comments on commit 4ae241a

Please sign in to comment.