From 1dc5269659ccbade1560bce89dd73eef06124be4 Mon Sep 17 00:00:00 2001 From: Mathieu <60658558+enitrat@users.noreply.github.com> Date: Tue, 16 Apr 2024 11:28:23 -0300 Subject: [PATCH] dev: create cairo1helpers fixture (#777) --- crates/contracts/src/cairo1_helpers.cairo | 39 +++++++++++-------- crates/contracts/src/lib.cairo | 4 ++ .../src/mocks/cairo1_helpers_fixture.cairo | 15 +++++++ 3 files changed, 42 insertions(+), 16 deletions(-) create mode 100644 crates/contracts/src/mocks/cairo1_helpers_fixture.cairo diff --git a/crates/contracts/src/cairo1_helpers.cairo b/crates/contracts/src/cairo1_helpers.cairo index 0cdd9a338..c4f76833c 100644 --- a/crates/contracts/src/cairo1_helpers.cairo +++ b/crates/contracts/src/cairo1_helpers.cairo @@ -57,8 +57,8 @@ pub trait IHelpers { ); } -#[starknet::contract] -pub mod Cairo1Helpers { + +mod embeddable_impls { use core::keccak::cairo_keccak; use core::traits::Into; use core::{starknet, starknet::SyscallResultTrait}; @@ -69,19 +69,14 @@ pub mod Cairo1Helpers { use evm::precompiles::modexp::ModExp; use evm::precompiles::sha256::Sha256; use starknet::EthAddress; - use starknet::eth_signature::{verify_eth_signature}; - use starknet::secp256_trait::{Signature}; - - use super::{IPrecompiles, IHelpers}; + use starknet::eth_signature::{Signature, verify_eth_signature}; use utils::helpers::U256Trait; - #[storage] - struct Storage {} - #[abi(embed_v0)] - impl Precompiles of IPrecompiles { + #[starknet::embeddable] + pub impl Precompiles of super::IPrecompiles { fn exec_precompile( - self: @ContractState, address: felt252, data: Span + self: @TContractState, address: felt252, data: Span ) -> (bool, u128, Span) { let result = match address { 0 => Result::Err(EVMError::NotImplemented), @@ -98,14 +93,14 @@ pub mod Cairo1Helpers { } } - #[abi(embed_v0)] - pub impl Helpers of IHelpers { - fn get_block_hash(self: @ContractState, block_number: u64) -> felt252 { + #[starknet::embeddable] + pub impl Helpers of super::IHelpers { + fn get_block_hash(self: @TContractState, block_number: u64) -> felt252 { starknet::syscalls::get_block_hash_syscall(block_number).unwrap_syscall() } fn keccak( - self: @ContractState, + self: @TContractState, mut words: Array, last_input_word: u64, last_input_num_bytes: usize @@ -114,9 +109,21 @@ pub mod Cairo1Helpers { } fn verify_eth_signature( - self: @ContractState, msg_hash: u256, signature: Signature, eth_address: EthAddress + self: @TContractState, msg_hash: u256, signature: Signature, eth_address: EthAddress ) { verify_eth_signature(msg_hash, signature, eth_address); } } } + +#[starknet::contract] +pub mod Cairo1Helpers { + #[storage] + struct Storage {} + + #[abi(embed_v0)] + impl Precompiles = super::embeddable_impls::Precompiles; + + #[abi(embed_v0)] + impl Helpers = super::embeddable_impls::Helpers; +} diff --git a/crates/contracts/src/lib.cairo b/crates/contracts/src/lib.cairo index c22069786..247561672 100644 --- a/crates/contracts/src/lib.cairo +++ b/crates/contracts/src/lib.cairo @@ -12,3 +12,7 @@ mod tests; // Account transparent proxy mod uninitialized_account; + +mod mocks { + mod cairo1_helpers_fixture; +} diff --git a/crates/contracts/src/mocks/cairo1_helpers_fixture.cairo b/crates/contracts/src/mocks/cairo1_helpers_fixture.cairo new file mode 100644 index 000000000..766bc7d55 --- /dev/null +++ b/crates/contracts/src/mocks/cairo1_helpers_fixture.cairo @@ -0,0 +1,15 @@ +#[starknet::contract] +pub mod Cairo1HelpersFixture { + use contracts::cairo1_helpers::{IPrecompiles, IHelpers, embeddable_impls}; + + const VERSION: felt252 = 2; + + #[storage] + struct Storage {} + + #[abi(embed_v0)] + impl Precompiles = embeddable_impls::Precompiles; + + #[abi(embed_v0)] + impl Helpers = embeddable_impls::Helpers; +}