From bb60c88dfc4683e63843be73076b554a1ec7b4c9 Mon Sep 17 00:00:00 2001
From: Anderson Arboleya <anderson@arboleya.me>
Date: Mon, 22 Jan 2024 23:54:53 -0300
Subject: [PATCH] chore: upgrading `forc` to `0.49.1` (#1670)

---
 .changeset/kind-toes-promise.md               |   6 +
 .../script-transfer-to-contract/src/main.sw   |   2 +-
 .../transfer-to-address/src/main.sw           |   2 +-
 .../fixtures/forc-projects/full/src/main.sw   |   4 +-
 packages/forc/VERSION                         |   2 +-
 .../src/main.sw                               |  32 +++++
 .../advanced-logging/src/main.sw              | 120 +++++++++++++++++-
 .../call-test-contract/src/main.sw            |   2 +-
 .../configurable-contract/src/main.sw         |   6 +-
 .../coverage-contract/src/main.sw             |  32 +++++
 .../forc-projects/liquidity-pool/src/main.sw  |   8 +-
 .../multi-token-contract/src/main.sw          |   2 +-
 .../predicate-vector-types/src/main.sw        |  23 ++--
 .../forc-projects/revert-error/src/main.sw    |   6 +-
 .../script-main-args/src/main.sw              |  16 +++
 .../script-main-two-args/src/main.sw          |  16 +++
 .../script-with-vector/src/main.sw            |  41 ++++++
 .../forc-projects/token_abi/src/main.sw       |   2 +-
 .../forc-projects/token_contract/src/main.sw  |   2 +-
 .../vector-types-contract/src/main.sw         |  39 ++----
 .../vector-types-script/src/main.sw           |  48 +++----
 .../call-test-script/src/main.sw              |   2 +-
 .../versions/src/lib/getBuiltinVersions.ts    |   2 +-
 scripts/forc-check.sh                         |  30 +++--
 scripts/forc-format.sh                        |  31 ++---
 25 files changed, 347 insertions(+), 129 deletions(-)
 create mode 100644 .changeset/kind-toes-promise.md

diff --git a/.changeset/kind-toes-promise.md b/.changeset/kind-toes-promise.md
new file mode 100644
index 00000000000..f6de46b042f
--- /dev/null
+++ b/.changeset/kind-toes-promise.md
@@ -0,0 +1,6 @@
+---
+"@fuel-ts/forc": patch
+"@fuel-ts/versions": patch
+---
+
+Upgrading forc to 0.49.1
diff --git a/apps/docs-snippets/test/fixtures/forc-projects/script-transfer-to-contract/src/main.sw b/apps/docs-snippets/test/fixtures/forc-projects/script-transfer-to-contract/src/main.sw
index 64896ef70f9..8e7ca6bfd9b 100644
--- a/apps/docs-snippets/test/fixtures/forc-projects/script-transfer-to-contract/src/main.sw
+++ b/apps/docs-snippets/test/fixtures/forc-projects/script-transfer-to-contract/src/main.sw
@@ -1,7 +1,7 @@
 // #region custom-transactions-1
 script;
 
-use std::token::force_transfer_to_contract;
+use std::asset::force_transfer_to_contract;
 
 fn main(
     contract_address: b256,
diff --git a/apps/docs-snippets/test/fixtures/forc-projects/transfer-to-address/src/main.sw b/apps/docs-snippets/test/fixtures/forc-projects/transfer-to-address/src/main.sw
index 0e2c22d764a..126b69cf201 100644
--- a/apps/docs-snippets/test/fixtures/forc-projects/transfer-to-address/src/main.sw
+++ b/apps/docs-snippets/test/fixtures/forc-projects/transfer-to-address/src/main.sw
@@ -1,7 +1,7 @@
 // #region contract-balance-2
 contract;
 
-use std::token::transfer_to_address;
+use std::asset::transfer_to_address;
 
 abi TransferToAddress {
     #[payable]
diff --git a/packages/abi-typegen/test/fixtures/forc-projects/full/src/main.sw b/packages/abi-typegen/test/fixtures/forc-projects/full/src/main.sw
index 1cb3dbffd10..3499e5d942a 100644
--- a/packages/abi-typegen/test/fixtures/forc-projects/full/src/main.sw
+++ b/packages/abi-typegen/test/fixtures/forc-projects/full/src/main.sw
@@ -105,9 +105,7 @@ impl MyContract for Contract {
         x
     }
     fn types_evm_address(x: EvmAddress) -> EvmAddress {
-        EvmAddress::from(
-            0x0606060606060606060606060606060606060606060606060606060606060606,
-        )
+        EvmAddress::from(0x0606060606060606060606060606060606060606060606060606060606060606)
     }
     fn types_bytes(x: Bytes) -> Bytes {
         x
diff --git a/packages/forc/VERSION b/packages/forc/VERSION
index cffa44cf335..36328c43d5d 100644
--- a/packages/forc/VERSION
+++ b/packages/forc/VERSION
@@ -1 +1 @@
-0.48.1
+0.49.1
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging-other-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging-other-contract/src/main.sw
index af037fed599..f6389ba5eb5 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging-other-contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging-other-contract/src/main.sw
@@ -4,6 +4,38 @@ use std::logging::log;
 
 use advanced_logging_other_contract_abi::AdvancedLoggingOtherContract;
 
+impl AbiEncode for str[25] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[34] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
 impl AdvancedLoggingOtherContract for Contract {
     fn msg_from_other_contract(a: u8) {
         log(__to_str_array("Hello from other Contract"));
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging/src/main.sw
index 9210634b59c..246929f4e86 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/advanced-logging/src/main.sw
@@ -7,6 +7,118 @@ use std::contract_id::ContractId;
 
 use advanced_logging_other_contract_abi::AdvancedLoggingOtherContract;
 
+impl AbiEncode for str[8] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[10] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[11] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[12] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[14] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[18] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[24] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
 enum GameState {
     Playing: u8,
     GameOver: u8,
@@ -45,9 +157,7 @@ impl AdvancedLogging for Contract {
             ammo: 10,
             game_id: 10_11_12u64,
             state: GameState::Playing(1),
-            contract_Id: ContractId::from(
-                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFF,
-            ),
+            contract_Id: ContractId::from(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFF),
             difficulty: Difficulty::Medium(true),
         };
 
@@ -95,9 +205,7 @@ impl AdvancedLogging for Contract {
             ammo: 10,
             game_id: 10_11_12u64,
             state: GameState::Playing(1),
-            contract_Id: ContractId::from(
-                0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFF,
-            ),
+            contract_Id: ContractId::from(0xFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF00FFFFFFFFFFFFFFFFFFFFFFFFFFFFF),
             difficulty: Difficulty::Medium(true),
         };
         require(a == b, game_ref);
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/call-test-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/call-test-contract/src/main.sw
index b3878aa19bf..bf13595f5cb 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/call-test-contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/call-test-contract/src/main.sw
@@ -78,7 +78,7 @@ impl TestContract for Contract {
         value + 1
     }
     fn call_external_foo(param: u64, contract_id: b256) -> u64 {
-        let external_contract = abi(TestContract, contract_id().into());
+        let external_contract = abi(TestContract, contract_id);
         let response = external_contract.foo(param);
         response + 1
     }
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/configurable-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/configurable-contract/src/main.sw
index 6bee36141d6..e34d64c453a 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/configurable-contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/configurable-contract/src/main.sw
@@ -90,10 +90,6 @@ impl ConfigurableContract for Contract {
     }
 
     fn echo_configurables() -> (u8, u16, u32, u64, bool, b256, Colors, [[u32; 2]; 2], str[4], (u8, bool, str[2]), Struct1) {
-        (
-            U8,
-            U16, U32, U64, BOOL, B256, ENUM, ARRAY, STR_4, TUPLE,
-            STRUCT_1,
-        )
+        (U8, U16, U32, U64, BOOL, B256, ENUM, ARRAY, STR_4, TUPLE, STRUCT_1)
     }
 }
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw
index 83fea8c70ba..1bb53d15dc6 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/coverage-contract/src/main.sw
@@ -10,6 +10,38 @@ use std::assert::assert;
 use std::logging::log;
 use std::b512::B512;
 
+impl AbiEncode for str[10] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[12] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
 pub struct U8Struct {
     i: u8,
 }
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/liquidity-pool/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/liquidity-pool/src/main.sw
index 87094659732..6297bee95c7 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/liquidity-pool/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/liquidity-pool/src/main.sw
@@ -4,15 +4,15 @@ contract;
 use std::constants::ZERO_B256;
 
 use std::{
+    asset::{
+        mint_to_address,
+        transfer_to_address,
+    },
     call_frames::{
         contract_id,
         msg_asset_id,
     },
     context::msg_amount,
-    token::{
-        mint_to_address,
-        transfer_to_address,
-    },
 };
 
 abi LiquidityPool {
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/multi-token-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/multi-token-contract/src/main.sw
index b4874384a89..f5761113960 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/multi-token-contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/multi-token-contract/src/main.sw
@@ -2,10 +2,10 @@ contract;
 
 use std::{
     address::Address,
+    asset::*,
     context::balance_of,
     context::msg_amount,
     contract_id::ContractId,
-    token::*,
 };
 
 use std::constants::ZERO_B256;
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/predicate-vector-types/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/predicate-vector-types/src/main.sw
index 00185c0e659..792ad41c1ea 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/predicate-vector-types/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/predicate-vector-types/src/main.sw
@@ -25,11 +25,7 @@ fn main(
 
     result = result && (u32_vec.get(1).unwrap() == 1u32);
 
-    result = result && (vec_in_vec
-        .get(0)
-        .unwrap()
-        .get(1)
-        .unwrap() == 1u32);
+    result = result && (vec_in_vec.get(0).unwrap().get(1).unwrap() == 1u32);
 
     result = result && (struct_in_vec.get(0).unwrap().a == 0u32);
 
@@ -58,14 +54,15 @@ fn main(
     let (tuple_a, tuple_b) = vec_in_tuple;
     result = result && (tuple_a.get(1).unwrap() == 1u32);
 
-    result = result && (vec_in_a_vec_in_a_struct_in_a_vec
-        .get(1)
-        .unwrap()
-        .a
-        .get(1)
-        .unwrap()
-        .get(1)
-        .unwrap() == 10u32);
+    result = result
+        && (vec_in_a_vec_in_a_struct_in_a_vec
+                .get(1)
+                .unwrap()
+                .a
+                .get(1)
+                .unwrap()
+                .get(1)
+                .unwrap() == 10u32);
 
     result
 }
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/revert-error/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/revert-error/src/main.sw
index 2aa919fe2b5..f41a64f8d76 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/revert-error/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/revert-error/src/main.sw
@@ -1,15 +1,15 @@
 contract;
 
 use std::{
+    asset::{
+        transfer_to_address,
+    },
     bytes::Bytes,
     constants::BASE_ASSET_ID,
     logging::log,
     message::{
         send_message,
     },
-    token::{
-        transfer_to_address,
-    },
 };
 use custom_errors::{AccessError, InputError};
 
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/script-main-args/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/script-main-args/src/main.sw
index 8cc6a229c79..bfc50f74d2d 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/script-main-args/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/script-main-args/src/main.sw
@@ -3,6 +3,22 @@ script;
 
 use std::logging::log;
 
+impl AbiEncode for str[6] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
 fn main(foo: u8) -> u8 {
     log(__to_str_array("u8 foo"));
     log(foo);
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/script-main-two-args/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/script-main-two-args/src/main.sw
index e6925db541c..e057ed27b8c 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/script-main-two-args/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/script-main-two-args/src/main.sw
@@ -6,6 +6,22 @@ struct Baz {
     x: u8,
 }
 
+impl AbiEncode for str[6] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
 fn main(foo: u8, bar: Baz) -> u8 {
     log(__to_str_array("u8 foo"));
     log(foo);
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/script-with-vector/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/script-with-vector/src/main.sw
index de319bf4e8f..3945cc4d848 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/script-with-vector/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/script-with-vector/src/main.sw
@@ -2,6 +2,47 @@ script;
 
 use std::logging::log;
 
+impl AbiEncode for str[14] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for str[10] {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let s = from_str_array(self);
+
+        let len = s.len();
+        let ptr = s.as_ptr();
+
+        let mut i = 0;
+        while i < len {
+            let byte = ptr.add::<u8>(i).read::<u8>();
+            buffer.push(byte);
+            i += 1;
+        }
+    }
+}
+
+impl AbiEncode for raw_ptr {
+    fn abi_encode(self, ref mut buffer: Buffer) {
+        let address = asm(ptr: self) {
+            ptr: u64
+        };
+        buffer.push(address);
+    }
+}
+
 fn main(vector: Vec<u64>) {
     log(vector.get(0).unwrap());
 
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/token_abi/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/token_abi/src/main.sw
index a0eec4d0aff..4fab0a48e2c 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/token_abi/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/token_abi/src/main.sw
@@ -1,6 +1,6 @@
 library;
 
-use std::{address::Address, contract_id::ContractId, token::*};
+use std::{address::Address, asset::*, contract_id::ContractId};
 
 abi Token {
     fn mint_coins(mint_amount: u64);
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/token_contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/token_contract/src/main.sw
index dc02e6e71ca..11751fc7204 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/token_contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/token_contract/src/main.sw
@@ -1,7 +1,7 @@
 // #region token-contract
 contract;
 
-use std::{context::balance_of, context::msg_amount, token::*};
+use std::{asset::*, context::balance_of, context::msg_amount};
 use token_abi::Token;
 use std::constants::ZERO_B256;
 
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-contract/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-contract/src/main.sw
index 4b7bd580697..27018143ea5 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-contract/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-contract/src/main.sw
@@ -248,19 +248,15 @@ impl MyContract for Contract {
         }
         {
             let mut exp_vec_in_vec = Vec::new();
-            exp_vec_in_vec
-                .push(vec_from([0, 1, 2]));
-            exp_vec_in_vec
-                .push(vec_from([0, 1, 2]));
+            exp_vec_in_vec.push(vec_from([0, 1, 2]));
+            exp_vec_in_vec.push(vec_from([0, 1, 2]));
 
             require(vec_in_vec == exp_vec_in_vec, "vec_in_vec err");
         }
         {
             let mut exp_struct_in_vec = Vec::new();
-            exp_struct_in_vec
-                .push(SomeStruct { a: 0u32 });
-            exp_struct_in_vec
-                .push(SomeStruct { a: 1u32 });
+            exp_struct_in_vec.push(SomeStruct { a: 0u32 });
+            exp_struct_in_vec.push(SomeStruct { a: 1u32 });
 
             require(struct_in_vec == exp_struct_in_vec, "struct_in_vec err");
         }
@@ -273,10 +269,8 @@ impl MyContract for Contract {
         }
         {
             let mut exp_array_in_vec = Vec::new();
-            exp_array_in_vec
-                .push([0, 1]);
-            exp_array_in_vec
-                .push([0, 1]);
+            exp_array_in_vec.push([0, 1]);
+            exp_array_in_vec.push([0, 1]);
 
             require(array_in_vec == exp_array_in_vec, "array_in_vec err");
         }
@@ -293,19 +287,15 @@ impl MyContract for Contract {
         }
         {
             let mut exp_enum_in_vec = Vec::new();
-            exp_enum_in_vec
-                .push(SomeEnum::a(0));
-            exp_enum_in_vec
-                .push(SomeEnum::a(1));
+            exp_enum_in_vec.push(SomeEnum::a(0));
+            exp_enum_in_vec.push(SomeEnum::a(1));
 
             require(enum_in_vec == exp_enum_in_vec, "enum_in_vec err");
         }
         {
             let mut exp_tuple_in_vec = Vec::new();
-            exp_tuple_in_vec
-                .push((0, 0));
-            exp_tuple_in_vec
-                .push((1, 1));
+            exp_tuple_in_vec.push((0, 0));
+            exp_tuple_in_vec.push((1, 1));
 
             require(tuple_in_vec == exp_tuple_in_vec, "tuple_in_vec err");
         }
@@ -320,15 +310,12 @@ impl MyContract for Contract {
             let mut inner_vec_1 = Vec::new();
 
             let inner_inner_vec_1 = vec_from([0, 1, 2]);
-            inner_vec_1
-                .push(inner_inner_vec_1);
+            inner_vec_1.push(inner_inner_vec_1);
 
             let inner_inner_vec_2 = vec_from([3, 4, 5]);
-            inner_vec_1
-                .push(inner_inner_vec_2);
+            inner_vec_1.push(inner_inner_vec_2);
 
-            exp_vec_in_a_vec_in_a_struct_in_a_vec
-                .push(SomeStruct { a: inner_vec_1 });
+            exp_vec_in_a_vec_in_a_struct_in_a_vec.push(SomeStruct { a: inner_vec_1 });
 
             let mut inner_vec_2 = Vec::new();
 
diff --git a/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-script/src/main.sw b/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-script/src/main.sw
index b6a8d740bfd..1db2f241a64 100644
--- a/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-script/src/main.sw
+++ b/packages/fuel-gauge/test/fixtures/forc-projects/vector-types-script/src/main.sw
@@ -231,19 +231,15 @@ fn main(
     }
     {
         let mut exp_vec_in_vec = Vec::new();
-        exp_vec_in_vec
-            .push(vec_from([0, 1, 2]));
-        exp_vec_in_vec
-            .push(vec_from([0, 1, 2]));
+        exp_vec_in_vec.push(vec_from([0, 1, 2]));
+        exp_vec_in_vec.push(vec_from([0, 1, 2]));
 
         require(vec_in_vec == exp_vec_in_vec, "vec_in_vec err");
     }
     {
         let mut exp_struct_in_vec = Vec::new();
-        exp_struct_in_vec
-            .push(SomeStruct { a: 0u32 });
-        exp_struct_in_vec
-            .push(SomeStruct { a: 1u32 });
+        exp_struct_in_vec.push(SomeStruct { a: 0u32 });
+        exp_struct_in_vec.push(SomeStruct { a: 1u32 });
 
         require(struct_in_vec == exp_struct_in_vec, "struct_in_vec err");
     }
@@ -256,10 +252,8 @@ fn main(
     }
     {
         let mut exp_array_in_vec = Vec::new();
-        exp_array_in_vec
-            .push([0, 1]);
-        exp_array_in_vec
-            .push([0, 1]);
+        exp_array_in_vec.push([0, 1]);
+        exp_array_in_vec.push([0, 1]);
 
         require(array_in_vec == exp_array_in_vec, "array_in_vec err");
     }
@@ -276,19 +270,15 @@ fn main(
     }
     {
         let mut exp_enum_in_vec = Vec::new();
-        exp_enum_in_vec
-            .push(SomeEnum::a(0));
-        exp_enum_in_vec
-            .push(SomeEnum::a(1));
+        exp_enum_in_vec.push(SomeEnum::a(0));
+        exp_enum_in_vec.push(SomeEnum::a(1));
 
         require(enum_in_vec == exp_enum_in_vec, "enum_in_vec err");
     }
     {
         let mut exp_tuple_in_vec = Vec::new();
-        exp_tuple_in_vec
-            .push((0, 0));
-        exp_tuple_in_vec
-            .push((1, 1));
+        exp_tuple_in_vec.push((0, 0));
+        exp_tuple_in_vec.push((1, 1));
 
         require(tuple_in_vec == exp_tuple_in_vec, "tuple_in_vec err");
     }
@@ -303,28 +293,22 @@ fn main(
         let mut inner_vec_1 = Vec::new();
 
         let inner_inner_vec_1 = vec_from([0, 1, 2]);
-        inner_vec_1
-            .push(inner_inner_vec_1);
+        inner_vec_1.push(inner_inner_vec_1);
 
         let inner_inner_vec_2 = vec_from([3, 4, 5]);
-        inner_vec_1
-            .push(inner_inner_vec_2);
+        inner_vec_1.push(inner_inner_vec_2);
 
-        exp_vec_in_a_vec_in_a_struct_in_a_vec
-            .push(SomeStruct { a: inner_vec_1 });
+        exp_vec_in_a_vec_in_a_struct_in_a_vec.push(SomeStruct { a: inner_vec_1 });
 
         let mut inner_vec_2 = Vec::new();
 
         let inner_inner_vec_3 = vec_from([6, 7, 8]);
-        inner_vec_2
-            .push(inner_inner_vec_3);
+        inner_vec_2.push(inner_inner_vec_3);
 
         let inner_inner_vec_4 = vec_from([9, 10, 11]);
-        inner_vec_2
-            .push(inner_inner_vec_4);
+        inner_vec_2.push(inner_inner_vec_4);
 
-        exp_vec_in_a_vec_in_a_struct_in_a_vec
-            .push(SomeStruct { a: inner_vec_2 });
+        exp_vec_in_a_vec_in_a_struct_in_a_vec.push(SomeStruct { a: inner_vec_2 });
 
         require(
             vec_in_a_vec_in_a_struct_in_a_vec == exp_vec_in_a_vec_in_a_struct_in_a_vec,
diff --git a/packages/script/test/fixtures/forc-projects/call-test-script/src/main.sw b/packages/script/test/fixtures/forc-projects/call-test-script/src/main.sw
index e7131afba44..421880956b4 100644
--- a/packages/script/test/fixtures/forc-projects/call-test-script/src/main.sw
+++ b/packages/script/test/fixtures/forc-projects/call-test-script/src/main.sw
@@ -2,7 +2,7 @@ script;
 
 fn log<T>(v: T) {
     asm(r1: v) {
-        log  r1 zero zero zero;
+        log r1 zero zero zero;
     }
 }
 
diff --git a/packages/versions/src/lib/getBuiltinVersions.ts b/packages/versions/src/lib/getBuiltinVersions.ts
index 209c24be200..3543042d917 100644
--- a/packages/versions/src/lib/getBuiltinVersions.ts
+++ b/packages/versions/src/lib/getBuiltinVersions.ts
@@ -1,6 +1,6 @@
 export function getBuiltinVersions() {
   return {
-    FORC: '0.48.1',
+    FORC: '0.49.1',
     FUEL_CORE: '0.22.0',
     FUELS: '0.71.1',
   };
diff --git a/scripts/forc-check.sh b/scripts/forc-check.sh
index 6e808106be3..3fccdd8f0b9 100755
--- a/scripts/forc-check.sh
+++ b/scripts/forc-check.sh
@@ -1,32 +1,36 @@
 #!/bin/bash
 
-forc_projects=$(find . -type f -name "Forc.toml")
 main_dir=$(pwd)
+forc_tomls=$(find . -type f -name "Forc.toml")
 forc_fmt=$(realpath ./packages/forc/forc-binaries/forc-fmt)
+expected_authors="authors = [\"Fuel Labs <contact@fuel.sh>\"]"
 
 ERRORED=0
 RED='\033[0;31m'
 NC='\033[0m' # No Color
-authors="authors = [\"Fuel Labs <contact@fuel.sh>\"]"
 
-for i in $forc_projects; do
-    cd "${i/Forc.toml/''}" || exit
+for forc_toml in $forc_tomls; do
+
+    # cd into the respective forc project
+    cd ${forc_toml/Forc.toml/''}
+
+    # validate forc formatting
     eval "$forc_fmt" --check
     if [ $? = "1" ]; then
         ERRORED=1
     fi
 
-    # do authors checks only on projects, not on workspaces
-    if [ "$(head -n 1 Forc.toml)" != '[project]' ]; then
-        cd "$main_dir" || exit
-        continue
+    # validate TOML `authors` (for projects only)
+    if [ "$(head -n 1 Forc.toml)" == "[project]" ]; then
+        authors=$(grep "authors =" Forc.toml)
+        if [[ "$authors" != "$expected_authors" ]]; then
+            ERROR=1
+            echo -e "authors field should be: ${RED}$expected_authors] ${NC} but is ${RED}$authors ${NC}"
+        fi
     fi
 
-    if [ "$authors" != "$(grep "authors =" Forc.toml)" ]; then
-        echo -e authors field should be: $RED"authors = [\"Fuel Labs <contact@fuel.sh>\"]"$NC but is $RED"$authors"$NC
-        ERRORED=1
-    fi
-    cd "$main_dir" || exit
+    # back to main dir
+    cd $main_dir
 done
 
 exit $ERRORED
diff --git a/scripts/forc-format.sh b/scripts/forc-format.sh
index 85f1880220a..6c45d1b3667 100755
--- a/scripts/forc-format.sh
+++ b/scripts/forc-format.sh
@@ -1,26 +1,27 @@
 #!/bin/bash
 
-forc_projects=$(find . -type f -name "Forc.toml")
 main_dir=$(pwd)
+forc_tomls=$(find . -type f -name "Forc.toml")
 forc_fmt=$(realpath ./packages/forc/forc-binaries/forc-fmt)
-authors="authors = [\"Fuel Labs <contact@fuel.sh>\"]"
+expected_authors="authors = [\"Fuel Labs <contact@fuel.sh>\"]"
 
-for i in $forc_projects; do
-    cd "${i/Forc.toml/''}" || exit
+for forc_toml in $forc_tomls; do
 
-    eval "$forc_fmt"
+     # cd into the respective forc project
+    cd ${forc_toml/Forc.toml/''}
 
-    # format authors field only on projects, not on workspaces
-    if [ "$(head -n 1 Forc.toml)" != '[project]' ]; then
-        cd "$main_dir" || exit
-        continue
-    fi
+    # fix forc formatting
+    eval "$forc_fmt"
 
-    if [ "$(grep "authors =" Forc.toml)" = "" ]; then
-        sed -i "1 a $authors" Forc.toml
-    else
-        sed -i -E "s/authors =.*/${authors}/g" Forc.toml
+    # fix TOML `authors` (for projects only)
+    if [ "$(head -n 1 Forc.toml)" == "[project]" ]; then
+        authors=$(grep "authors =" Forc.toml)
+        if [[ "$authors" != "$expected_authors" ]]; then
+            sed -i.bkp "s/authors =.*/${expected_authors}/g" Forc.toml
+            rm "Forc.toml.bkp"
+        fi
     fi
 
-    cd "$main_dir" || exit
+    # back to main dir
+    cd $main_dir
 done