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

Commit

Permalink
add phf_map problem with the HintProcessorData string
Browse files Browse the repository at this point in the history
  • Loading branch information
fannyguthmann committed Aug 31, 2023
1 parent 6f61239 commit 98ef602
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 64 deletions.
56 changes: 55 additions & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

8 changes: 8 additions & 0 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -56,7 +56,11 @@ 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"}
<<<<<<< HEAD
phf = { version = "0.11", default-features = false }
=======
phf = "0.11"
>>>>>>> 94d1dc6 (add phf_map problem with the HintProcessorData string)
phf_macros = "0.11"

[dev-dependencies]
Expand All @@ -69,4 +73,8 @@ name = "internals"
harness = false

[build-dependencies]
<<<<<<< HEAD
phf_codegen = "0.11"
=======
phf_codegen = "0.11"
>>>>>>> 94d1dc6 (add phf_map problem with the HintProcessorData string)
1 change: 1 addition & 0 deletions src/lib.rs
Original file line number Diff line number Diff line change
Expand Up @@ -25,6 +25,7 @@ use utils::Address;
#[cfg(test)]
#[macro_use]
extern crate assert_matches;
extern crate phf_macros;

// Re-exports
pub use crate::services::api::contract_classes::deprecated_contract_class::{
Expand Down
152 changes: 89 additions & 63 deletions src/syscalls/deprecated_syscall_handler.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use super::{
deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler, syscall_handler::HintProcessorPostRun,
deprecated_business_logic_syscall_handler::DeprecatedBLSyscallHandler,
other_syscalls, syscall_handler::HintProcessorPostRun,
};
use crate::{state::state_api::StateReader, syscalls::syscall_handler_errors::SyscallHandlerError};
use cairo_vm::{
Expand All @@ -23,7 +24,7 @@ use std::{any::Any, collections::HashMap};
use phf_macros::phf_map;

enum SyscallHandler {
NotImplemented,
Deploy,
EmitEvent,
GetBlockNumber,
GetBlockTimestamp,
Expand All @@ -41,9 +42,13 @@ enum SyscallHandler {
DelegateCall,
DelegateCallL1Handler,
ReplaceClass,
//Normal hint
AddrBoundPrime,
AddrIs250,
}

static HINT_CODES: phf::Map<&'static str, SyscallHandler> = phf_map! {
"DEPLOY" => SyscallHandler::NotImplemented,
"DEPLOY" => SyscallHandler::Deploy,
"EMIT_EVENT_CODE" => SyscallHandler::EmitEvent,
"GET_BLOCK_NUMBER" => SyscallHandler::GetBlockNumber,
"GET_BLOCK_TIMESTAM" => SyscallHandler::GetBlockTimestamp,
Expand All @@ -61,6 +66,8 @@ static HINT_CODES: phf::Map<&'static str, SyscallHandler> = phf_map! {
"DELEGATE_CALL" => SyscallHandler::DelegateCall,
"DELEGATE_L1_HANDLER" => SyscallHandler::DelegateCallL1Handler,
"REPLACE_CLASS" => SyscallHandler::ReplaceClass,
"ADDRBOUNDPRIME" => SyscallHandler::AddrBoundPrime,
"ADDRIS250" => SyscallHandler::AddrIs250,
};

/// Definition of the deprecated syscall hint processor with associated structs
Expand Down Expand Up @@ -108,7 +115,7 @@ 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
Expand All @@ -117,67 +124,86 @@ impl<'a, S: StateReader> DeprecatedSyscallHintProcessor<'a, S> {

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)?;
},
}
Ok(())
} else {
Err(SyscallHandlerError::NotImplemented(hint_data.code.clone()))
SyscallHandler::AddrBoundPrime => other_syscalls::addr_bound_prime(vm, hint_data, constants),
SyscallHandler::AddrIs250 => other_syscalls::addr_is_250(vm, hint_data),
SyscallHandler::Deploy => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.deploy(vm, syscall_ptr)?;
}),
SyscallHandler::EmitEvent => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.emit_event(vm, syscall_ptr)?;
}),
SyscallHandler::GetBlockNumber => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_block_number(vm, syscall_ptr)?;
}),
SyscallHandler::GetBlockTimestamp => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_block_timestamp(vm, syscall_ptr)?;
}),
SyscallHandler::GetCallerAddress => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_caller_address(vm, syscall_ptr)?;
}),
SyscallHandler::GetSequencerAddress => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_sequencer_address(vm, syscall_ptr)?;
}),
SyscallHandler::LibraryCall => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.library_call(vm, syscall_ptr)?;
}),
SyscallHandler::LibraryCallL1Handler => Ok({
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)?;
}),
SyscallHandler::CallContract => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.call_contract(vm, syscall_ptr)?;
}),
SyscallHandler::StorageRead => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.storage_read(vm, syscall_ptr)?;
}),
SyscallHandler::StorageWrite => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.storage_write(vm, syscall_ptr)?;
}),
SyscallHandler::SendMessageToL1 => Ok({
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)?;
}),
SyscallHandler::GetTxSignature => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_tx_signature(vm, syscall_ptr)?;
}),
SyscallHandler::GetTxInfo => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_tx_info(vm, syscall_ptr)?;
}),
SyscallHandler::GetContractAddress => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.get_contract_address(vm, syscall_ptr)?;
}),
SyscallHandler::DelegateCall => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.delegate_call(vm, syscall_ptr)?;
}),
SyscallHandler::DelegateCallL1Handler => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.delegate_l1_handler(vm, syscall_ptr)?;
}),
SyscallHandler::ReplaceClass => Ok({
let syscall_ptr = get_syscall_ptr(vm, &hint_data.ids_data, &hint_data.ap_tracking)?;
self.syscall_handler.replace_class(vm, syscall_ptr)?;
}),
}
} else {
// Make sure to return a Result type here
return Err(SyscallHandlerError::NotImplemented(hint_data.code.clone()));
}
}
}

Expand Down

0 comments on commit 98ef602

Please sign in to comment.