diff --git a/Cargo.lock b/Cargo.lock index c6c59a75e00..f7e7605a5b6 100644 --- a/Cargo.lock +++ b/Cargo.lock @@ -3797,10 +3797,10 @@ dependencies = [ [[package]] name = "fuel-core-parallel-executor" -version = "0.41.0" +version = "0.41.4" dependencies = [ "fuel-core-storage", - "fuel-core-types 0.41.0", + "fuel-core-types 0.41.4", "fuel-core-upgradable-executor", "tokio", ] diff --git a/crates/fraud_proofs/global_merkle_root/storage/src/update.rs b/crates/fraud_proofs/global_merkle_root/storage/src/update.rs index 0db155c2ff7..1e7c1893f1d 100644 --- a/crates/fraud_proofs/global_merkle_root/storage/src/update.rs +++ b/crates/fraud_proofs/global_merkle_root/storage/src/update.rs @@ -155,13 +155,21 @@ where let bytecode_witness_index = tx.bytecode_witness_index(); let witnesses = tx.witnesses(); let bytecode = witnesses[usize::from(*bytecode_witness_index)].as_vec(); - let contract_id = tx - .metadata() - .as_ref() - .map(|metadata| metadata.body.contract_id) - .ok_or(anyhow::anyhow!( - "Create transaction does not have a contract ID in its metadata" - ))?; + // The Fuel specs mandate that each create transaction has exactly one output of type `Output::ContractCreated`. + // See https://docs.fuel.network/docs/specs/tx-format/transaction/#transactioncreate + let Some(Output::ContractCreated { contract_id, .. }) = tx + .outputs() + .iter() + .filter(|output| match output { + Output::ContractCreated { .. } => true, + _ => false, + }) + .take(1) + .collect::>() + .first() + else { + anyhow::bail!("Create transaction does not have contract created output") + }; self.storage .storage_as_mut::()