diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index 6921e3bf4..93a39cdf9 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -16,7 +16,7 @@ env: CARGO_TERM_COLOR: always DASEL_VERSION: https://github.com/TomWright/dasel/releases/download/v2.3.6/dasel_linux_amd64 RUSTFLAGS: "-D warnings" - FUEL_CORE_VERSION: 0.41.0 + FUEL_CORE_VERSION: 0.41.3 FUEL_CORE_PATCH_BRANCH: "" FUEL_CORE_PATCH_REVISION: "" RUST_VERSION: 1.81.0 diff --git a/Cargo.toml b/Cargo.toml index fc2299c77..f78f89c4e 100644 --- a/Cargo.toml +++ b/Cargo.toml @@ -89,14 +89,14 @@ toml = { version = "0.8", default-features = false } mockall = { version = "0.13", default-features = false } # Dependencies from the `fuel-core` repository: -fuel-core = { version = "0.41.0", default-features = false, features = [ +fuel-core = { version = "0.41.3", default-features = false, features = [ "wasm-executor", ] } -fuel-core-chain-config = { version = "0.41.0", default-features = false } -fuel-core-client = { version = "0.41.0", default-features = false } -fuel-core-poa = { version = "0.41.0", default-features = false } -fuel-core-services = { version = "0.41.0", default-features = false } -fuel-core-types = { version = "0.41.0", default-features = false } +fuel-core-chain-config = { version = "0.41.3", default-features = false } +fuel-core-client = { version = "0.41.3", default-features = false } +fuel-core-poa = { version = "0.41.3", default-features = false } +fuel-core-services = { version = "0.41.3", default-features = false } +fuel-core-types = { version = "0.41.3", default-features = false } # Dependencies from the `fuel-vm` repository: fuel-asm = { version = "0.59.1" } diff --git a/e2e/tests/contracts.rs b/e2e/tests/contracts.rs index 2021e71e5..9e9e80c47 100644 --- a/e2e/tests/contracts.rs +++ b/e2e/tests/contracts.rs @@ -8,7 +8,7 @@ use fuels::{ core::codec::{calldata, encode_fn_selector, DecoderConfig, EncoderConfig}, prelude::*, tx::ContractParameters, - types::{errors::transaction::Reason, Bits256, Identity}, + types::{errors::transaction::Reason, input::Input, Bits256, Identity}, }; use tokio::time::Instant; @@ -2145,33 +2145,32 @@ async fn max_fee_estimation_respects_tolerance() -> Result<()> { } }; - //TODO:https://github.com/FuelLabs/fuels-rs/issues/1579 - // let base_amount_in_inputs = |tolerance: f32| { - // let contract_instance = contract_instance.clone(); - // let call_wallet = &call_wallet; - // async move { - // let mut tb = contract_instance - // .methods() - // .initialize_counter(42) - // .transaction_builder() - // .await - // .unwrap() - // .with_max_fee_estimation_tolerance(tolerance); - - // call_wallet.adjust_for_fee(&mut tb, 0).await.unwrap(); - // tb.inputs - // .iter() - // .filter_map(|input: &Input| match input { - // Input::ResourceSigned { resource } - // if resource.coin_asset_id().unwrap() == AssetId::BASE => - // { - // Some(resource.amount()) - // } - // _ => None, - // }) - // .sum::() - // } - // }; + let base_amount_in_inputs = |tolerance: f32| { + let contract_instance = contract_instance.clone(); + let call_wallet = &call_wallet; + async move { + let mut tb = contract_instance + .methods() + .initialize_counter(42) + .transaction_builder() + .await + .unwrap() + .with_max_fee_estimation_tolerance(tolerance); + + call_wallet.adjust_for_fee(&mut tb, 0).await.unwrap(); + tb.inputs + .iter() + .filter_map(|input: &Input| match input { + Input::ResourceSigned { resource } + if resource.coin_asset_id().unwrap() == AssetId::BASE => + { + Some(resource.amount()) + } + _ => None, + }) + .sum::() + } + }; let no_increase_max_fee = max_fee_from_tx(0.0).await; let increased_max_fee = max_fee_from_tx(2.00).await; @@ -2188,13 +2187,9 @@ async fn max_fee_estimation_respects_tolerance() -> Result<()> { 1.00 + 2.00 ); - //TODO:https://github.com/FuelLabs/fuels-rs/issues/1579 - // let normal_base_asset = base_amount_in_inputs(0.0).await; - // let more_base_asset_due_to_bigger_tolerance = base_amount_in_inputs(2.00).await; - // assert_eq!( - // more_base_asset_due_to_bigger_tolerance as f64 / normal_base_asset as f64, - // 1.00 + 2.00 - // ); + let normal_base_asset = base_amount_in_inputs(0.0).await; + let more_base_asset_due_to_bigger_tolerance = base_amount_in_inputs(5.00).await; + assert!(more_base_asset_due_to_bigger_tolerance > normal_base_asset); Ok(()) } diff --git a/e2e/tests/types_predicates.rs b/e2e/tests/types_predicates.rs index fc22ffcc2..3ea61c5c4 100644 --- a/e2e/tests/types_predicates.rs +++ b/e2e/tests/types_predicates.rs @@ -24,7 +24,7 @@ async fn assert_predicate_spendable(data: Vec, project_path: impl AsRef Result<()> { @@ -71,54 +64,6 @@ async fn test_wallet_balance_api_single_asset() -> Result<()> { Ok(()) } -fn compare_inputs(inputs: &[Input], expected_inputs: &mut Vec) -> bool { - let zero_utxo_id = UtxoId::new(Bytes32::zeroed(), 0); - - // change UTXO_ids to 0s for comparison, because we can't guess the genesis coin ids - let inputs: Vec = inputs - .iter() - .map(|input| match input { - Input::CoinSigned(CoinSigned { - owner, - amount, - asset_id, - tx_pointer, - witness_index, - .. - }) => Input::coin_signed( - zero_utxo_id, - *owner, - *amount, - *asset_id, - *tx_pointer, - *witness_index, - ), - other => other.clone(), - }) - .collect(); - - let comparison_results: Vec = inputs - .iter() - .map(|input| { - let found_index = expected_inputs - .iter() - .position(|expected| expected == input); - if let Some(index) = found_index { - expected_inputs.remove(index); - true - } else { - false - } - }) - .collect(); - - if !expected_inputs.is_empty() { - return false; - } - - comparison_results.iter().all(|&r| r) -} - fn base_asset_wallet_config(num_wallets: u64) -> WalletsConfig { let asset_configs = vec![AssetConfig { id: AssetId::zeroed(), @@ -129,52 +74,40 @@ fn base_asset_wallet_config(num_wallets: u64) -> WalletsConfig { } #[tokio::test] -//TODO:https://github.com/FuelLabs/fuels-rs/issues/1579 -#[ignore] async fn adjust_fee_empty_transaction() -> Result<()> { - let wallet_config = base_asset_wallet_config(1); - let wallet = launch_custom_provider_and_get_wallets(wallet_config, None, None) - .await? - .pop() - .unwrap(); + let wallet = launch_provider_and_get_wallet().await?; let mut tb = ScriptTransactionBuilder::prepare_transfer(vec![], vec![], TxPolicies::default()); - tb.add_signer(wallet.clone())?; + assert!(tb.inputs().is_empty()); + assert!(tb.outputs().is_empty()); + tb.add_signer(wallet.clone())?; wallet.adjust_for_fee(&mut tb, 0).await?; + assert!(!tb.inputs().is_empty(), "inputs should be added"); + assert_eq!(tb.outputs().len(), 1, "output should be added"); let tx = tb.build(wallet.try_provider()?).await?; - let zero_utxo_id = UtxoId::new(Bytes32::zeroed(), 0); - let mut expected_inputs = vec![Input::coin_signed( - zero_utxo_id, - wallet.address().into(), - 20, - AssetId::zeroed(), - TxPointer::default(), - 0, - )]; + let total_amount_inputs: u64 = tx.inputs().iter().map(|i| i.amount().unwrap()).sum(); + assert!( + total_amount_inputs > tx.max_fee().unwrap(), + "amount should cover tx" + ); + let expected_outputs = vec![Output::change( wallet.address().into(), 0, AssetId::zeroed(), )]; - assert!(compare_inputs(tx.inputs(), &mut expected_inputs)); assert_eq!(tx.outputs(), &expected_outputs); Ok(()) } #[tokio::test] -//TODO:https://github.com/FuelLabs/fuels-rs/issues/1579 -#[ignore] async fn adjust_fee_resources_to_transfer_with_base_asset() -> Result<()> { - let wallet_config = base_asset_wallet_config(1); - let wallet = launch_custom_provider_and_get_wallets(wallet_config, None, None) - .await? - .pop() - .unwrap(); + let wallet = launch_provider_and_get_wallet().await?; let base_amount = 30; let base_asset_id = AssetId::zeroed(); @@ -191,23 +124,14 @@ async fn adjust_fee_resources_to_transfer_with_base_asset() -> Result<()> { let tx = tb.build(wallet.try_provider()?).await?; - let zero_utxo_id = UtxoId::new(Bytes32::zeroed(), 0); - let mut expected_inputs = repeat(Input::coin_signed( - zero_utxo_id, - wallet.address().into(), - 20, - base_asset_id, - TxPointer::default(), - 0, - )) - .take(3) - .collect::>(); + let total_amount_inputs: u64 = tx.inputs().iter().map(|i| i.amount().unwrap()).sum(); + assert!(total_amount_inputs > tx.max_fee().unwrap()); // can cover tx + let expected_outputs = vec![ Output::coin(Address::zeroed(), base_amount, base_asset_id), Output::change(wallet.address().into(), 0, base_asset_id), ]; - assert!(compare_inputs(tx.inputs(), &mut expected_inputs)); assert_eq!(tx.outputs(), &expected_outputs); Ok(()) diff --git a/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs b/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs index 2b6083f40..2ded4746f 100644 --- a/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs +++ b/packages/fuels-accounts/src/provider/supported_fuel_core_version.rs @@ -1 +1 @@ -pub const SUPPORTED_FUEL_CORE_VERSION: semver::Version = semver::Version::new(0, 41, 0); +pub const SUPPORTED_FUEL_CORE_VERSION: semver::Version = semver::Version::new(0, 41, 3); diff --git a/packages/fuels-accounts/src/schema/schema.sdl b/packages/fuels-accounts/src/schema/schema.sdl index 6829d9d39..016f7907a 100644 --- a/packages/fuels-accounts/src/schema/schema.sdl +++ b/packages/fuels-accounts/src/schema/schema.sdl @@ -580,6 +580,21 @@ type HeavyOperation { scalar HexString +type IndexationFlags { + """ + Is balances indexation enabled + """ + balances: Boolean! + """ + Is coins to spend indexation enabled + """ + coinsToSpend: Boolean! + """ + Is asset metadata indexation enabled + """ + assetMetadata: Boolean! +} + union Input = InputCoin | InputContract | InputMessage type InputCoin { @@ -764,6 +779,7 @@ type NodeInfo { maxSize: U64! maxDepth: U64! nodeVersion: String! + indexation: IndexationFlags! txPoolStats: TxPoolStats! peers: [PeerInfo!]! } diff --git a/packages/fuels-test-helpers/Cargo.toml b/packages/fuels-test-helpers/Cargo.toml index 0b5424fa5..7a41ceab2 100644 --- a/packages/fuels-test-helpers/Cargo.toml +++ b/packages/fuels-test-helpers/Cargo.toml @@ -34,7 +34,5 @@ which = { workspace = true, default-features = false } [features] default = ["fuels-accounts", "std"] std = ["fuels-accounts?/std", "fuels-core/std", "fuel-core-chain-config/std"] -#TODO: remove the rocksdb dep once fuel-core is fixed -#https://github.com/FuelLabs/fuels-rs/issues/1580 -fuel-core-lib = ["fuel-core/rocksdb", "rocksdb"] +fuel-core-lib = ["dep:fuel-core"] rocksdb = ["fuel-core?/rocksdb"] diff --git a/packages/fuels-test-helpers/src/service.rs b/packages/fuels-test-helpers/src/service.rs index 00faf97a4..d2f63d528 100644 --- a/packages/fuels-test-helpers/src/service.rs +++ b/packages/fuels-test-helpers/src/service.rs @@ -90,6 +90,7 @@ impl FuelService { max_fds: 512, columns_policy: ColumnsPolicy::Lazy, }, + #[cfg(feature = "rocksdb")] state_rewind_policy: Default::default(), }; ServiceConfig {