Skip to content

Commit

Permalink
Merge branch 'master' into hal3e/exiration-policy
Browse files Browse the repository at this point in the history
  • Loading branch information
hal3e authored Feb 3, 2025
2 parents c8e4327 + bf12588 commit ff5f982
Show file tree
Hide file tree
Showing 3 changed files with 79 additions and 5 deletions.
4 changes: 2 additions & 2 deletions e2e/tests/predicates.rs
Original file line number Diff line number Diff line change
Expand Up @@ -805,9 +805,9 @@ async fn predicate_adjust_fee_persists_message_w_data() -> Result<()> {
let mut tb = ScriptTransactionBuilder::prepare_transfer(
vec![message_input.clone()],
vec![],
TxPolicies::default().with_tip(1),
TxPolicies::default(),
);
predicate.adjust_for_fee(&mut tb, 1000).await?;
predicate.adjust_for_fee(&mut tb, 0).await?;

let tx = tb.build(&provider).await?;

Expand Down
71 changes: 70 additions & 1 deletion e2e/tests/wallets.rs
Original file line number Diff line number Diff line change
@@ -1,4 +1,7 @@
use fuels::{prelude::*, types::output::Output};
use fuels::{
prelude::*,
types::{coin_type::CoinType, input::Input, output::Output},
};

async fn assert_address_balance(
address: &Bech32Address,
Expand Down Expand Up @@ -118,6 +121,72 @@ async fn adjust_fee_empty_transaction() -> Result<()> {
Ok(())
}

#[tokio::test]
async fn adjust_for_fee_with_message_data_input() -> Result<()> {
let mut wallet = WalletUnlocked::new_random(None);
let mut receiver = WalletUnlocked::new_random(None);

let messages = setup_single_message(
&Bech32Address::default(),
wallet.address(),
100,
0.into(),
vec![1, 2, 3], // has data
);
let asset_id = AssetId::zeroed();
let coins = setup_single_asset_coins(wallet.address(), asset_id, 1, 50);
let provider = setup_test_provider(coins, vec![messages], None, None).await?;
wallet.set_provider(provider.clone());
receiver.set_provider(provider.clone());

let amount_to_send = 14;
let message = wallet.get_messages().await?.pop().unwrap();
let input = Input::resource_signed(CoinType::Message(message));
let outputs = wallet.get_asset_outputs_for_amount(receiver.address(), asset_id, amount_to_send);

{
// message with data as only input - without adjust for fee
let mut tb = ScriptTransactionBuilder::prepare_transfer(
vec![input.clone()],
outputs.clone(),
TxPolicies::default(),
);
tb.add_signer(wallet.clone())?;

let tx = tb.build(wallet.try_provider()?).await?;
let err = provider
.send_transaction_and_await_commit(tx)
.await
.unwrap_err();

assert!(err.to_string().contains("Validity(NoSpendableInput)"));
}
{
// message with data as only input - with adjust for fee
let mut tb = ScriptTransactionBuilder::prepare_transfer(
vec![input.clone()],
outputs.clone(),
TxPolicies::default(),
);

tb.add_signer(wallet.clone())?;
wallet.adjust_for_fee(&mut tb, 0).await.unwrap();

let tx = tb.build(wallet.try_provider()?).await?;

assert_eq!(receiver.get_asset_balance(&asset_id).await?, 0);

provider
.send_transaction_and_await_commit(tx)
.await
.unwrap();

assert_eq!(receiver.get_asset_balance(&asset_id).await?, amount_to_send);
}

Ok(())
}

#[tokio::test]
async fn adjust_fee_resources_to_transfer_with_base_asset() -> Result<()> {
let wallet = launch_provider_and_get_wallet().await?;
Expand Down
9 changes: 7 additions & 2 deletions packages/fuels-accounts/src/accounts_utils.rs
Original file line number Diff line number Diff line change
Expand Up @@ -57,8 +57,13 @@ pub fn available_base_assets_and_amount(
resource.id()
}
CoinType::Message(message) => {
sum += message.amount;
resource.id()
if message.data.is_empty() {
sum += message.amount;

resource.id()
} else {
None
}
}
_ => None,
},
Expand Down

0 comments on commit ff5f982

Please sign in to comment.