Repository: stellar/rs-soroban-env
Pull request #1319 (2024-01-09 05:25:03)

Run CI for the msrv and latest rust version
### What
Build and test the MSRV and latest.

### Why
For stellar/rs-soroban-env#1311


Patch:
diff --git a/.github/workflows/rust-version.yml b/.github/workflows/rust-version.yml
deleted file mode 100644
index 4fc93c42..00000000
--- a/.github/workflows/rust-version.yml
+++ /dev/null
@@ -1,11 +0,0 @@
-name: Rust Version
-
-on:
-  workflow_dispatch:
-  schedule:
-    - cron:  '0 13 * * *'
-
-jobs:
-
-  set-rust-version:
-    uses: stellar/actions/.github/workflows/rust-set-rust-version.yml@main
diff --git a/.github/workflows/rust.yml b/.github/workflows/rust.yml
index 0530cb9e..84f62a8e 100644
--- a/.github/workflows/rust.yml
+++ b/.github/workflows/rust.yml
@@ -66,6 +66,7 @@ jobs:
   build-and-test:
     strategy:
       matrix:
+        rust: [msrv, latest]
         sys:
         - os: ubuntu-latest
           target: wasm32-unknown-unknown
@@ -87,12 +88,19 @@ jobs:
     steps:
     - uses: actions/checkout@v3
     - uses: stellar/actions/rust-cache@main
+    - name: Use the minimum supported Rust version
+      if: matrix.rust == 'msrv'
+      run: |
+        msrv="$(cargo metadata --format-version 1 --no-deps | jq -r '.packages | map(.rust_version) | map(values) | min')"
+        rustup override set $msrv
+        rustup component add clippy --toolchain $msrv
     - run: rustup update
+    - run: cargo version
     - run: rustup target add ${{ matrix.sys.target }}
-    - uses: stellar/binaries@v12
+    - uses: stellar/binaries@v18
       with:
         name: cargo-hack
-        version: 0.5.16
+        version: 0.5.28
     - run: cargo hack --each-feature clippy --locked --target ${{ matrix.sys.target }}
     - if: matrix.sys.test
       run: cargo hack --each-feature test --profile test-opt --locked --target ${{ matrix.sys.target }}
diff --git a/Cargo.toml b/Cargo.toml
index b26619a2..26b47a8e 100644
--- a/Cargo.toml
+++ b/Cargo.toml
@@ -17,6 +17,7 @@ exclude = ["soroban-test-wasms/wasm-workspace"]
 
 [workspace.package]
 version = "20.1.0"
+rust-version = "1.74.0"
 
 [workspace.dependencies]
 soroban-env-common = { version = "=20.1.0", path = "soroban-env-common", default-features = false }
diff --git a/soroban-bench-utils/Cargo.toml b/soroban-bench-utils/Cargo.toml
index 1f200cf0..359049df 100644
--- a/soroban-bench-utils/Cargo.toml
+++ b/soroban-bench-utils/Cargo.toml
@@ -7,7 +7,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 version.workspace = true
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 publish = false
 
 [dependencies]
diff --git a/soroban-builtin-sdk-macros/Cargo.toml b/soroban-builtin-sdk-macros/Cargo.toml
index ec26e807..7e9b1ea6 100644
--- a/soroban-builtin-sdk-macros/Cargo.toml
+++ b/soroban-builtin-sdk-macros/Cargo.toml
@@ -7,7 +7,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 version.workspace = true
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 proc-macro = true
diff --git a/soroban-env-common/Cargo.toml b/soroban-env-common/Cargo.toml
index 2839795a..4828fd2d 100644
--- a/soroban-env-common/Cargo.toml
+++ b/soroban-env-common/Cargo.toml
@@ -8,7 +8,7 @@ license = "Apache-2.0"
 version.workspace = true
 readme = "../README.md"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [build_dependencies]
 crate-git-revision = "=0.0.6"
diff --git a/soroban-env-guest/Cargo.toml b/soroban-env-guest/Cargo.toml
index f46cb75a..5ce8ba4e 100644
--- a/soroban-env-guest/Cargo.toml
+++ b/soroban-env-guest/Cargo.toml
@@ -8,7 +8,7 @@ license = "Apache-2.0"
 version.workspace = true
 readme = "../README.md"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [dependencies]
 soroban-env-common = { workspace = true, features = [] }
diff --git a/soroban-env-host/Cargo.toml b/soroban-env-host/Cargo.toml
index 3974e111..a97b13c5 100644
--- a/soroban-env-host/Cargo.toml
+++ b/soroban-env-host/Cargo.toml
@@ -8,7 +8,7 @@ license = "Apache-2.0"
 version.workspace = true
 readme = "../README.md"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 build = "build.rs"
 
 exclude = ["observations/"]
diff --git a/soroban-env-macros/Cargo.toml b/soroban-env-macros/Cargo.toml
index 751cbac1..ed0adce7 100644
--- a/soroban-env-macros/Cargo.toml
+++ b/soroban-env-macros/Cargo.toml
@@ -7,7 +7,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 version.workspace = true
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 proc-macro = true
diff --git a/soroban-synth-wasm/Cargo.toml b/soroban-synth-wasm/Cargo.toml
index 499cc7cc..4b1ea2eb 100644
--- a/soroban-synth-wasm/Cargo.toml
+++ b/soroban-synth-wasm/Cargo.toml
@@ -7,7 +7,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 version.workspace = true
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 publish = false
 
 [dependencies]


