Skip to content
This repository has been archived by the owner on Jul 22, 2024. It is now read-only.

Commit

Permalink
change before remove unused fucntions
Browse files Browse the repository at this point in the history
  • Loading branch information
fannyguthmann committed Aug 30, 2023
1 parent 26e8d5f commit 6f61239
Show file tree
Hide file tree
Showing 2 changed files with 114 additions and 83 deletions.
5 changes: 5 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,6 +56,8 @@ starknet = { workspace = true }
base64 = { version = "0.21.0", default-features = false, features = ["alloc"] }
flate2 = "1.0.25"
serde_json_pythonic = { git = "https://github.com/xJonathanLEI/serde_json_pythonic", tag = "v0.1.2"}
phf = { version = "0.11", default-features = false }
phf_macros = "0.11"

[dev-dependencies]
assert_matches = "1.5.0"
Expand All @@ -65,3 +67,6 @@ coverage-helper = "0.1.0"
path = "bench/internals.rs"
name = "internals"
harness = false

[build-dependencies]
phf_codegen = "0.11"
192 changes: 109 additions & 83 deletions src/syscalls/deprecated_syscall_handler.rs
Original file line number Diff line number Diff line change
@@ -1,6 +1,5 @@
use super::{
deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler, hint_code::*,
other_syscalls, syscall_handler::HintProcessorPostRun,
deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler, syscall_handler::HintProcessorPostRun,
};
use crate::{state::state_api::StateReader, syscalls::syscall_handler_errors::SyscallHandlerError};
use cairo_vm::{
Expand All @@ -21,6 +20,48 @@ use cairo_vm::{
vm::{errors::hint_errors::HintError, vm_core::VirtualMachine},
};
use std::{any::Any, collections::HashMap};
use phf_macros::phf_map;

enum SyscallHandler {
NotImplemented,
EmitEvent,
GetBlockNumber,
GetBlockTimestamp,
GetCallerAddress,
GetSequencerAddress,
LibraryCall,
LibraryCallL1Handler,
CallContract,
StorageRead,
StorageWrite,
SendMessageToL1,
GetTxSignature,
GetTxInfo,
GetContractAddress,
DelegateCall,
DelegateCallL1Handler,
ReplaceClass,
}
static HINT_CODES: phf::Map<&'static str, SyscallHandler> = phf_map! {
"DEPLOY" => SyscallHandler::NotImplemented,
"EMIT_EVENT_CODE" => SyscallHandler::EmitEvent,
"GET_BLOCK_NUMBER" => SyscallHandler::GetBlockNumber,
"GET_BLOCK_TIMESTAM" => SyscallHandler::GetBlockTimestamp,
"GET_CALLER_ADDRESS" => SyscallHandler::GetCallerAddress,
"GET_SEQUENCER_ADDRESS" => SyscallHandler::GetSequencerAddress,
"LIBRARY_CALL" => SyscallHandler::LibraryCall,
"LIBRARY_CALL_L1_HANDLER" => SyscallHandler::LibraryCallL1Handler,
"CALL_CONTRACT" => SyscallHandler::CallContract,
"STORAGE_READ" => SyscallHandler::StorageRead,
"STORAGE_WRITE" => SyscallHandler::StorageWrite,
"SEND_MESSAGE_TO_L1" => SyscallHandler::SendMessageToL1,
"GET_TX_SIGNATURE" => SyscallHandler::GetTxSignature,
"GET_TX_INFO" => SyscallHandler::GetTxInfo,
"GET_CONTRACT_ADDRESS" => SyscallHandler::GetContractAddress,
"DELEGATE_CALL" => SyscallHandler::DelegateCall,
"DELEGATE_L1_HANDLER" => SyscallHandler::DelegateCallL1Handler,
"REPLACE_CLASS" => SyscallHandler::ReplaceClass,
};

