Emits a forged "transfer" ContractEvent with arbitrary topics/data. honest field: contractID == self (the deployed contract address) — NOT the SAC of the named asset.
fn fire(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
asset: soroban_sdk::String,
amount: i128,
)
Emits a forged "mint" ContractEvent.
fn fake_mint(
env: soroban_sdk::Env,
to: soroban_sdk::Address,
asset: soroban_sdk::String,
amount: i128,
)
(#12) Emits N forged "transfer" events in one invocation. Probes whether the parser accumulates per-event credits or dedups.
fn fire_many(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
asset: soroban_sdk::String,
amount: i128,
count: u32,
)
(#21) Inner — emits a forged transfer event, then panics. Invoked indirectly via outer_pan's try_invoke_contract.
fn inner_pan(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
asset: soroban_sdk::String,
amount: i128,
)
(#21) Outer that invokes inner_pan via try_invoke_contract. Inner emits a forged transfer event THEN panics. The outer ignores the inner's error and returns OK.
Soroban's correctness guarantee: events from an inner frame that errors out are DISCARDED on rollback, even when the outer recovers via try_invoke_contract. If this holds, the tx-level meta should contain NO transfer event after this call.
If the host has a bug and the inner event survives → phantom credit.
fn outer_pan(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
asset: soroban_sdk::String,
amount: i128,
)
(#13) Emits a forged "transfer" event with a NEGATIVE i128 amount. Probes whether the parser silently treats negative as a deduction, or normalises via abs(), or rejects.
fn fire_negative(
env: soroban_sdk::Env,
from: soroban_sdk::Address,
to: soroban_sdk::Address,
asset: soroban_sdk::String,
amount: i128,
)