Skip to content

Commit

Permalink
Remove model.Address
Browse files Browse the repository at this point in the history
  • Loading branch information
ClementWalter committed Sep 27, 2024
1 parent 9daf6e4 commit 15c606e
Show file tree
Hide file tree
Showing 17 changed files with 78 additions and 185 deletions.
25 changes: 5 additions & 20 deletions cairo/programs/os.json
Original file line number Diff line number Diff line change
Expand Up @@ -231,7 +231,7 @@
"full_name": "src.model.model.Account",
"members": {
"address": {
"cairo_type": "src.model.model.Address*",
"cairo_type": "felt",
"offset": 0
},
"balance": {
Expand Down Expand Up @@ -290,21 +290,6 @@
"size": 14,
"type": "struct"
},
"src.model.model.Address": {
"full_name": "src.model.model.Address",
"members": {
"evm": {
"cairo_type": "felt",
"offset": 1
},
"starknet": {
"cairo_type": "felt",
"offset": 0
}
},
"size": 2,
"type": "struct"
},
"src.model.model.Args": {
"full_name": "src.model.model.Args",
"members": {},
Expand Down Expand Up @@ -578,7 +563,7 @@
"full_name": "src.model.model.Message",
"members": {
"address": {
"cairo_type": "src.model.model.Address*",
"cairo_type": "felt",
"offset": 9
},
"bytecode": {
Expand Down Expand Up @@ -606,7 +591,7 @@
"offset": 7
},
"code_address": {
"cairo_type": "src.model.model.Address*",
"cairo_type": "felt",
"offset": 10
},
"depth": {
Expand Down Expand Up @@ -850,11 +835,11 @@
"offset": 2
},
"recipient": {
"cairo_type": "src.model.model.Address*",
"cairo_type": "felt",
"offset": 1
},
"sender": {
"cairo_type": "src.model.model.Address*",
"cairo_type": "felt",
"offset": 0
}
},
Expand Down
6 changes: 3 additions & 3 deletions cairo/src/account.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -27,14 +27,14 @@ from src.utils.bytes import keccak
namespace Account {
// @notice Create a new account
// @dev New contract accounts start at nonce=1.
// @param address The address (starknet,evm) of the account
// @param address The address of the account
// @param code_len The length of the code
// @param code The pointer to the code
// @param nonce The initial nonce
// @return The updated state
// @return The account
func init(
address: model.Address*,
address: felt,
code_len: felt,
code: felt*,
code_hash: Uint256*,
Expand Down Expand Up @@ -422,7 +422,7 @@ namespace Account {
alloc_locals;
let storage_ptr = self.storage;
with storage_ptr {
Internals._cache_storage_keys(self.address.evm, storage_keys_len, storage_keys);
Internals._cache_storage_keys(self.address, storage_keys_len, storage_keys);
}
tempvar self = new model.Account(
address=self.address,
Expand Down
22 changes: 2 additions & 20 deletions cairo/src/evm.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -238,7 +238,7 @@ namespace EVM {
// and map it to the corresponding EVM contract via this convention
// this looks a bit odd and may need to be reviewed
let (local topics_with_address: felt*) = alloc();
assert [topics_with_address] = self.message.address.evm;
assert [topics_with_address] = self.message.address;
memcpy(dst=topics_with_address + 1, src=cast(topics, felt*), len=topics_len * Uint256.SIZE);
let event = model.Event(
topics_len=1 + topics_len * Uint256.SIZE,
Expand Down Expand Up @@ -268,11 +268,7 @@ namespace EVM {
}

let valid_jumpdests = self.message.valid_jumpdests;
with valid_jumpdests {
let is_valid_jumpdest = Internals.is_valid_jumpdest(
self.message.code_address, new_pc_offset
);
}
let (is_valid_jumpdest) = dict_read{dict_ptr=valid_jumpdests}(new_pc_offset);

tempvar message = new model.Message(
bytecode=self.message.bytecode,
Expand Down Expand Up @@ -321,17 +317,3 @@ namespace EVM {
);
}
}

namespace Internals {
func is_valid_jumpdest{
pedersen_ptr: HashBuiltin*,
range_check_ptr,
valid_jumpdests: DictAccess*,
state: model.State*,
}(code_address: model.Address*, index: felt) -> felt {
alloc_locals;
let (is_cached) = dict_read{dict_ptr=valid_jumpdests}(index);
// TODO: fix where valid_jumpdest should be stored
return is_cached;
}
}
2 changes: 1 addition & 1 deletion cairo/src/instructions/block_information.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -169,7 +169,7 @@ namespace Internals {
func selfbalance{
pedersen_ptr: HashBuiltin*, range_check_ptr, stack: model.Stack*, state: model.State*
}(evm: model.EVM*) {
let account = State.get_account(evm.message.address.evm);
let account = State.get_account(evm.message.address);
Stack.push(account.balance);
return ();
}
Expand Down
2 changes: 1 addition & 1 deletion cairo/src/instructions/environmental_information.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -30,7 +30,7 @@ namespace EnvironmentalInformation {
memory: model.Memory*,
state: model.State*,
}(evm: model.EVM*) -> model.EVM* {
let address = Helpers.to_uint256(evm.message.address.evm);
let address = Helpers.to_uint256(evm.message.address);
Stack.push(address);
return evm;
}
Expand Down
16 changes: 8 additions & 8 deletions cairo/src/instructions/memory_operations.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -315,17 +315,17 @@ namespace MemoryOperations {

// Has to be done BEFORE fetching the current value from the state,
// otherwise it would warm up the storage slot.
let is_storage_warm = State.is_storage_warm(evm.message.address.evm, key);
let is_storage_warm = State.is_storage_warm(evm.message.address, key);
local gas_cost: felt;
if (is_storage_warm == FALSE) {
assert gas_cost = Gas.COLD_SLOAD;
} else {
assert gas_cost = 0;
}

let account = State.get_account(evm.message.address.evm);
let account = State.get_account(evm.message.address);
let original_value = Account.fetch_original_storage(account, key);
let current_value = State.read_storage(evm.message.address.evm, key);
let current_value = State.read_storage(evm.message.address, key);

let (is_current_original) = uint256_eq(original_value, [current_value]);
let (is_current_new) = uint256_eq([new_value], [current_value]);
Expand Down Expand Up @@ -376,7 +376,7 @@ namespace MemoryOperations {
);
}

State.write_storage(evm.message.address.evm, key, new_value);
State.write_storage(evm.message.address, key, new_value);
// Return with the updated gas refund
return new model.EVM(
message=evm.message,
Expand Down Expand Up @@ -404,15 +404,15 @@ namespace MemoryOperations {

// Has to be done BEFORE fetching the current value from the state,
// otherwise it would warm up the storage slot.
let is_storage_warm = State.is_storage_warm(evm.message.address.evm, key);
let is_storage_warm = State.is_storage_warm(evm.message.address, key);
tempvar gas_cost = is_storage_warm * Gas.WARM_ACCESS + (1 - is_storage_warm) *
Gas.COLD_SLOAD;
let evm = EVM.charge_gas(evm, gas_cost);
if (evm.reverted != FALSE) {
return evm;
}

let value = State.read_storage(evm.message.address.evm, key);
let value = State.read_storage(evm.message.address, key);
Stack.push(value);
return evm;
}
Expand Down Expand Up @@ -451,7 +451,7 @@ namespace MemoryOperations {
);
}

State.write_transient_storage(evm.message.address.evm, key, new_value);
State.write_transient_storage(evm.message.address, key, new_value);
return new model.EVM(
message=evm.message,
return_data_len=evm.return_data_len,
Expand Down Expand Up @@ -483,7 +483,7 @@ namespace MemoryOperations {
}

// Operation
let value = State.read_transient_storage(evm.message.address.evm, key);
let value = State.read_transient_storage(evm.message.address, key);
Stack.push(value);
return evm;
}
Expand Down
28 changes: 14 additions & 14 deletions cairo/src/instructions/system_operations.cairo
Original file line number Diff line number Diff line change
Expand Up @@ -90,7 +90,7 @@ namespace SystemOperations {
);

let target_address = CreateHelper.get_evm_address(
evm.message.address.evm, popped_len, popped, size.low, bytecode
evm.message.address, popped_len, popped, size.low, bytecode
);

// @dev: performed before eventual subsequent early-returns of this function
Expand All @@ -109,7 +109,7 @@ namespace SystemOperations {
}

// Check sender balance and nonce
let sender = State.get_account(evm.message.address.evm);
let sender = State.get_account(evm.message.address);
let is_nonce_overflow = Helpers.is_zero(Constants.MAX_NONCE - sender.nonce);
let (is_balance_overflow) = uint256_lt([sender.balance], [value]);
let stack_depth_limit = Helpers.is_zero(Constants.STACK_MAX_DEPTH - evm.message.depth);
Expand Down Expand Up @@ -152,7 +152,7 @@ namespace SystemOperations {
let (valid_jumpdests_start, valid_jumpdests) = Helpers.initialize_jumpdests(
bytecode_len=size.low, bytecode=bytecode
);
tempvar address_zero = new model.Address(starknet=0, evm=0);
tempvar address_zero = 0;
tempvar message = new model.Message(
bytecode=bytecode,
bytecode_len=size.low,
Expand All @@ -161,7 +161,7 @@ namespace SystemOperations {
calldata=calldata,
calldata_len=0,
value=value,
caller=evm.message.address.evm,
caller=evm.message.address,
parent=parent,
address=target_account.address,
code_address=address_zero,
Expand Down Expand Up @@ -343,7 +343,7 @@ namespace SystemOperations {
let (ret_offset) = Stack.peek(0);
let (ret_size) = Stack.peek(1);

local call_sender = evm.message.address.evm;
local call_sender = evm.message.address;

// 2. Gas
// Memory expansion cost
Expand Down Expand Up @@ -476,7 +476,7 @@ namespace SystemOperations {
let (ret_offset) = Stack.peek(0);
let (ret_size) = Stack.peek(1);

local call_sender = evm.message.address.evm;
local call_sender = evm.message.address;

// Gas
// Memory expansion cost
Expand Down Expand Up @@ -579,7 +579,7 @@ namespace SystemOperations {
let (ret_offset) = Stack.peek(0);
let (ret_size) = Stack.peek(1);

local call_sender = evm.message.address.evm;
local call_sender = evm.message.address;

// Gas
let memory_expansion = Gas.max_memory_expansion_cost(
Expand Down Expand Up @@ -686,7 +686,7 @@ namespace SystemOperations {
let (ret_size) = Stack.peek(1);

let call_sender = evm.message.caller;
let to = evm.message.address.evm;
let to = evm.message.address;

// Gas
// Memory expansion cost
Expand Down Expand Up @@ -786,7 +786,7 @@ namespace SystemOperations {
tempvar access_gas_cost = (1 - is_recipient_warm) * Gas.COLD_ACCOUNT_ACCESS;

let is_recipient_alive = State.is_account_alive(recipient);
let self_account = State.get_account(evm.message.address.evm);
let self_account = State.get_account(evm.message.address);
tempvar is_self_balance_zero = Helpers.is_zero(self_account.balance.low) * Helpers.is_zero(
self_account.balance.high
);
Expand All @@ -807,7 +807,7 @@ namespace SystemOperations {
}

// If the account was created in the same transaction and recipient is self, the native token is burnt
tempvar is_recipient_not_self = is_not_zero(recipient - evm.message.address.evm);
tempvar is_recipient_not_self = is_not_zero(recipient - evm.message.address);

if (self_account.created != FALSE) {
tempvar recipient = is_recipient_not_self * recipient;
Expand All @@ -825,7 +825,7 @@ namespace SystemOperations {

// Marked as SELFDESTRUCT for commitment
// @dev: get_account again because add_transfer updated it
let account = State.get_account(evm.message.address.evm);
let account = State.get_account(evm.message.address);
let account = Account.selfdestruct(account);
State.update_account(account);

Expand Down Expand Up @@ -884,7 +884,7 @@ namespace CallHelper {
local code_len: felt = code_account.code_len;
local code: felt* = code_account.code;

tempvar to_address = new model.Address(starknet=0xdead, evm=to);
tempvar to_address = to;

tempvar parent = new model.Parent(evm, stack, memory, state);
let stack = Stack.init();
Expand Down Expand Up @@ -1211,7 +1211,7 @@ namespace CreateHelper {
let success = enough_gas * code_size_limit * is_prefix_not_0xef;

// Stack output: the address of the deployed contract, 0 if the deployment failed.
let (address_high, address_low) = split_felt(evm.message.address.evm * success);
let (address_high, address_low) = split_felt(evm.message.address * success);
tempvar address = new Uint256(low=address_low, high=address_high);
Stack.push(address);

Expand All @@ -1236,7 +1236,7 @@ namespace CreateHelper {
}

// Write bytecode and valid jumpdests to Account
let account = State.get_account(evm.message.address.evm);
let account = State.get_account(evm.message.address);
let account = Account.set_code(account, evm.return_data_len, evm.return_data);

// Update local state with the updated account inner pointers.
Expand Down
Loading

0 comments on commit 15c606e

Please sign in to comment.