The SDK offers some tools that can help you make fuel script transactions more human readable. You can determine whether the script transaction is:
In the case of contract call(s), if you have the ABI file, you can also decode
the arguments to the function by making use of the AbiFormatter
:
let TransactionType::Script(tx) = provider
.get_transaction_by_id(&tx_id)
.await?
.unwrap()
.transaction
else {
panic!("Transaction is not a script transaction");
};
let ScriptType::ContractCall(calls) = ScriptType::detect(tx.script(), tx.script_data())?
else {
panic!("Script is not a contract call");
};
let json_abi = std::fs::read_to_string(
"../../e2e/sway/contracts/contract_test/out/release/contract_test-abi.json",
)?;
let abi_formatter = ABIFormatter::from_json_abi(json_abi)?;
let call = &calls[0];
let fn_selector = call.decode_fn_selector()?;
let decoded_args =
abi_formatter.decode_fn_args(&fn_selector, call.encoded_args.as_slice())?;
eprintln!(
"The script called: {fn_selector}({})",
decoded_args.join(", ")
);
prints:
The script called: initialize_counter(42)
The AbiFormatter
can also decode configurables, refer to the rust docs for
more information.