/// Definition of the deprecated syscall hint processor with associated structs
pub(crate) struct DeprecatedSyscallHintProcessor<'a, S: StateReader> {
Expand Down Expand Up @@ -67,90 +108,75 @@ impl<'a, S: StateReader> DeprecatedSyscallHintProcessor<'a, S> {
vm: &mut VirtualMachine,
_exec_scopes: &mut ExecutionScopes,
hint_data: &Box<dyn Any>,
constants: &HashMap<String, Felt252>,
_constants: &HashMap<String, Felt252>,
) -> Result<(), SyscallHandlerError> {
// Match against specific syscall hint codes and call the appropriate handler
let hint_data = hint_data
.downcast_ref::<HintProcessorData>()
.ok_or(SyscallHandlerError::WrongHintData)?;

match hint_data.code.as_str() {
ADDR_BOUND_PRIME => other_syscalls::addr_bound_prime(vm, hint_data, constants),
ADDR_IS_250 => other_syscalls::addr_is_250(vm, hint_data),
DEPLOY => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.deploy(vm, syscall_ptr)
}
EMIT_EVENT_CODE => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.emit_event(vm, syscall_ptr)
}
GET_BLOCK_NUMBER => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_block_number(vm, syscall_ptr)
}
GET_BLOCK_TIMESTAMP => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_block_timestamp(vm, syscall_ptr)
}
GET_CALLER_ADDRESS => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_caller_address(vm, syscall_ptr)
}
GET_SEQUENCER_ADDRESS => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_sequencer_address(vm, syscall_ptr)
}
LIBRARY_CALL => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.library_call(vm, syscall_ptr)
}
LIBRARY_CALL_L1_HANDLER => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler
.library_call_l1_handler(vm, syscall_ptr)
}
CALL_CONTRACT => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.call_contract(vm, syscall_ptr)
.downcast_ref::<HintProcessorData>()
.ok_or(SyscallHandlerError::WrongHintData)?;

let hint_code = &hint_data.code;
if let Some(syscall) = HINT_CODES.get(hint_code) {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
match syscall {
SyscallHandler::NotImplemented => {
SyscallHandlerError::NotImplemented(hint_data.code.clone());
},
SyscallHandler::EmitEvent => {
self.syscall_handler.emit_event(vm, syscall_ptr)?;
},
SyscallHandler::GetBlockNumber => {
self.syscall_handler.get_block_number(vm, syscall_ptr)?;
},
SyscallHandler::GetBlockTimestamp => {
self.syscall_handler.get_block_timestamp(vm, syscall_ptr)?;
},
SyscallHandler::GetCallerAddress => {
self.syscall_handler.get_caller_address(vm, syscall_ptr)?;
},
SyscallHandler::GetSequencerAddress => {
self.syscall_handler.get_sequencer_address(vm, syscall_ptr)?;
},
SyscallHandler::LibraryCall => {
self.syscall_handler.library_call(vm, syscall_ptr)?;
},
SyscallHandler::LibraryCallL1Handler => {
self.syscall_handler.library_call_l1_handler(vm, syscall_ptr)?;
},
SyscallHandler::CallContract => {
self.syscall_handler.call_contract(vm, syscall_ptr)?;
},
SyscallHandler::StorageRead => {
self.syscall_handler.storage_read(vm, syscall_ptr)?;
},
SyscallHandler::StorageWrite => {
self.syscall_handler.storage_write(vm, syscall_ptr)?;
},
SyscallHandler::SendMessageToL1 => {
self.syscall_handler.send_message_to_l1(vm, syscall_ptr)?;
},
SyscallHandler::GetTxSignature => {
self.syscall_handler.get_tx_signature(vm, syscall_ptr)?;
},
SyscallHandler::GetTxInfo => {
self.syscall_handler.get_tx_info(vm, syscall_ptr)?;
},
SyscallHandler::GetContractAddress => {
self.syscall_handler.get_contract_address(vm, syscall_ptr)?;
},
SyscallHandler::DelegateCall => {
self.syscall_handler.delegate_call(vm, syscall_ptr)?;
},
SyscallHandler::DelegateCallL1Handler => {
self.syscall_handler.delegate_l1_handler(vm, syscall_ptr)?;
},
SyscallHandler::ReplaceClass => {
self.syscall_handler.replace_class(vm, syscall_ptr)?;
},
}
STORAGE_READ => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.storage_read(vm, syscall_ptr)
}
STORAGE_WRITE => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.storage_write(vm, syscall_ptr)
}
SEND_MESSAGE_TO_L1 => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.send_message_to_l1(vm, syscall_ptr)
}
GET_TX_SIGNATURE => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_tx_signature(vm, syscall_ptr)
}
GET_TX_INFO => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_tx_info(vm, syscall_ptr)
}
GET_CONTRACT_ADDRESS => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_contract_address(vm, syscall_ptr)
}
DELEGATE_CALL => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.delegate_call(vm, syscall_ptr)
}
DELEGATE_L1_HANDLER => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.delegate_l1_handler(vm, syscall_ptr)
}
REPLACE_CLASS => {
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.replace_class(vm, syscall_ptr)
}
_ => Err(SyscallHandlerError::NotImplemented(hint_data.code.clone())),
Ok(())
} else {
Err(SyscallHandlerError::NotImplemented(hint_data.code.clone()))
}
}
}
Expand Down Expand Up @@ -1206,4 +1232,4 @@ mod tests {
assert_eq!(result_call_info.retdata, vec![260.into()]);
assert_eq!(result_call_info.storage_read_values, vec![250.into()]);
}
}
}

0 comments on commit 6f61239

Please sign in to comment.