It seems like try_ calls are panicking anyways in certain scenarios. For example, this works as expected:
mod hello {
soroban_sdk::contractimport!(
file = "./target/wasm32-unknown-unknown/release/soroban_hello_world_contract.wasm"
);
}
#[test]
fn test() {
let env = Env::default();
// env.mock_all_auths();
let contract_id = env.register_contract_wasm(None, hello::WASM);
env.try_invoke_contract::<(), soroban_sdk::Error>(
&contract_id,
&Symbol::new(&env, "call"),
vec![&env, Address::random(&env).to_val()],
);
}
Where hello is simply requiring auth for the random addr and the auth mock is disabled.
But this will panic with data:["VM call failed: Func(MismatchingParameterLen)", run]:
mod game_broken {
soroban_sdk::contractimport!(file = "broken.wasm");
}
#[test]
fn test() {
let env = Env::default();
// env.mock_all_auths();
let broken = env.register_contract_wasm(None, game_broken::WASM);
env.try_invoke_contract::<(), soroban_sdk::Error>(
&broken,
&Symbol::new(&env, "run"),
vec![&env, Address::random(&env).to_val()],
);
}
Broken simply looks like this:
#[contractimpl]
impl Contract {
pub fn run(_env: Env) {}
}
This looks like a bug in the env rather than in the sdk, unless I'm missing something as to why this is expected.