starknet_api 0.18.0-rc.0

Starknet Rust types related to computation and execution.
Documentation
use indexmap::indexmap;
use primitive_types::H160;
use starknet_types_core::felt::Felt;

use super::block_hash_calculator::TransactionOutputForHash;
use crate::core::{ClassHash, CompiledClassHash, ContractAddress, EthAddress, Nonce};
use crate::execution_resources::{GasAmount, GasVector};
use crate::state::ThinStateDiff;
use crate::transaction::fields::Fee;
use crate::transaction::{
    L2ToL1Payload,
    MessageToL1,
    RevertedTransactionExecutionStatus,
    TransactionExecutionStatus,
};

pub(crate) fn get_transaction_output() -> TransactionOutputForHash {
    let execution_status =
        TransactionExecutionStatus::Reverted(RevertedTransactionExecutionStatus {
            revert_reason: "aborted".to_string(),
        });
    TransactionOutputForHash {
        actual_fee: Fee(99804),
        messages_sent: vec![generate_message_to_l1(34), generate_message_to_l1(56)],
        events: vec![],
        execution_status,
        gas_consumed: GasVector {
            l1_gas: GasAmount(16580),
            l2_gas: GasAmount(0),
            l1_data_gas: GasAmount(32),
        },
    }
}

pub(crate) fn generate_message_to_l1(seed: u64) -> MessageToL1 {
    MessageToL1 {
        from_address: ContractAddress::from(seed),
        to_address: EthAddress(H160::from_low_u64_be(seed + 1)),
        payload: L2ToL1Payload(vec![Felt::from(seed + 2), Felt::from(seed + 3)]),
    }
}

pub(crate) fn get_state_diff() -> ThinStateDiff {
    ThinStateDiff {
        deployed_contracts: indexmap! {
            0u64.into() => ClassHash(1u64.into()),
            2u64.into() => ClassHash(3u64.into()),
            19u64.into() => ClassHash(20u64.into()),
        },
        storage_diffs: indexmap! {
            4u64.into() => indexmap! {
                5u64.into() => 6u64.into(),
                7u64.into() => 8u64.into(),
            },
            9u64.into() => indexmap! {
                10u64.into() => 11u64.into(),
            },
        },
        class_hash_to_compiled_class_hash: indexmap! {
            ClassHash(12u64.into()) => CompiledClassHash(13u64.into()),
            ClassHash(14u64.into()) => CompiledClassHash(15u64.into()),
        },
        deprecated_declared_classes: vec![ClassHash(16u64.into())],
        nonces: indexmap! {
            17u64.into() => Nonce(18u64.into()),
        },
    }
}