Test patch:
diff --git a/soroban-env-common/tests/no_std/Cargo.toml b/soroban-env-common/tests/no_std/Cargo.toml
index a0eeeb01..2a254d46 100644
--- a/soroban-env-common/tests/no_std/Cargo.toml
+++ b/soroban-env-common/tests/no_std/Cargo.toml
@@ -3,7 +3,7 @@ name = "test_no_std"
 version.workspace = true
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 doctest = false
diff --git a/soroban-env-host/observations/test__symbol__invalid_symbol_conversions.json b/soroban-env-host/observations/test__symbol__invalid_symbol_conversions.json
new file mode 100644
index 00000000..30fe4627
--- /dev/null
+++ b/soroban-env-host/observations/test__symbol__invalid_symbol_conversions.json
@@ -0,0 +1,56 @@
+{
+  "   0 begin": "cpu:14488, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-",
+  "   1 call symbol_new_from_slice(9)": "",
+  "   2 call symbol_new_from_slice(9)": "cpu:14533",
+  "   3 call symbol_new_from_slice(9)": "cpu:14578",
+  "   4 call symbol_new_from_slice(9)": "cpu:14623",
+  "   5 call symbol_new_from_slice(1)": "cpu:14668",
+  "   6 call symbol_new_from_slice(1)": "cpu:14712",
+  "   7 call symbol_new_from_slice(1)": "cpu:14756",
+  "   8 call symbol_new_from_slice(1)": "cpu:14800",
+  "   9 call symbol_new_from_slice(9)": "cpu:14844",
+  "  10 call symbol_new_from_slice(9)": "cpu:14889",
+  "  11 call symbol_new_from_slice(9)": "cpu:14934",
+  "  12 call symbol_new_from_slice(9)": "cpu:14979",
+  "  13 call symbol_new_from_slice(7)": "cpu:15024",
+  "  14 call symbol_new_from_slice(7)": "cpu:15068",
+  "  15 call symbol_new_from_slice(7)": "cpu:15112",
+  "  16 call symbol_new_from_slice(7)": "cpu:15156",
+  "  17 call symbol_new_from_slice(4)": "cpu:15200",
+  "  18 call symbol_new_from_slice(4)": "cpu:15244",
+  "  19 call symbol_new_from_slice(4)": "cpu:15288",
+  "  20 call symbol_new_from_slice(4)": "cpu:15332",
+  "  21 call symbol_new_from_slice(2)": "cpu:15376",
+  "  22 call symbol_new_from_slice(2)": "cpu:15420",
+  "  23 call symbol_new_from_slice(2)": "cpu:15464",
+  "  24 call symbol_new_from_slice(2)": "cpu:15508",
+  "  25 call symbol_new_from_slice(3)": "cpu:15552",
+  "  26 call symbol_new_from_slice(3)": "cpu:15596",
+  "  27 call symbol_new_from_slice(3)": "cpu:15640",
+  "  28 call symbol_new_from_slice(3)": "cpu:15684",
+  "  29 call symbol_new_from_slice(14)": "cpu:15728",
+  "  30 call symbol_new_from_slice(14)": "cpu:15773",
+  "  31 call symbol_new_from_slice(14)": "cpu:15818",
+  "  32 call symbol_new_from_slice(14)": "cpu:15863",
+  "  33 call symbol_new_from_slice(15)": "cpu:16431, mem:30",
+  "  34 call symbol_new_from_slice(15)": "cpu:16476",
+  "  35 call symbol_new_from_slice(15)": "cpu:16521",
+  "  36 call symbol_new_from_slice(15)": "cpu:16566",
+  "  37 call symbol_new_from_slice(17)": "cpu:17134, mem:61",
+  "  38 call symbol_new_from_slice(17)": "cpu:17180",
+  "  39 call symbol_new_from_slice(17)": "cpu:17226",
+  "  40 call symbol_new_from_slice(17)": "cpu:17272",
+  "  41 call symbol_new_from_slice(20)": "cpu:17843, mem:94",
+  "  42 call symbol_new_from_slice(20)": "cpu:17889",
+  "  43 call symbol_new_from_slice(20)": "cpu:17935",
+  "  44 call symbol_new_from_slice(20)": "cpu:17981",
+  "  45 call symbol_new_from_slice(22)": "cpu:18552, mem:130",
+  "  46 call symbol_new_from_slice(22)": "cpu:18598",
+  "  47 call symbol_new_from_slice(22)": "cpu:18644",
+  "  48 call symbol_new_from_slice(22)": "cpu:18690",
+  "  49 call symbol_new_from_slice(23)": "cpu:19261, mem:168",
+  "  50 call symbol_new_from_slice(23)": "cpu:19307",
+  "  51 call symbol_new_from_slice(23)": "cpu:19353",
+  "  52 call symbol_new_from_slice(23)": "cpu:19399",
+  "  53 end": "cpu:19970, mem:207, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-"
+}
\ No newline at end of file
diff --git a/soroban-env-host/observations/test__symbol__valid_long_symbol_conversions.json b/soroban-env-host/observations/test__symbol__valid_long_symbol_conversions.json
new file mode 100644
index 00000000..039b71e5
--- /dev/null
+++ b/soroban-env-host/observations/test__symbol__valid_long_symbol_conversions.json
@@ -0,0 +1,164 @@
+{
+  "   0 begin": "cpu:14488, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-",
+  "   1 call symbol_new_from_slice(13)": "",
+  "   2 ret symbol_new_from_slice -> Ok(Symbol(obj#1))": "cpu:15496, mem:93, objs:-/1@e50c384f",
+  "   3 call symbol_len(Symbol(obj#1))": "",
+  "   4 ret symbol_len -> Ok(U32(13))": "cpu:15618",
+  "   5 call symbol_copy_to_slice(Symbol(obj#1), U32(0), 13)": "",
+  "   6 ret symbol_copy_to_slice -> Ok(())": "cpu:15722",
+  "   7 call symbol_new_from_slice(13)": "",
+  "   8 ret symbol_new_from_slice -> Ok(Symbol(obj#3))": "cpu:16730, mem:186, objs:-/2@98948315",
+  "   9 call symbol_len(Symbol(obj#3))": "",
+  "  10 ret symbol_len -> Ok(U32(13))": "cpu:16852",
+  "  11 call symbol_copy_to_slice(Symbol(obj#3), U32(0), 13)": "",
+  "  12 ret symbol_copy_to_slice -> Ok(())": "cpu:16956",
+  "  13 call symbol_new_from_slice(13)": "",
+  "  14 ret symbol_new_from_slice -> Ok(Symbol(obj#5))": "cpu:17964, mem:279, objs:-/3@1a294b9d",
+  "  15 call symbol_len(Symbol(obj#5))": "",
+  "  16 ret symbol_len -> Ok(U32(13))": "cpu:18086",
+  "  17 call symbol_copy_to_slice(Symbol(obj#5), U32(0), 13)": "",
+  "  18 ret symbol_copy_to_slice -> Ok(())": "cpu:18190",
+  "  19 call symbol_new_from_slice(13)": "",
+  "  20 ret symbol_new_from_slice -> Ok(Symbol(obj#7))": "cpu:19198, mem:372, objs:-/4@6f62000a",
+  "  21 call symbol_len(Symbol(obj#7))": "",
+  "  22 ret symbol_len -> Ok(U32(13))": "cpu:19320",
+  "  23 call symbol_copy_to_slice(Symbol(obj#7), U32(0), 13)": "",
+  "  24 ret symbol_copy_to_slice -> Ok(())": "cpu:19424",
+  "  25 call symbol_new_from_slice(13)": "",
+  "  26 ret symbol_new_from_slice -> Ok(Symbol(obj#9))": "cpu:20432, mem:465, objs:-/5@8a50d322",
+  "  27 call symbol_len(Symbol(obj#9))": "",
+  "  28 ret symbol_len -> Ok(U32(13))": "cpu:20554",
+  "  29 call symbol_copy_to_slice(Symbol(obj#9), U32(0), 13)": "",
+  "  30 ret symbol_copy_to_slice -> Ok(())": "cpu:20658",
+  "  31 call symbol_new_from_slice(13)": "",
+  "  32 ret symbol_new_from_slice -> Ok(Symbol(obj#11))": "cpu:21666, mem:558, objs:-/6@bed7a79d",
+  "  33 call symbol_len(Symbol(obj#11))": "",
+  "  34 ret symbol_len -> Ok(U32(13))": "cpu:21788",
+  "  35 call symbol_copy_to_slice(Symbol(obj#11), U32(0), 13)": "",
+  "  36 ret symbol_copy_to_slice -> Ok(())": "cpu:21892",
+  "  37 call symbol_len(Symbol(obj#13))": "cpu:22855, mem:651, objs:-/7@91d73a56",
+  "  38 ret symbol_len -> Ok(U32(13))": "cpu:22977",
+  "  39 call symbol_copy_to_slice(Symbol(obj#13), U32(0), 13)": "",
+  "  40 ret symbol_copy_to_slice -> Ok(())": "cpu:23081",
+  "  41 call symbol_new_from_slice(32)": "",
+  "  42 ret symbol_new_from_slice -> Ok(Symbol(obj#15))": "cpu:24098, mem:763, objs:-/8@8f171c6f",
+  "  43 call symbol_len(Symbol(obj#15))": "",
+  "  44 ret symbol_len -> Ok(U32(32))": "cpu:24220",
+  "  45 call symbol_copy_to_slice(Symbol(obj#15), U32(0), 32)": "",
+  "  46 ret symbol_copy_to_slice -> Ok(())": "cpu:24327",
+  "  47 call symbol_new_from_slice(32)": "",
+  "  48 ret symbol_new_from_slice -> Ok(Symbol(obj#17))": "cpu:25344, mem:875, objs:-/9@73b4f3ed",
+  "  49 call symbol_len(Symbol(obj#17))": "",
+  "  50 ret symbol_len -> Ok(U32(32))": "cpu:25466",
+  "  51 call symbol_copy_to_slice(Symbol(obj#17), U32(0), 32)": "",
+  "  52 ret symbol_copy_to_slice -> Ok(())": "cpu:25573",
+  "  53 call symbol_new_from_slice(32)": "",
+  "  54 ret symbol_new_from_slice -> Ok(Symbol(obj#19))": "cpu:26590, mem:987, objs:-/10@3b114173",
+  "  55 call symbol_len(Symbol(obj#19))": "",
+  "  56 ret symbol_len -> Ok(U32(32))": "cpu:26712",
+  "  57 call symbol_copy_to_slice(Symbol(obj#19), U32(0), 32)": "",
+  "  58 ret symbol_copy_to_slice -> Ok(())": "cpu:26819",
+  "  59 call symbol_new_from_slice(32)": "",
+  "  60 ret symbol_new_from_slice -> Ok(Symbol(obj#21))": "cpu:27836, mem:1099, objs:-/11@a4b5f5e4",
+  "  61 call symbol_len(Symbol(obj#21))": "",
+  "  62 ret symbol_len -> Ok(U32(32))": "cpu:27958",
+  "  63 call symbol_copy_to_slice(Symbol(obj#21), U32(0), 32)": "",
+  "  64 ret symbol_copy_to_slice -> Ok(())": "cpu:28065",
+  "  65 call symbol_new_from_slice(32)": "",
+  "  66 ret symbol_new_from_slice -> Ok(Symbol(obj#23))": "cpu:29082, mem:1211, objs:-/12@4d81f7a5",
+  "  67 call symbol_len(Symbol(obj#23))": "",
+  "  68 ret symbol_len -> Ok(U32(32))": "cpu:29204",
+  "  69 call symbol_copy_to_slice(Symbol(obj#23), U32(0), 32)": "",
+  "  70 ret symbol_copy_to_slice -> Ok(())": "cpu:29311",
+  "  71 call symbol_new_from_slice(32)": "",
+  "  72 ret symbol_new_from_slice -> Ok(Symbol(obj#25))": "cpu:30328, mem:1323, objs:-/13@740d10dc",
+  "  73 call symbol_len(Symbol(obj#25))": "",
+  "  74 ret symbol_len -> Ok(U32(32))": "cpu:30450",
+  "  75 call symbol_copy_to_slice(Symbol(obj#25), U32(0), 32)": "",
+  "  76 ret symbol_copy_to_slice -> Ok(())": "cpu:30557",
+  "  77 call symbol_len(Symbol(obj#27))": "cpu:31526, mem:1435, objs:-/14@8c20905b",
+  "  78 ret symbol_len -> Ok(U32(32))": "cpu:31648",
+  "  79 call symbol_copy_to_slice(Symbol(obj#27), U32(0), 32)": "",
+  "  80 ret symbol_copy_to_slice -> Ok(())": "cpu:31755",
+  "  81 call symbol_new_from_slice(32)": "",
+  "  82 ret symbol_new_from_slice -> Ok(Symbol(obj#29))": "cpu:32772, mem:1547, objs:-/15@3c1d2d9f",
+  "  83 call symbol_len(Symbol(obj#29))": "",
+  "  84 ret symbol_len -> Ok(U32(32))": "cpu:32894",
+  "  85 call symbol_copy_to_slice(Symbol(obj#29), U32(0), 32)": "",
+  "  86 ret symbol_copy_to_slice -> Ok(())": "cpu:33001",
+  "  87 call symbol_new_from_slice(32)": "",
+  "  88 ret symbol_new_from_slice -> Ok(Symbol(obj#31))": "cpu:34018, mem:1659, objs:-/16@793b833b",
+  "  89 call symbol_len(Symbol(obj#31))": "",
+  "  90 ret symbol_len -> Ok(U32(32))": "cpu:34140",
+  "  91 call symbol_copy_to_slice(Symbol(obj#31), U32(0), 32)": "",
+  "  92 ret symbol_copy_to_slice -> Ok(())": "cpu:34247",
+  "  93 call symbol_new_from_slice(32)": "",
+  "  94 ret symbol_new_from_slice -> Ok(Symbol(obj#33))": "cpu:35264, mem:1771, objs:-/17@3cf5929",
+  "  95 call symbol_len(Symbol(obj#33))": "",
+  "  96 ret symbol_len -> Ok(U32(32))": "cpu:35386",
+  "  97 call symbol_copy_to_slice(Symbol(obj#33), U32(0), 32)": "",
+  "  98 ret symbol_copy_to_slice -> Ok(())": "cpu:35493",
+  "  99 call symbol_new_from_slice(32)": "",
+  " 100 ret symbol_new_from_slice -> Ok(Symbol(obj#35))": "cpu:36510, mem:1883, objs:-/18@2202dfaf",
+  " 101 call symbol_len(Symbol(obj#35))": "",
+  " 102 ret symbol_len -> Ok(U32(32))": "cpu:36632",
+  " 103 call symbol_copy_to_slice(Symbol(obj#35), U32(0), 32)": "",
+  " 104 ret symbol_copy_to_slice -> Ok(())": "cpu:36739",
+  " 105 call symbol_new_from_slice(32)": "",
+  " 106 ret symbol_new_from_slice -> Ok(Symbol(obj#37))": "cpu:37756, mem:1995, objs:-/19@b60fdc31",
+  " 107 call symbol_len(Symbol(obj#37))": "",
+  " 108 ret symbol_len -> Ok(U32(32))": "cpu:37878",
+  " 109 call symbol_copy_to_slice(Symbol(obj#37), U32(0), 32)": "",
+  " 110 ret symbol_copy_to_slice -> Ok(())": "cpu:37985",
+  " 111 call symbol_new_from_slice(32)": "",
+  " 112 ret symbol_new_from_slice -> Ok(Symbol(obj#39))": "cpu:39002, mem:2107, objs:-/20@75d67786",
+  " 113 call symbol_len(Symbol(obj#39))": "",
+  " 114 ret symbol_len -> Ok(U32(32))": "cpu:39124",
+  " 115 call symbol_copy_to_slice(Symbol(obj#39), U32(0), 32)": "",
+  " 116 ret symbol_copy_to_slice -> Ok(())": "cpu:39231",
+  " 117 call symbol_len(Symbol(obj#41))": "cpu:40200, mem:2219, objs:-/21@dd11f5e8",
+  " 118 ret symbol_len -> Ok(U32(32))": "cpu:40322",
+  " 119 call symbol_copy_to_slice(Symbol(obj#41), U32(0), 32)": "",
+  " 120 ret symbol_copy_to_slice -> Ok(())": "cpu:40429",
+  " 121 call symbol_new_from_slice(32)": "",
+  " 122 ret symbol_new_from_slice -> Ok(Symbol(obj#43))": "cpu:41446, mem:2331, objs:-/22@657830d4",
+  " 123 call symbol_len(Symbol(obj#43))": "",
+  " 124 ret symbol_len -> Ok(U32(32))": "cpu:41568",
+  " 125 call symbol_copy_to_slice(Symbol(obj#43), U32(0), 32)": "",
+  " 126 ret symbol_copy_to_slice -> Ok(())": "cpu:41675",
+  " 127 call symbol_new_from_slice(32)": "",
+  " 128 ret symbol_new_from_slice -> Ok(Symbol(obj#45))": "cpu:42692, mem:2443, objs:-/23@446dce8f",
+  " 129 call symbol_len(Symbol(obj#45))": "",
+  " 130 ret symbol_len -> Ok(U32(32))": "cpu:42814",
+  " 131 call symbol_copy_to_slice(Symbol(obj#45), U32(0), 32)": "",
+  " 132 ret symbol_copy_to_slice -> Ok(())": "cpu:42921",
+  " 133 call symbol_new_from_slice(32)": "",
+  " 134 ret symbol_new_from_slice -> Ok(Symbol(obj#47))": "cpu:43938, mem:2555, objs:-/24@4f956dbf",
+  " 135 call symbol_len(Symbol(obj#47))": "",
+  " 136 ret symbol_len -> Ok(U32(32))": "cpu:44060",
+  " 137 call symbol_copy_to_slice(Symbol(obj#47), U32(0), 32)": "",
+  " 138 ret symbol_copy_to_slice -> Ok(())": "cpu:44167",
+  " 139 call symbol_new_from_slice(32)": "",
+  " 140 ret symbol_new_from_slice -> Ok(Symbol(obj#49))": "cpu:45184, mem:2667, objs:-/25@ff5c6af",
+  " 141 call symbol_len(Symbol(obj#49))": "",
+  " 142 ret symbol_len -> Ok(U32(32))": "cpu:45306",
+  " 143 call symbol_copy_to_slice(Symbol(obj#49), U32(0), 32)": "",
+  " 144 ret symbol_copy_to_slice -> Ok(())": "cpu:45413",
+  " 145 call symbol_new_from_slice(32)": "",
+  " 146 ret symbol_new_from_slice -> Ok(Symbol(obj#51))": "cpu:46430, mem:2779, objs:-/26@45fde9d2",
+  " 147 call symbol_len(Symbol(obj#51))": "",
+  " 148 ret symbol_len -> Ok(U32(32))": "cpu:46552",
+  " 149 call symbol_copy_to_slice(Symbol(obj#51), U32(0), 32)": "",
+  " 150 ret symbol_copy_to_slice -> Ok(())": "cpu:46659",
+  " 151 call symbol_new_from_slice(32)": "",
+  " 152 ret symbol_new_from_slice -> Ok(Symbol(obj#53))": "cpu:47676, mem:2891, objs:-/27@4248981f",
+  " 153 call symbol_len(Symbol(obj#53))": "",
+  " 154 ret symbol_len -> Ok(U32(32))": "cpu:47798",
+  " 155 call symbol_copy_to_slice(Symbol(obj#53), U32(0), 32)": "",
+  " 156 ret symbol_copy_to_slice -> Ok(())": "cpu:47905",
+  " 157 call symbol_len(Symbol(obj#55))": "cpu:48874, mem:3003, objs:-/28@b858c080",
+  " 158 ret symbol_len -> Ok(U32(32))": "cpu:48996",
+  " 159 call symbol_copy_to_slice(Symbol(obj#55), U32(0), 32)": "",
+  " 160 ret symbol_copy_to_slice -> Ok(())": "cpu:49103",
+  " 161 end": "cpu:49103, mem:3003, prngs:-/9b4a753, objs:-/28@b858c080, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-"
+}
\ No newline at end of file
diff --git a/soroban-env-host/observations/test__symbol__valid_short_symbol_conversions.json b/soroban-env-host/observations/test__symbol__valid_short_symbol_conversions.json
new file mode 100644
index 00000000..639cd2d8
--- /dev/null
+++ b/soroban-env-host/observations/test__symbol__valid_short_symbol_conversions.json
@@ -0,0 +1,4 @@
+{
+  "   0 begin": "cpu:14488, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-",
+  "   1 end": "cpu:14488, mem:0, prngs:-/9b4a753, objs:-/-, vm:-/-, evt:-, store:-/-, foot:-, stk:-, auth:-/-"
+}
\ No newline at end of file
diff --git a/soroban-env-host/src/test/symbol.rs b/soroban-env-host/src/test/symbol.rs
index 0dbab36f..cb6d5ba5 100644
--- a/soroban-env-host/src/test/symbol.rs
+++ b/soroban-env-host/src/test/symbol.rs
@@ -1,5 +1,6 @@
+use crate::xdr::{self, ScErrorCode, ScErrorType, ScSymbol, ScVal};
 use crate::{Host, HostError};
