diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 7720701a0..b9ea17c5d 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -2510,3 +2510,34 @@ async fn loader_storage_works_via_proxy() -> Result<()> { Ok(()) } + +#[tokio::test] +async fn adjust_for_fee_errors() -> Result<()> { + setup_program_test!( + Wallets("wallet"), + Abigen(Contract( + name = "MyContract", + project = "e2e/sway/contracts/contract_test" + )), + ); + + let contract_binary = "sway/contracts/contract_test/out/release/contract_test.bin"; + + let contract_id = Contract::load_from(contract_binary, LoadConfiguration::default())? + .deploy_if_not_exists(&wallet, TxPolicies::default().with_tip(10_000_000_000_000)) + .await?; + + // then + let contract_instance = MyContract::new(contract_id, wallet); + + let response = contract_instance + .methods() + .read_counter() + .call() + .await? + .value; + + assert_eq!(response, 0); + + Ok(()) +} diff --git a/packages/fuels-accounts/src/account.rs b/packages/fuels-accounts/src/account.rs index dded620dc..18308e8f4 100644 --- a/packages/fuels-accounts/src/account.rs +++ b/packages/fuels-accounts/src/account.rs @@ -9,7 +9,7 @@ use fuels_core::types::{ coin::Coin, coin_type::CoinType, coin_type_id::CoinTypeId, - errors::Result, + errors::{Context, Result}, input::Input, message::Message, transaction::{Transaction, TxPolicies}, @@ -141,8 +141,9 @@ pub trait ViewOnlyAccount: std::fmt::Debug + Send + Sync + Clone { Some(base_assets), ) .await - // if there query fails do nothing - .unwrap_or_default(); + .with_context(|| { + format!("failed to get base asset inputs with amount: `{missing_base_amount}`") + })?; tb.inputs_mut().extend(new_base_inputs); }; @@ -189,7 +190,8 @@ pub trait Account: ViewOnlyAccount { 0 }; self.adjust_for_fee(&mut tx_builder, used_base_amount) - .await?; + .await + .context("failed to adjust for fee")?; let tx = tx_builder.build(provider).await?; let tx_id = tx.id(consensus_parameters.chain_id()); @@ -251,7 +253,9 @@ pub trait Account: ViewOnlyAccount { ); self.add_witnesses(&mut tb)?; - self.adjust_for_fee(&mut tb, balance).await?; + self.adjust_for_fee(&mut tb, balance) + .await + .context("failed to adjust for fee")?; let tx = tb.build(provider).await?; @@ -289,7 +293,9 @@ pub trait Account: ViewOnlyAccount { ); self.add_witnesses(&mut tb)?; - self.adjust_for_fee(&mut tb, amount).await?; + self.adjust_for_fee(&mut tb, amount) + .await + .context("failed to adjust for fee")?; let tx = tb.build(provider).await?; diff --git a/packages/fuels-accounts/src/provider.rs b/packages/fuels-accounts/src/provider.rs index 13668ed80..67f486ef6 100644 --- a/packages/fuels-accounts/src/provider.rs +++ b/packages/fuels-accounts/src/provider.rs @@ -812,7 +812,7 @@ impl Provider { .message_proof( tx_id, nonce, - commit_block_id.map(Into::into), + commit_block_id, commit_block_height.map(Into::into), ) .await diff --git a/packages/fuels-programs/src/calls/traits/transaction_tuner.rs b/packages/fuels-programs/src/calls/traits/transaction_tuner.rs index 92efa07e9..8ac832387 100644 --- a/packages/fuels-programs/src/calls/traits/transaction_tuner.rs +++ b/packages/fuels-programs/src/calls/traits/transaction_tuner.rs @@ -1,6 +1,6 @@ use fuels_accounts::Account; use fuels_core::types::{ - errors::{error, Result}, + errors::{error, Context, Result}, transaction::{ScriptTransaction, TxPolicies}, transaction_builders::{ BuildableTransaction, ScriptTransactionBuilder, TransactionBuilder, VariableOutputPolicy, @@ -97,7 +97,10 @@ impl TransactionTuner for ScriptCall { .await?; account.add_witnesses(&mut tb)?; - account.adjust_for_fee(&mut tb, 0).await?; + account + .adjust_for_fee(&mut tb, 0) + .await + .context("failed to adjust for fee")?; tb.build(account.try_provider()?).await } diff --git a/packages/fuels-programs/src/calls/utils.rs b/packages/fuels-programs/src/calls/utils.rs index 552712e0d..94b807a25 100644 --- a/packages/fuels-programs/src/calls/utils.rs +++ b/packages/fuels-programs/src/calls/utils.rs @@ -8,7 +8,7 @@ use fuels_core::{ offsets::call_script_data_offset, types::{ bech32::{Bech32Address, Bech32ContractId}, - errors::Result, + errors::{Context, Result}, input::Input, transaction::{ScriptTransaction, TxPolicies}, transaction_builders::{ @@ -101,7 +101,10 @@ pub(crate) async fn build_tx_from_contract_calls( .unwrap_or_default(); account.add_witnesses(&mut tb)?; - account.adjust_for_fee(&mut tb, used_base_amount).await?; + account + .adjust_for_fee(&mut tb, used_base_amount) + .await + .context("failed to adjust for fee")?; tb.build(account.try_provider()?).await } diff --git a/packages/fuels-programs/src/contract/loader.rs b/packages/fuels-programs/src/contract/loader.rs index 963c81741..eac5d9289 100644 --- a/packages/fuels-programs/src/contract/loader.rs +++ b/packages/fuels-programs/src/contract/loader.rs @@ -6,7 +6,7 @@ use fuels_core::{ constants::WORD_SIZE, types::{ bech32::Bech32ContractId, - errors::{error, Result}, + errors::{error, Context, Result}, transaction::TxPolicies, transaction_builders::{Blob, BlobId, BlobTransactionBuilder, TransactionBuilder}, }, @@ -140,7 +140,10 @@ impl Contract> { .with_tx_policies(tx_policies) .with_max_fee_estimation_tolerance(DEFAULT_MAX_FEE_ESTIMATION_TOLERANCE); - account.adjust_for_fee(&mut tb, 0).await?; + account + .adjust_for_fee(&mut tb, 0) + .await + .context("failed to adjust for fee")?; account.add_witnesses(&mut tb)?; let tx = tb.build(provider).await?; diff --git a/packages/fuels-programs/src/contract/regular.rs b/packages/fuels-programs/src/contract/regular.rs index 7ba204578..696a8355f 100644 --- a/packages/fuels-programs/src/contract/regular.rs +++ b/packages/fuels-programs/src/contract/regular.rs @@ -7,7 +7,7 @@ use fuels_core::{ error, types::{ bech32::Bech32ContractId, - errors::Result, + errors::{Context, Result}, transaction::TxPolicies, transaction_builders::{Blob, CreateTransactionBuilder}, }, @@ -157,7 +157,10 @@ impl Contract { .with_max_fee_estimation_tolerance(DEFAULT_MAX_FEE_ESTIMATION_TOLERANCE); account.add_witnesses(&mut tb)?; - account.adjust_for_fee(&mut tb, 0).await?; + account + .adjust_for_fee(&mut tb, 0) + .await + .context("failed to adjust for fee")?; let provider = account.try_provider()?; diff --git a/packages/fuels-programs/src/executable.rs b/packages/fuels-programs/src/executable.rs index 06be05c77..d1f03c4fb 100644 --- a/packages/fuels-programs/src/executable.rs +++ b/packages/fuels-programs/src/executable.rs @@ -1,6 +1,6 @@ use fuels_core::{ types::{ - errors::Result, + errors::{Context, Result}, transaction_builders::{Blob, BlobTransactionBuilder}, }, Configurables, @@ -174,8 +174,10 @@ impl Executable { .with_blob(self.blob()) .with_max_fee_estimation_tolerance(DEFAULT_MAX_FEE_ESTIMATION_TOLERANCE); - account.adjust_for_fee(&mut tb, 0).await?; - + account + .adjust_for_fee(&mut tb, 0) + .await + .context("failed to adjust for fee")?; account.add_witnesses(&mut tb)?; let tx = tb.build(provider).await?;