Skip to content

Commit

Permalink
soroban-simulate: Misc fixes
Browse files Browse the repository at this point in the history
1. Backport stellar/stellar-cli#1131
2. Make `ledger_storage` module public
  • Loading branch information
2opremio committed Jan 15, 2024
1 parent 6cc844b commit cfcd5df
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 6 deletions.
15 changes: 11 additions & 4 deletions soroban-simulation/src/fees.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
use super::ledger_storage::{LedgerGetter, LedgerStorage};
use super::state_ttl::{get_restored_ledger_sequence, TTLLedgerEntry};
use crate::ResourceConfig;
use anyhow::{bail, ensure, Context, Error, Result};
use soroban_env_host::budget::Budget;
use soroban_env_host::e2e_invoke::{
Expand Down Expand Up @@ -29,15 +30,20 @@ pub(crate) fn compute_host_function_transaction_data_and_min_fee(
pre_storage: &LedgerStorage,
post_storage: &Storage,
budget: &Budget,
resource_config: &ResourceConfig,
events: &[DiagnosticEvent],
invocation_result: &ScVal,
bucket_list_size: u64,
current_ledger_seq: u32,
) -> Result<(SorobanTransactionData, i64)> {
let ledger_changes = get_ledger_changes(budget, post_storage, pre_storage, TtlEntryMap::new())?;
let soroban_resources =
calculate_host_function_soroban_resources(&ledger_changes, &post_storage.footprint, budget)
.context("cannot compute host function resources")?;
let soroban_resources = calculate_host_function_soroban_resources(
&ledger_changes,
&post_storage.footprint,
budget,
resource_config,
)
.context("cannot compute host function resources")?;

let contract_events_size =
calculate_contract_events_size_bytes(events).context("cannot calculate events size")?;
Expand Down Expand Up @@ -128,6 +134,7 @@ fn calculate_host_function_soroban_resources(
ledger_changes: &[LedgerEntryChange],
footprint: &Footprint,
budget: &Budget,
resource_config: &ResourceConfig,
) -> Result<SorobanResources> {
let ledger_footprint = storage_footprint_to_ledger_footprint(footprint)
.context("cannot convert storage footprint to ledger footprint")?;
Expand All @@ -143,7 +150,7 @@ fn calculate_host_function_soroban_resources(
.get_cpu_insns_consumed()
.context("cannot get instructions consumed")?;
let instructions = max(
budget_instructions + 1000000,
budget_instructions + resource_config.instruction_leeway,
budget_instructions * 120 / 100,
);
Ok(SorobanResources {
Expand Down
11 changes: 9 additions & 2 deletions soroban-simulation/src/lib.rs
Original file line number Diff line number Diff line change
@@ -1,9 +1,9 @@
mod fees;
mod ledger_storage;
pub mod ledger_storage;
mod state_ttl;

use anyhow::{anyhow, bail, Context, Result};
use ledger_storage::LedgerStorage;
pub use ledger_storage::LedgerStorage;
use soroban_env_host::auth::RecordedAuthPayload;
use soroban_env_host::budget::Budget;
use soroban_env_host::events::Events;
Expand Down Expand Up @@ -37,12 +37,18 @@ pub struct SimulationResult {
pub restore_preamble: Option<RestorePreamble>,
}

#[derive(Default)]
pub struct ResourceConfig {
pub instruction_leeway: u64,
}

pub fn simulate_invoke_hf_op(
ledger_storage: LedgerStorage,
bucket_list_size: u64,
invoke_hf_op: InvokeHostFunctionOp,
source_account: AccountId,
ledger_info: LedgerInfo,
resource_config: ResourceConfig,
enable_debug: bool,
) -> std::result::Result<SimulationResult, Box<dyn std::error::Error>> {
let ledger_storage_rc = Rc::new(ledger_storage);
Expand Down Expand Up @@ -120,6 +126,7 @@ pub fn simulate_invoke_hf_op(
&ledger_storage_rc,
&storage,
&budget,
&resource_config,
&diagnostic_events,
&result,
bucket_list_size,
Expand Down

0 comments on commit cfcd5df

Please sign in to comment.