-use soroban_env_common::{Symbol, TryFromVal, Val};
+use soroban_env_common::{Symbol, SymbolSmall, SymbolStr, TryFromVal, TryIntoVal, Val};
 
 #[test]
 fn invalid_chars() -> Result<(), HostError> {
@@ -51,7 +52,6 @@ fn zero_len() -> Result<(), HostError> {
 
 #[test]
 fn invalid_symbol_scval_to_val() {
-    use crate::xdr;
     let host = observe_host!(Host::test_host_with_recording_footprint());
 
     let string_m = xdr::StringM::try_from(vec![36 /*$*/]).unwrap();
@@ -61,3 +61,156 @@ fn invalid_symbol_scval_to_val() {
 
     assert!(Val::try_from_val(&*host, &symbol).is_err())
 }
+
+#[test]
+fn valid_short_symbol_conversions() {
+    let host = observe_host!(Host::test_host_with_recording_footprint());
+    let valid_symbol_strings = ["", "_", "5", "D", "y", "AaZz_09", "qwe_ASD_7"];
+    for s in valid_symbol_strings {
+        let val: Val = SymbolSmall::try_from_bytes(s.as_bytes()).unwrap().into();
+        let val_payload = val.get_payload();
+        assert_eq!(
+            Val::from(SymbolSmall::try_from_str(s).unwrap()).get_payload(),
+            val_payload
+        );
+        assert_eq!(
+            Val::from(Symbol::try_from_small_bytes(s.as_bytes()).unwrap()).get_payload(),
+            val_payload
+        );
+        assert_eq!(
+            Val::from(Symbol::try_from_val(&*host, &s).unwrap()).get_payload(),
+            val_payload
+        );
+        assert_eq!(
+            Val::from(Symbol::try_from_val(&*host, &s.as_bytes()).unwrap()).get_payload(),
+            val_payload
+        );
+        assert_eq!(
+            Val::from(Symbol::try_from_val(&*host, &ScSymbol(s.try_into().unwrap())).unwrap())
+                .get_payload(),
+            val_payload
+        );
+        assert_eq!(
+            Val::from(
+                Symbol::try_from_val(&*host, &ScVal::Symbol(ScSymbol(s.try_into().unwrap())))
+                    .unwrap()
+            )
+            .get_payload(),
+            val_payload
+        );
+        assert_eq!(
+            host.to_host_val(&ScVal::Symbol(ScSymbol(s.try_into().unwrap())))
+                .unwrap()
+                .get_payload(),
+            val_payload
+        );
+    }
+}
+
+#[test]
+fn valid_long_symbol_conversions() {
+    let host = observe_host!(Host::test_host_with_recording_footprint());
+    let symbol_to_str = |s: Symbol| {
+        let symbol_str: SymbolStr = s.try_into_val(&*host).unwrap();
+        symbol_str.to_string()
+    };
+    let valid_symbol_strings = [
+        "_abc_DEF_567_",
+        "abcdefghijklmnopqrstuvwxyz123456",
+        "098765ABCDEFGHIJKLMNOPQRSTUVWXYZ",
+        "________________________________",
+    ];
+
+    for s in valid_symbol_strings {
+        assert_eq!(symbol_to_str(Symbol::try_from_val(&*host, &s).unwrap()), s);
+        assert_eq!(
+            symbol_to_str(Symbol::try_from_val(&*host, &s.as_bytes()).unwrap()),
+            s
+        );
+        assert_eq!(symbol_to_str(Symbol::try_from_val(&*host, &s).unwrap()), s);
+        assert_eq!(
+            symbol_to_str(Symbol::try_from_val(&*host, &s.as_bytes()).unwrap()),
+            s
+        );
+        assert_eq!(
+            symbol_to_str(Symbol::try_from_val(&*host, &ScSymbol(s.try_into().unwrap())).unwrap()),
+            s
+        );
+        assert_eq!(
+            symbol_to_str(
+                Symbol::try_from_val(&*host, &ScVal::Symbol(ScSymbol(s.try_into().unwrap())))
+                    .unwrap()
+            ),
+            s
+        );
+        assert_eq!(
+            symbol_to_str(
+                Symbol::try_from_val(
+                    &*host,
+                    &host
+                        .to_host_val(&ScVal::Symbol(ScSymbol(s.try_into().unwrap())))
+                        .unwrap()
+                )
+                .unwrap()
+            ),
+            s
+        );
+    }
+}
+
+#[test]
+fn invalid_symbol_conversions() {
+    let host = observe_host!(Host::test_host_with_recording_footprint());
+    let symbol_byte_strs: &[&[u8]] = &[
+        b"12345678\xF4",
+        b"\0",
+        b"12345678\0",
+        b"abc\xC2def",
+        b"\xFFABC",
+        b"_!",
+        b"a b",
+        b"abcCD12345678\xF4",
+        b"aaaaaaaaaaaaaa\0",
+        b"abcdfasdfdasf\xC2def",
+        b"\xFFABCfsdfasdgfsadgsdf",
+        b"35235325235235235131_!",
+        b"asdgfASDFSDFSDGFSDGFa b",
+    ];
+    let invalid_input_err = |e: HostError| {
+        assert!(e.error.is_type(ScErrorType::Value));
+        assert!(e.error.is_code(ScErrorCode::InvalidInput));
+    };
+    let unexpected_type_err = |e: HostError| {
+        assert!(e.error.is_type(ScErrorType::Value));
+        assert!(e.error.is_code(ScErrorCode::UnexpectedType));
+    };
+    for s in symbol_byte_strs {
+        // Some of the test strings aren't valid UTF-8, but we should only interpret
+        // them as bytes.
+        let s_str = unsafe { core::str::from_utf8_unchecked(s) };
+
+        assert!(SymbolSmall::try_from_bytes(s).is_err());
+        assert!(SymbolSmall::try_from_str(s_str).is_err());
+        assert!(Symbol::try_from_small_bytes(s).is_err());
+        invalid_input_err(Symbol::try_from_val(&*host, s).err().unwrap().into());
+        invalid_input_err(Symbol::try_from_val(&*host, &s_str).err().unwrap().into());
+
+        invalid_input_err(
+            Symbol::try_from_val(&*host, &ScSymbol(s_str.try_into().unwrap()))
+                .err()
+                .unwrap()
+                .into(),
+        );
+        invalid_input_err(
+            Symbol::try_from_val(&*host, &ScVal::Symbol(ScSymbol(s_str.try_into().unwrap())))
+                .err()
+                .unwrap()
+                .into(),
+        );
+        unexpected_type_err(
+            host.to_host_val(&ScVal::Symbol(ScSymbol(s_str.try_into().unwrap())))
+                .err()
+                .unwrap(),
+        );
+    }
+}
diff --git a/soroban-test-wasms/Cargo.toml b/soroban-test-wasms/Cargo.toml
index 775a4f71..f1d75ad4 100644
--- a/soroban-test-wasms/Cargo.toml
+++ b/soroban-test-wasms/Cargo.toml
@@ -4,4 +4,4 @@ version.workspace = true
 description = "crate full of precompiled test WASM binaries for soroban -- for use in other tests, do not publish"
 edition = "2021"
 publish = false
-rust-version = "1.74"
\ No newline at end of file
+rust-version.workspace = true
diff --git a/soroban-test-wasms/wasm-workspace/add_f32/Cargo.toml b/soroban-test-wasms/wasm-workspace/add_f32/Cargo.toml
index 0dc1cb5e..326e391e 100644
--- a/soroban-test-wasms/wasm-workspace/add_f32/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/add_f32/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/add_i32/Cargo.toml b/soroban-test-wasms/wasm-workspace/add_i32/Cargo.toml
index 6839cc17..7239403d 100644
--- a/soroban-test-wasms/wasm-workspace/add_i32/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/add_i32/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/alloc/Cargo.toml b/soroban-test-wasms/wasm-workspace/alloc/Cargo.toml
index f1f7221a..f45a4000 100644
--- a/soroban-test-wasms/wasm-workspace/alloc/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/alloc/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true, features = ["alloc"] }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/auth/Cargo.toml b/soroban-test-wasms/wasm-workspace/auth/Cargo.toml
index cc1177a4..4918685b 100644
--- a/soroban-test-wasms/wasm-workspace/auth/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/auth/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/complex/Cargo.toml b/soroban-test-wasms/wasm-workspace/complex/Cargo.toml
index 33438444..8730c7a1 100644
--- a/soroban-test-wasms/wasm-workspace/complex/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/complex/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/conditional_account/Cargo.toml b/soroban-test-wasms/wasm-workspace/conditional_account/Cargo.toml
index 482fab21..d01f7169 100644
--- a/soroban-test-wasms/wasm-workspace/conditional_account/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/conditional_account/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/contract_data/Cargo.toml b/soroban-test-wasms/wasm-workspace/contract_data/Cargo.toml
index ff58be9d..c2b09e8f 100644
--- a/soroban-test-wasms/wasm-workspace/contract_data/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/contract_data/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
diff --git a/soroban-test-wasms/wasm-workspace/contract_sac_transfer/Cargo.toml b/soroban-test-wasms/wasm-workspace/contract_sac_transfer/Cargo.toml
index f0f37edd..67b443f6 100644
--- a/soroban-test-wasms/wasm-workspace/contract_sac_transfer/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/contract_sac_transfer/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/create_contract/Cargo.toml b/soroban-test-wasms/wasm-workspace/create_contract/Cargo.toml
index 688a03cd..7694cd42 100644
--- a/soroban-test-wasms/wasm-workspace/create_contract/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/create_contract/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/delegated_account/Cargo.toml b/soroban-test-wasms/wasm-workspace/delegated_account/Cargo.toml
index c582600c..0657b61b 100644
--- a/soroban-test-wasms/wasm-workspace/delegated_account/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/delegated_account/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/err/Cargo.toml b/soroban-test-wasms/wasm-workspace/err/Cargo.toml
index cd0f3cc7..b9f1ca96 100644
--- a/soroban-test-wasms/wasm-workspace/err/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/err/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/fannkuch/Cargo.toml b/soroban-test-wasms/wasm-workspace/fannkuch/Cargo.toml
index 425aafd8..69ed108a 100644
--- a/soroban-test-wasms/wasm-workspace/fannkuch/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/fannkuch/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/fib/Cargo.toml b/soroban-test-wasms/wasm-workspace/fib/Cargo.toml
index 54353fb4..ff556b3a 100644
--- a/soroban-test-wasms/wasm-workspace/fib/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/fib/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/hostile/Cargo.toml b/soroban-test-wasms/wasm-workspace/hostile/Cargo.toml
index 87290994..3ce30133 100644
--- a/soroban-test-wasms/wasm-workspace/hostile/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/hostile/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
diff --git a/soroban-test-wasms/wasm-workspace/hostile_large_val/Cargo.toml b/soroban-test-wasms/wasm-workspace/hostile_large_val/Cargo.toml
index 6852476b..d725e5ac 100644
--- a/soroban-test-wasms/wasm-workspace/hostile_large_val/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/hostile_large_val/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/invoke_contract/Cargo.toml b/soroban-test-wasms/wasm-workspace/invoke_contract/Cargo.toml
index 805ee5a2..c0275f38 100644
--- a/soroban-test-wasms/wasm-workspace/invoke_contract/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/invoke_contract/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/linear_memory/Cargo.toml b/soroban-test-wasms/wasm-workspace/linear_memory/Cargo.toml
index 496a195a..2af7ccd0 100644
--- a/soroban-test-wasms/wasm-workspace/linear_memory/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/linear_memory/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/sac_reentry_account/Cargo.toml b/soroban-test-wasms/wasm-workspace/sac_reentry_account/Cargo.toml
index 26767bd5..a1fa7fe1 100644
--- a/soroban-test-wasms/wasm-workspace/sac_reentry_account/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/sac_reentry_account/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/simple_account/Cargo.toml b/soroban-test-wasms/wasm-workspace/simple_account/Cargo.toml
index 1a6de0f1..acd2c974 100644
--- a/soroban-test-wasms/wasm-workspace/simple_account/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/simple_account/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/update/Cargo.toml b/soroban-test-wasms/wasm-workspace/update/Cargo.toml
index 9f446919..8146b6e5 100644
--- a/soroban-test-wasms/wasm-workspace/update/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/update/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/vec/Cargo.toml b/soroban-test-wasms/wasm-workspace/vec/Cargo.toml
index 7badfe5c..315da11d 100644
--- a/soroban-test-wasms/wasm-workspace/vec/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/vec/Cargo.toml
@@ -4,7 +4,7 @@ version = "0.0.0"
 authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -15,4 +15,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]
diff --git a/soroban-test-wasms/wasm-workspace/write_upgrade_bytes/Cargo.toml b/soroban-test-wasms/wasm-workspace/write_upgrade_bytes/Cargo.toml
index ac144f53..b606e774 100644
--- a/soroban-test-wasms/wasm-workspace/write_upgrade_bytes/Cargo.toml
+++ b/soroban-test-wasms/wasm-workspace/write_upgrade_bytes/Cargo.toml
@@ -5,7 +5,7 @@ authors = ["Stellar Development Foundation <info@stellar.org>"]
 license = "Apache-2.0"
 edition = "2021"
 publish = false
-rust-version = "1.74"
+rust-version.workspace = true
 
 [lib]
 crate-type = ["cdylib", "rlib"]
@@ -16,4 +16,4 @@ soroban-sdk = { workspace = true }
 soroban-env-common = { workspace = true }
 
 [features]
-next = ["soroban-env-common/next"]
\ No newline at end of file
+next = ["soroban-env-common/next"]