Skip to content

Commit

Permalink
initial getpointfromx
Browse files Browse the repository at this point in the history
  • Loading branch information
FrancoGiachetta committed Oct 14, 2024
1 parent 55ddb8b commit c999c4c
Show file tree
Hide file tree
Showing 2 changed files with 86 additions and 5 deletions.
37 changes: 35 additions & 2 deletions src/vm/array.rs
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ use cairo_lang_sierra::{
array::ArrayConcreteLibfunc,
core::{CoreLibfunc, CoreType, CoreTypeConcrete},
lib_func::{SignatureAndTypeConcreteLibfunc, SignatureOnlyConcreteLibfunc},
ConcreteLibfunc,
},
program_registry::ProgramRegistry,
};
Expand All @@ -17,7 +18,7 @@ pub fn eval(
) -> EvalAction {
match selector {
ArrayConcreteLibfunc::New(info) => eval_new(registry, info, args),
ArrayConcreteLibfunc::SpanFromTuple(_) => todo!(),
ArrayConcreteLibfunc::SpanFromTuple(info) => eval_span_from_tuple(registry, info, args),
ArrayConcreteLibfunc::TupleFromSpan(_) => todo!(),
ArrayConcreteLibfunc::Append(info) => eval_append(registry, info, args),
ArrayConcreteLibfunc::PopFront(info) => eval_pop_front(registry, info, args),
Expand Down Expand Up @@ -50,7 +51,7 @@ pub fn eval_new(
CoreTypeConcrete::Array(info) => &info.ty,
_ => unreachable!(),
};

//dbg!("ARRAY: {}", &ty);
EvalAction::NormalBranch(
0,
smallvec![Value::Array {
Expand All @@ -60,6 +61,38 @@ pub fn eval_new(
)
}

fn eval_span_from_tuple(
registry: &ProgramRegistry<CoreType, CoreLibfunc>,
info: &SignatureAndTypeConcreteLibfunc,
args: Vec<Value>,
) -> EvalAction {
let [Value::Struct(data)]: [Value; 1] = args.try_into().unwrap() else {
panic!()
};

let type_info = registry
.get_type(&info.branch_signatures()[0].vars[0].ty)
.unwrap();
let ty = match type_info {
CoreTypeConcrete::Snapshot(info) => {
let type_info = registry.get_type(&info.ty).unwrap();
match type_info {
CoreTypeConcrete::Array(info) => &info.ty,
_ => unreachable!(),
}
}
_ => unreachable!(),
};

EvalAction::NormalBranch(
0,
smallvec![Value::Array {
ty: ty.clone(),
data
}],
)
}

pub fn eval_append(
registry: &ProgramRegistry<CoreType, CoreLibfunc>,
info: &SignatureAndTypeConcreteLibfunc,
Expand Down
54 changes: 51 additions & 3 deletions src/vm/starknet.rs
Original file line number Diff line number Diff line change
@@ -1,11 +1,11 @@
use super::EvalAction;
use crate::{starknet::StarknetSyscallHandler, Value};
use crate::{starknet::{ StarknetSyscallHandler, U256}, Value};
use cairo_lang_sierra::{
extensions::{
consts::SignatureAndConstConcreteLibfunc,
core::{CoreLibfunc, CoreType, CoreTypeConcrete},
lib_func::SignatureOnlyConcreteLibfunc,
starknet::StarkNetConcreteLibfunc,
starknet::{self, secp256::Secp256ConcreteLibfunc, StarkNetConcreteLibfunc},
ConcreteLibfunc,
},
program_registry::ProgramRegistry,
Expand Down Expand Up @@ -98,7 +98,9 @@ pub fn eval(
eval_send_message_to_l1(registry, info, args, syscall_handler)
}
StarkNetConcreteLibfunc::Testing(_info) => todo!(),
StarkNetConcreteLibfunc::Secp256(_info) => todo!(),
StarkNetConcreteLibfunc::Secp256(info) => {
eval_secp256(registry, info, args, syscall_handler)
}
}
}

Expand Down Expand Up @@ -1015,3 +1017,49 @@ fn eval_sha256_process_block(
),
}
}

fn eval_secp256(
registry: &ProgramRegistry<CoreType, CoreLibfunc>,
info: &Secp256ConcreteLibfunc,
args: Vec<Value>,
syscall_handler: &mut impl StarknetSyscallHandler,
) -> EvalAction {
match info {
Secp256ConcreteLibfunc::K1(libfunc) => match libfunc {
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::New(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::Add(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::Mul(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::GetPointFromX(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::GetXy(_) => todo!(),
},
Secp256ConcreteLibfunc::R1(libfunc) => match libfunc {
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::New(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::Add(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::Mul(_) => todo!(),
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::GetPointFromX(info) => {
dbg!("SIGNATURE: {}", info.signature.param_signatures.iter().map(|x| &x.ty).collect::<Vec<_>>());
dbg!("SIGNATURE: {}", info.signature.branch_signatures.iter().map(|x| x.vars.iter().map(|x|&x.ty).collect::<Vec<_>>()).collect::<Vec<_>>());
dbg!("ARGS {}", &args);
let [Value::U128(mut gas), system, Value::Struct(x_arg), Value::Enum { self_ty: _, index, payload: _ }]: [Value; 4] = args.try_into().unwrap() else {
panic!()
};
let Value::U128(lo) = x_arg[0] else {
panic!();
};
let Value::U128(hi) = x_arg[1] else {
panic!();
};
let x = U256 { lo, hi };
let y_parity = index == 0;

match syscall_handler.secp256r1_get_point_from_x(x, y_parity, &mut gas) {
Ok(ok) => {},
Err(err) => {}
}

EvalAction::NormalBranch(0, smallvec![])
},
cairo_lang_sierra::extensions::starknet::secp256::Secp256OpConcreteLibfunc::GetXy(_) => todo!(),
},
}
}

0 comments on commit c999c4c

Please sign in to comment.