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

Commit

Permalink
feat: add initializer chain_id
Browse files Browse the repository at this point in the history
  • Loading branch information
obatirou committed Nov 5, 2024
1 parent 1d8d843 commit 81a9e6c
Show file tree
Hide file tree
Showing 4 changed files with 56 additions and 1 deletion.
10 changes: 10 additions & 0 deletions cairo_zero/kakarot/kakarot.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -70,6 +70,16 @@ func unpause{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}()
return ();
}

// @notice chain_id initializer
@external
func initialize_chain_id{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
chain_id: felt
) {
Ownable.assert_only_owner();
Kakarot.initialize_chain_id(chain_id);
return ();
}

// Constructor
@constructor
func constructor{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
Expand Down
13 changes: 13 additions & 0 deletions cairo_zero/kakarot/library.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -414,4 +414,17 @@ namespace Kakarot {
0, l1_sender, to, 2100000000, 1, value_u256, data_len, data, 0, access_list
);
}

// @notice Initialize the chain ID
// @param chain_id The chain ID
func initialize_chain_id{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}(
chain_id: felt
) {
with_attr error_message("Kakarot: chain_id already initialized") {
let (current_chain_id) = Kakarot_chain_id.read();
assert current_chain_id = 0;
}
Kakarot_chain_id.write(chain_id);
return ();
}
}
8 changes: 8 additions & 0 deletions cairo_zero/tests/src/kakarot/test_kakarot.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -23,6 +23,7 @@ from kakarot.kakarot import (
handle_l1_message,
pause,
unpause,
initialize_chain_id,
)
from kakarot.model import model
from kakarot.account import Account
Expand Down Expand Up @@ -280,3 +281,10 @@ func test__unpause{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_p
unpause();
return ();
}

func test__initialize_chain_id{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_check_ptr}() {
tempvar chain_id;
%{ ids.chain_id = program_input["chain_id"] %}
initialize_chain_id(chain_id);
return ();
}
26 changes: 25 additions & 1 deletion cairo_zero/tests/src/kakarot/test_kakarot.py
Original file line number Diff line number Diff line change
Expand Up @@ -97,7 +97,6 @@ def test_should_pause(self, cairo_run):
)

class TestUnpause:

@SyscallHandler.patch("Ownable_owner", 0xDEAD)
def test_should_assert_only_owner(self, cairo_run):
with cairo_error(message="Ownable: caller is not the owner"):
Expand Down Expand Up @@ -185,6 +184,31 @@ def test_should_set_prev_randao(self, cairo_run):
value=prev_randao,
)

class TestInitializeChainId:
@SyscallHandler.patch("Ownable_owner", 0xDEAD)
def test_should_assert_only_owner(self, cairo_run):
with cairo_error(message="Ownable: caller is not the owner"):
cairo_run("test__initialize_chain_id", chain_id=0xABC)

@SyscallHandler.patch("Ownable_owner", SyscallHandler.caller_address)
def test_should_initialize_chain_id(self, cairo_run):
chain_id = 0x123

cairo_run("test__initialize_chain_id", chain_id=chain_id)
SyscallHandler.mock_storage.assert_any_call(
address=get_storage_var_address("Kakarot_chain_id"),
value=chain_id,
)

@SyscallHandler.patch("Ownable_owner", SyscallHandler.caller_address)
def test_should_fail_initialize_chain_id_twice(self, cairo_run):
chain_id = 0x123
with (
cairo_error(message="Kakarot: chain_id already initialized"),
SyscallHandler.patch("Kakarot_chain_id", chain_id),
):
cairo_run("test__initialize_chain_id", chain_id=chain_id)

class TestBlockGasLimit:
@SyscallHandler.patch("Ownable_owner", 0xDEAD)
def test_should_assert_only_owner(self, cairo_run):
Expand Down

0 comments on commit 81a9e6c

Please sign in to comment.