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

Commit ae35768

Browse files
Fix fee calculation (#709)
* Add remaining gas to InvokeFunction execute call * Replace all_cairo by starknet layout * Fix fee transfer * Fix test_simulate_declare_v2 --------- Co-authored-by: Juan Bono <juanbono94@gmail.com>
1 parent 5dd7642 commit ae35768

File tree

8 files changed

+57
-28
lines changed

8 files changed

+57
-28
lines changed

src/execution/execution_entry_point.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -302,7 +302,7 @@ impl ExecutionEntryPoint {
302302

303303
// create starknet runner
304304
let mut vm = VirtualMachine::new(false);
305-
let mut cairo_runner = CairoRunner::new(&contract_class.program, "all_cairo", false)?;
305+
let mut cairo_runner = CairoRunner::new(&contract_class.program, "starknet", false)?;
306306
cairo_runner.initialize_function_runner(&mut vm)?;
307307

308308
validate_contract_deployed(state, &self.contract_address)?;
@@ -415,7 +415,7 @@ impl ExecutionEntryPoint {
415415
// get a program from the casm contract class
416416
let program: Program = contract_class.as_ref().clone().try_into()?;
417417
// create and initialize a cairo runner for running cairo 1 programs.
418-
let mut cairo_runner = CairoRunner::new(&program, "all_cairo", false)?;
418+
let mut cairo_runner = CairoRunner::new(&program, "starknet", false)?;
419419

420420
cairo_runner.initialize_function_runner_cairo_1(
421421
&mut vm,

src/lib.rs

Lines changed: 33 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -189,6 +189,8 @@ mod test {
189189
};
190190
use crate::estimate_fee;
191191
use crate::estimate_message_fee;
192+
use crate::execution::execution_entry_point::ExecutionEntryPoint;
193+
use crate::execution::TransactionExecutionContext;
192194
use crate::hash_utils::calculate_contract_address;
193195
use crate::services::api::contract_classes::deprecated_contract_class::ContractClass;
194196
use crate::state::state_api::State;
@@ -246,8 +248,35 @@ mod test {
246248
let entrypoints = contract_class.entry_points_by_type;
247249
let entrypoint_selector = &entrypoints.get(&EntryPointType::External).unwrap()[0].selector;
248250

249-
let (transaction_context, state) = create_account_tx_test_state().unwrap();
251+
let (block_context, mut state) = create_account_tx_test_state().unwrap();
250252

253+
// Add balance to account
254+
let calldata = [TEST_CONTRACT_ADDRESS.0.clone(), 0.into(), 1000.into()].to_vec();
255+
256+
let fee_transfer_call = ExecutionEntryPoint::new(
257+
block_context.starknet_os_config.fee_token_address.clone(),
258+
calldata,
259+
felt_str!("37313232031488507829243159589199778096432170431839144894988167447577083165"), // mint entrypoint
260+
block_context.starknet_os_config.fee_token_address.clone(),
261+
EntryPointType::External,
262+
None,
263+
None,
264+
100000,
265+
);
266+
267+
let mut tx_execution_context = TransactionExecutionContext::default();
268+
let mut resources_manager = ExecutionResourcesManager::default();
269+
let _fee_transfer_exec = fee_transfer_call
270+
.execute(
271+
&mut state,
272+
&block_context,
273+
&mut resources_manager,
274+
&mut tx_execution_context,
275+
false,
276+
)
277+
.unwrap();
278+
279+
// Fibonacci
251280
let calldata = [1.into(), 1.into(), 10.into()].to_vec();
252281
let invoke_function = InvokeFunction::new(
253282
TEST_CONTRACT_ADDRESS.clone(),
@@ -263,8 +292,8 @@ mod test {
263292
.unwrap();
264293
let transaction = Transaction::InvokeFunction(invoke_function);
265294

266-
let estimated_fee = estimate_fee(&transaction, state, &transaction_context).unwrap();
267-
assert_eq!(estimated_fee, (0, 0));
295+
let estimated_fee = estimate_fee(&transaction, state, &block_context).unwrap();
296+
assert_eq!(estimated_fee, (12, 0));
268297
}
269298

270299
#[test]
@@ -812,7 +841,7 @@ mod test {
812841
100_000_000,
813842
false,
814843
false,
815-
false,
844+
true,
816845
)
817846
.unwrap();
818847
}

src/runner/mod.rs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -411,7 +411,7 @@ mod test {
411411
#[test]
412412
fn prepare_os_context_test() {
413413
let program = cairo_vm::types::program::Program::default();
414-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
414+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
415415
let mut vm = VirtualMachine::new(true);
416416

417417
let os_context = StarknetRunner::<SyscallHintProcessor<CachedState::<InMemoryStateReader>>>::prepare_os_context_cairo0(&cairo_runner, &mut vm);
@@ -425,7 +425,7 @@ mod test {
425425
#[test]
426426
fn run_from_entrypoint_should_fail_with_no_exec_base() {
427427
let program = cairo_vm::types::program::Program::default();
428-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
428+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
429429
let vm = VirtualMachine::new(true);
430430

431431
let mut state = CachedState::<InMemoryStateReader>::default();
@@ -441,7 +441,7 @@ mod test {
441441
#[test]
442442
fn get_os_segment_ptr_range_should_fail_when_ptr_offset_is_not_zero() {
443443
let program = cairo_vm::types::program::Program::default();
444-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
444+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
445445
let vm = VirtualMachine::new(true);
446446

447447
let mut state = CachedState::<InMemoryStateReader>::default();
@@ -460,7 +460,7 @@ mod test {
460460
#[test]
461461
fn validate_segment_pointers_should_fail_when_offset_is_not_zero() {
462462
let program = cairo_vm::types::program::Program::default();
463-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
463+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
464464
let vm = VirtualMachine::new(true);
465465

466466
let mut state = CachedState::<InMemoryStateReader>::default();
@@ -482,7 +482,7 @@ mod test {
482482
#[test]
483483
fn validate_segment_pointers_should_fail_when_base_is_not_a_value() {
484484
let program = cairo_vm::types::program::Program::default();
485-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
485+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
486486
let vm = VirtualMachine::new(true);
487487

488488
let mut state = CachedState::<InMemoryStateReader>::default();
@@ -504,7 +504,7 @@ mod test {
504504
#[test]
505505
fn validate_segment_pointers_should_fail_with_invalid_segment_size() {
506506
let program = cairo_vm::types::program::Program::default();
507-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
507+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
508508
let vm = VirtualMachine::new(true);
509509

510510
let mut state = CachedState::<InMemoryStateReader>::default();
@@ -524,7 +524,7 @@ mod test {
524524
#[test]
525525
fn validate_segment_pointers_should_fail_when_stop_is_not_a_value() {
526526
let program = cairo_vm::types::program::Program::default();
527-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
527+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
528528
let mut vm = VirtualMachine::new(true);
529529
vm.add_memory_segment();
530530
vm.compute_segments_effective_sizes();
@@ -547,7 +547,7 @@ mod test {
547547
#[test]
548548
fn validate_segment_pointers_should_fail_with_invalid_stop_pointer() {
549549
let program = cairo_vm::types::program::Program::default();
550-
let cairo_runner = CairoRunner::new(&program, "all_cairo", false).unwrap();
550+
let cairo_runner = CairoRunner::new(&program, "starknet", false).unwrap();
551551
let mut vm = VirtualMachine::new(true);
552552
vm.add_memory_segment();
553553
vm.compute_segments_effective_sizes();

src/testing/mod.rs

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -57,15 +57,15 @@ lazy_static! {
5757

5858
// Others.
5959
// Blockifier had this value hardcoded to 2.
60-
pub static ref ACTUAL_FEE: Felt252 = Felt252::zero();
60+
pub static ref ACTUAL_FEE: Felt252 = Felt252::from(10000000);
6161
}
6262

63-
pub fn new_starknet_general_config_for_testing() -> BlockContext {
63+
pub fn new_starknet_block_context_for_testing() -> BlockContext {
6464
BlockContext::new(
6565
StarknetOsConfig::new(
6666
StarknetChainId::TestNet,
6767
TEST_ERC20_CONTRACT_ADDRESS.clone(),
68-
0,
68+
1,
6969
),
7070
0,
7171
0,
@@ -87,7 +87,7 @@ where
8787

8888
pub fn create_account_tx_test_state(
8989
) -> Result<(BlockContext, CachedState<InMemoryStateReader>), Box<dyn std::error::Error>> {
90-
let general_config = new_starknet_general_config_for_testing();
90+
let block_context = new_starknet_block_context_for_testing();
9191

9292
let test_contract_class_hash = felt_to_hash(&TEST_CLASS_HASH.clone());
9393
let test_account_contract_class_hash = felt_to_hash(&TEST_ACCOUNT_CONTRACT_CLASS_HASH.clone());
@@ -109,7 +109,7 @@ pub fn create_account_tx_test_state(
109109

110110
let test_contract_address = TEST_CONTRACT_ADDRESS.clone();
111111
let test_account_contract_address = TEST_ACCOUNT_CONTRACT_ADDRESS.clone();
112-
let test_erc20_address = general_config
112+
let test_erc20_address = block_context
113113
.starknet_os_config()
114114
.fee_token_address()
115115
.clone();
@@ -165,5 +165,5 @@ pub fn create_account_tx_test_state(
165165
Some(HashMap::new()),
166166
);
167167

168-
Ok((general_config, cached_state))
168+
Ok((block_context, cached_state))
169169
}

src/transaction/fee.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -36,8 +36,8 @@ pub(crate) fn execute_fee_transfer<S: State + StateReader>(
3636

3737
let calldata = [
3838
block_context.block_info.sequencer_address.0.clone(),
39-
Felt252::from(actual_fee),
4039
0.into(),
40+
Felt252::from(actual_fee),
4141
]
4242
.to_vec();
4343

src/transaction/mod.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ impl Transaction {
6060
Transaction::DeclareV2(tx) => tx.execute(state, block_context),
6161
Transaction::Deploy(tx) => tx.execute(state, block_context),
6262
Transaction::DeployAccount(tx) => tx.execute(state, block_context),
63-
Transaction::InvokeFunction(tx) => tx.execute(state, block_context, 0),
63+
Transaction::InvokeFunction(tx) => tx.execute(state, block_context, remaining_gas),
6464
Transaction::L1Handler(tx) => tx.execute(state, block_context, remaining_gas),
6565
}
6666
}

starknet_programs/ERC20.cairo

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -157,7 +157,7 @@ func permissionedMint{syscall_ptr: felt*, pedersen_ptr: HashBuiltin*, range_chec
157157
recipient: felt, amount: Uint256
158158
) {
159159
alloc_locals;
160-
permitted_minter_only();
160+
//permitted_minter_only(); <- We remove this to make testing easier
161161
local syscall_ptr: felt* = syscall_ptr;
162162

163163
ERC20_mint(recipient=recipient, amount=amount);

tests/internals.rs

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -770,21 +770,21 @@ fn expected_declare_fee_transfer_info() -> CallInfo {
770770
Felt252::zero(),
771771
],
772772
accessed_storage_keys: HashSet::from([
773-
[
774-
2, 162, 196, 156, 77, 186, 13, 145, 179, 79, 42, 222, 133, 212, 29, 9, 86, 31, 154,
775-
119, 136, 76, 21, 186, 42, 176, 242, 36, 27, 8, 13, 236,
776-
],
777773
[
778774
7, 35, 151, 50, 8, 99, 155, 120, 57, 206, 41, 143, 127, 254, 166, 30, 63, 149, 51,
779775
135, 45, 239, 215, 171, 219, 145, 2, 61, 180, 101, 136, 18,
780776
],
777+
[
778+
2, 162, 196, 156, 77, 186, 13, 145, 179, 79, 42, 222, 133, 212, 29, 9, 86, 31, 154,
779+
119, 136, 76, 21, 186, 42, 176, 242, 36, 27, 8, 13, 235,
780+
],
781781
[
782782
7, 35, 151, 50, 8, 99, 155, 120, 57, 206, 41, 143, 127, 254, 166, 30, 63, 149, 51,
783783
135, 45, 239, 215, 171, 219, 145, 2, 61, 180, 101, 136, 19,
784784
],
785785
[
786786
2, 162, 196, 156, 77, 186, 13, 145, 179, 79, 42, 222, 133, 212, 29, 9, 86, 31, 154,
787-
119, 136, 76, 21, 186, 42, 176, 242, 36, 27, 8, 13, 235,
787+
119, 136, 76, 21, 186, 42, 176, 242, 36, 27, 8, 13, 236,
788788
],
789789
]),
790790
execution_resources: ExecutionResources {

0 commit comments

Comments
 (0)