Repository: solana-labs/solana-program-library
Pull request #6635 (2024-04-25 23:07:12)

stake-pool-cli: Default to simulated compute units
#### Problem

#6550 fixed the token-cli for offline signing, but still defaults to using simulated compute units, while #6499 in the stake-pool-cli forces people to specify that they want to use `SIMULATED` compute units, and otherwise adds nothing. This is inconsistent.

#### Solution

Make the stake pool CLI consistent with the token CLI by defaulting to simulated compute units. On the other hand, this PR allows people to specify that they want `DEFAULT` compute units.

Let me know what you think!


Patch:
diff --git a/Cargo.lock b/Cargo.lock
index a405ae24b..b2e276246 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -650,7 +650,7 @@ name = "binary-option"
 version = "0.1.0"
 dependencies = [
  "arrayref",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "solana-program",
  "spl-token 4.0.1",
  "thiserror",
@@ -808,11 +808,11 @@ dependencies = [
 
 [[package]]
 name = "borsh"
-version = "1.4.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0901fc8eb0aca4c83be0106d6f2db17d86a08dfc2c25f0e84464bf381158add6"
+checksum = "dbe5b10e214954177fb1dc9fbd20a1a2608fe99e6c832033bdc7cea287a20d77"
 dependencies = [
- "borsh-derive 1.4.0",
+ "borsh-derive 1.5.0",
  "cfg_aliases",
 ]
 
@@ -844,9 +844,9 @@ dependencies = [
 
 [[package]]
 name = "borsh-derive"
-version = "1.4.0"
+version = "1.5.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "51670c3aa053938b0ee3bd67c3817e471e626151131b934038e83c5bf8de48f5"
+checksum = "d7a8646f94ab393e43e8b35a2558b1624bed28b97ee09c5d15456e3c9463f46d"
 dependencies = [
  "once_cell",
  "proc-macro-crate 3.1.0",
@@ -4687,9 +4687,9 @@ dependencies = [
 
 [[package]]
 name = "serde"
-version = "1.0.198"
+version = "1.0.199"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9846a40c979031340571da2545a4e5b7c4163bdae79b301d5f86d03979451fcc"
+checksum = "0c9f6e76df036c77cd94996771fb40db98187f096dd0b9af39c6c6e452ba966a"
 dependencies = [
  "serde_derive",
 ]
@@ -4705,9 +4705,9 @@ dependencies = [
 
 [[package]]
 name = "serde_derive"
-version = "1.0.198"
+version = "1.0.199"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e88edab869b01783ba905e7d0153f9fc1a6505a96e4ad3018011eedb838566d9"
+checksum = "11bd257a6541e141e42ca6d24ae26f7714887b47e89aa739099104c7e4d3b7fc"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -4749,9 +4749,9 @@ dependencies = [
 
 [[package]]
 name = "serde_with"
-version = "3.8.0"
+version = "3.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c85f8e96d1d6857f13768fcbd895fcb06225510022a2774ed8b5150581847b0"
+checksum = "0ad483d2ab0149d5a5ebcd9972a3852711e0153d863bf5a5d0391d28883c4a20"
 dependencies = [
  "base64 0.22.0",
  "chrono",
@@ -4761,7 +4761,7 @@ dependencies = [
  "serde",
  "serde_derive",
  "serde_json",
- "serde_with_macros 3.8.0",
+ "serde_with_macros 3.8.1",
  "time",
 ]
 
@@ -4779,9 +4779,9 @@ dependencies = [
 
 [[package]]
 name = "serde_with_macros"
-version = "3.8.0"
+version = "3.8.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c8b3a576c4eb2924262d5951a3b737ccaf16c931e39a2810c36f9a7e25575557"
+checksum = "65569b702f41443e8bc8bbb1c5779bd0450bbe723b56198980e80ec45780bce2"
 dependencies = [
  "darling",
  "proc-macro2",
@@ -4804,9 +4804,9 @@ dependencies = [
 
 [[package]]
 name = "serial_test"
-version = "3.1.0"
+version = "3.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "adb86f9315df5df6a70eae0cc22395a44e544a0d8897586820770a35ede74449"
+checksum = "4b4b487fe2acf240a021cf57c6b2b4903b1e78ca0ecd862a71b71d2a51fed77d"
 dependencies = [
  "futures 0.3.30",
  "log",
@@ -4818,9 +4818,9 @@ dependencies = [
 
 [[package]]
 name = "serial_test_derive"
-version = "3.1.0"
+version = "3.1.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a9bb72430492e9549b0c4596725c0f82729bff861c45aa8099c0a8e67fc3b721"
+checksum = "82fe9db325bcef1fbcde82e078a5cc4efdf787e96b3b9cf45b50b529f2083d67"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -5193,7 +5193,7 @@ version = "1.18.11"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "f1630817c0df2ca64afd07e850b2a439f55dab75850008c1f3d6378d55f43a43"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "futures 0.3.30",
  "solana-banks-interface",
  "solana-program",
@@ -5926,7 +5926,7 @@ dependencies = [
  "blake3",
  "borsh 0.10.3",
  "borsh 0.9.3",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "bs58",
  "bv",
  "bytemuck",
@@ -6310,7 +6310,7 @@ dependencies = [
  "base64 0.21.7",
  "bincode",
  "bitflags 2.4.2",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "bs58",
  "bytemuck",
  "byteorder",
@@ -6854,7 +6854,7 @@ name = "spl-associated-token-account"
 version = "3.0.2"
 dependencies = [
  "assert_matches",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "solana-program",
@@ -6879,7 +6879,7 @@ dependencies = [
 name = "spl-binary-oracle-pair"
 version = "0.1.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "solana-program",
@@ -6918,7 +6918,7 @@ dependencies = [
 name = "spl-discriminator"
 version = "0.2.2"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "bytemuck",
  "solana-program",
  "spl-discriminator-derive 0.2.0",
@@ -7027,7 +7027,7 @@ dependencies = [
 name = "spl-feature-proposal"
 version = "1.0.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "solana-program",
  "solana-program-test",
  "solana-sdk",
@@ -7056,7 +7056,7 @@ dependencies = [
  "assert_matches",
  "base64 0.22.0",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "proptest",
@@ -7077,7 +7077,7 @@ dependencies = [
 name = "spl-governance-addin-api"
 version = "0.1.4"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "solana-program",
  "spl-governance-tools",
 ]
@@ -7089,7 +7089,7 @@ dependencies = [
  "arrayref",
  "assert_matches",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "proptest",
@@ -7112,7 +7112,7 @@ dependencies = [
  "arrayref",
  "assert_matches",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "proptest",
@@ -7136,7 +7136,7 @@ version = "0.1.4"
 dependencies = [
  "arrayref",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "lazy_static",
  "num-derive 0.4.2",
  "num-traits",
@@ -7155,7 +7155,7 @@ version = "0.1.4"
 dependencies = [
  "arrayref",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "serde",
@@ -7179,7 +7179,7 @@ dependencies = [
 name = "spl-managed-token"
 version = "0.1.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "shank",
  "solana-program",
  "solana-program-test",
@@ -7193,7 +7193,7 @@ dependencies = [
 name = "spl-math"
 version = "0.2.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "libm",
  "num-derive 0.4.2",
  "num-traits",
@@ -7235,7 +7235,7 @@ dependencies = [
 name = "spl-name-service"
 version = "0.3.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "solana-program",
@@ -7262,7 +7262,7 @@ name = "spl-pod"
 version = "0.2.2"
 dependencies = [
  "base64 0.22.0",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "bytemuck",
  "serde",
  "serde_json",
@@ -7351,7 +7351,7 @@ dependencies = [
  "approx",
  "arrayref",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "num-derive 0.4.2",
  "num-traits",
  "num_enum 0.7.2",
@@ -7372,13 +7372,13 @@ name = "spl-single-pool-cli"
 version = "1.0.0"
 dependencies = [
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "clap 3.2.25",
  "console",
  "serde",
  "serde_derive",
  "serde_json",
- "serde_with 3.8.0",
+ "serde_with 3.8.1",
  "serial_test",
  "solana-account-decoder",
  "solana-clap-v3-utils",
@@ -7407,7 +7407,7 @@ dependencies = [
  "arrayref",
  "assert_matches",
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "bytemuck",
  "num-derive 0.4.2",
  "num-traits",
@@ -7433,7 +7433,7 @@ name = "spl-stake-pool-cli"
 version = "1.0.0"
 dependencies = [
  "bincode",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "bs58",
  "clap 2.34.0",
  "serde",
@@ -7556,7 +7556,7 @@ dependencies = [
  "proptest",
  "serde",
  "serde_json",
- "serde_with 3.8.0",
+ "serde_with 3.8.1",
  "serial_test",
  "solana-program",
  "solana-program-test",
@@ -7579,7 +7579,7 @@ name = "spl-token-2022-test"
 version = "0.0.1"
 dependencies = [
  "async-trait",
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "futures-util",
  "solana-program",
  "solana-program-test",
@@ -7601,7 +7601,7 @@ dependencies = [
 
 [[package]]
 name = "spl-token-cli"
-version = "3.4.0"
+version = "3.4.1"
 dependencies = [
  "assert_cmd",
  "base64 0.22.0",
@@ -7639,7 +7639,7 @@ dependencies = [
 
 [[package]]
 name = "spl-token-client"
-version = "0.9.2"
+version = "0.10.0"
 dependencies = [
  "async-trait",
  "curve25519-dalek",
@@ -7786,7 +7786,7 @@ dependencies = [
 name = "spl-token-metadata-interface"
 version = "0.3.3"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "serde",
  "serde_json",
  "solana-program",
@@ -7988,7 +7988,7 @@ dependencies = [
 name = "spl-type-length-value-derive-test"
 version = "0.1.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "solana-program",
  "spl-discriminator 0.2.2",
  "spl-type-length-value 0.4.3",
@@ -7998,7 +7998,7 @@ dependencies = [
 name = "stateless-asks"
 version = "0.1.0"
 dependencies = [
- "borsh 1.4.0",
+ "borsh 1.5.0",
  "solana-program",
  "solana-program-test",
  "solana-sdk",
diff --git a/account-compression/programs/account-compression/src/canopy.rs b/account-compression/programs/account-compression/src/canopy.rs
index e4b76f1ec..bdf85d7d5 100644
--- a/account-compression/programs/account-compression/src/canopy.rs
+++ b/account-compression/programs/account-compression/src/canopy.rs
@@ -122,7 +122,7 @@ pub fn fill_in_proof_from_canopy(
         node_idx >>= 1;
     }
     // We only want to add inferred canopy nodes such that the proof length
-    // is equal to the tree depth. If the lengh of proof + lengh of canopy nodes is
+    // is equal to the tree depth. If the length of proof + length of canopy nodes is
     // less than the tree depth, the instruction will fail.
     let overlap = (proof.len() + inferred_nodes.len()).saturating_sub(max_depth as usize);
     proof.extend(inferred_nodes.iter().skip(overlap));
diff --git a/account-compression/sdk/package.json b/account-compression/sdk/package.json
index f8f46fc5e..8919e753b 100644
--- a/account-compression/sdk/package.json
+++ b/account-compression/sdk/package.json
@@ -76,9 +76,9 @@
     "@typescript-eslint/parser": "^7.7.1",
     "eslint": "^8.57.0",
     "eslint-config-prettier": "^9.1.0",
-    "eslint-config-turbo": "^1.13.2",
+    "eslint-config-turbo": "^1.13.3",
     "eslint-plugin-import": "^2.29.1",
-    "eslint-plugin-jest": "^28.2.0",
+    "eslint-plugin-jest": "^28.3.0",
     "eslint-plugin-mocha": "^10.4.3",
     "eslint-plugin-prettier": "^5.1.3",
     "eslint-plugin-simple-import-sort": "^12.1.0",
diff --git a/associated-token-account/program/Cargo.toml b/associated-token-account/program/Cargo.toml
index b8d3f77ee..97ae11ac5 100644
--- a/associated-token-account/program/Cargo.toml
+++ b/associated-token-account/program/Cargo.toml
@@ -13,7 +13,7 @@ test-sbf = []
 
 [dependencies]
 assert_matches = "1.5.0"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
 solana-program = ">=1.18.11,<=2"
diff --git a/binary-option/program/Cargo.toml b/binary-option/program/Cargo.toml
index 9c172dd0e..9c2d03a15 100644
--- a/binary-option/program/Cargo.toml
+++ b/binary-option/program/Cargo.toml
@@ -15,7 +15,7 @@ spl-token = { version = "4.0", path = "../../token/program", features = [
   "no-entrypoint",
 ] }
 arrayref = "0.3.7"
-borsh = "1.4.0"
+borsh = "1.5.0"
 uint = "0.9"
 
 [lib]
diff --git a/binary-oracle-pair/program/Cargo.toml b/binary-oracle-pair/program/Cargo.toml
index fcb47f983..10e281a05 100644
--- a/binary-oracle-pair/program/Cargo.toml
+++ b/binary-oracle-pair/program/Cargo.toml
@@ -19,7 +19,7 @@ spl-token = { version = "4.0", path = "../../token/program", features = [
 ] }
 thiserror = "1.0"
 uint = "0.9"
-borsh = "1.4.0"
+borsh = "1.5.0"
 
 [dev-dependencies]
 solana-program-test = ">=1.18.11,<=2"
diff --git a/feature-proposal/program/Cargo.toml b/feature-proposal/program/Cargo.toml
index 6a9e32b54..b288ace1f 100644
--- a/feature-proposal/program/Cargo.toml
+++ b/feature-proposal/program/Cargo.toml
@@ -12,7 +12,7 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 solana-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../token/program", features = [
   "no-entrypoint",
diff --git a/governance/addin-api/Cargo.toml b/governance/addin-api/Cargo.toml
index c1fffa20c..5b941b727 100644
--- a/governance/addin-api/Cargo.toml
+++ b/governance/addin-api/Cargo.toml
@@ -8,6 +8,6 @@ license = "Apache-2.0"
 edition = "2021"
 
 [dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 spl-governance-tools = { version = "0.1.4", path = "../tools" }
 solana-program = ">=1.18.11,<=2"
diff --git a/governance/addin-mock/program/Cargo.toml b/governance/addin-mock/program/Cargo.toml
index 214011559..58d55ab01 100644
--- a/governance/addin-mock/program/Cargo.toml
+++ b/governance/addin-mock/program/Cargo.toml
@@ -14,10 +14,10 @@ test-sbf = []
 [dependencies]
 arrayref = "0.3.7"
 bincode = "1.3.2"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 solana-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../../token/program", features = [
diff --git a/governance/chat/program/Cargo.toml b/governance/chat/program/Cargo.toml
index 551318dae..524f59c29 100644
--- a/governance/chat/program/Cargo.toml
+++ b/governance/chat/program/Cargo.toml
@@ -14,10 +14,10 @@ test-sbf = []
 [dependencies]
 arrayref = "0.3.7"
 bincode = "1.3.2"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 solana-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../../token/program", features = [
diff --git a/governance/program/Cargo.toml b/governance/program/Cargo.toml
index 353aba420..a88b8ecb3 100644
--- a/governance/program/Cargo.toml
+++ b/governance/program/Cargo.toml
@@ -14,10 +14,10 @@ test-sbf = []
 [dependencies]
 arrayref = "0.3.7"
 bincode = "1.3.2"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 solana-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../token/program", features = [
diff --git a/governance/program/src/state/proposal.rs b/governance/program/src/state/proposal.rs
index 839b09904..7f8090a3e 100644
--- a/governance/program/src/state/proposal.rs
+++ b/governance/program/src/state/proposal.rs
@@ -270,7 +270,7 @@ impl ProposalV2 {
             .map_err(|_| GovernanceError::InvalidStateCannotEditSignatories.into())
     }
 
-    /// Checks if Proposal can be singed off
+    /// Checks if Proposal can be signed off
     pub fn assert_can_sign_off(&self) -> Result<(), ProgramError> {
         match self.state {
             ProposalState::Draft | ProposalState::SigningOff => Ok(()),
diff --git a/governance/tools/Cargo.toml b/governance/tools/Cargo.toml
index 1421fecff..388ede429 100644
--- a/governance/tools/Cargo.toml
+++ b/governance/tools/Cargo.toml
@@ -10,10 +10,10 @@ edition = "2021"
 [dependencies]
 arrayref = "0.3.7"
 bincode = "1.3.2"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 solana-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../token/program", features = [
diff --git a/libraries/math/Cargo.toml b/libraries/math/Cargo.toml
index b00adc8d8..4774283c9 100644
--- a/libraries/math/Cargo.toml
+++ b/libraries/math/Cargo.toml
@@ -12,7 +12,7 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
 solana-program = ">=1.18.11,<=2"
diff --git a/libraries/pod/Cargo.toml b/libraries/pod/Cargo.toml
index d05a728c0..a1579e440 100644
--- a/libraries/pod/Cargo.toml
+++ b/libraries/pod/Cargo.toml
@@ -13,9 +13,9 @@ borsh = ["dep:borsh"]
 
 [dependencies]
 base64 = { version = "0.22.0", optional = true }
-borsh = { version = "1.4.0", optional = true }
+borsh = { version = "1.5.0", optional = true }
 bytemuck = { version = "1.15.0" }
-serde = { version = "1.0.198", optional = true }
+serde = { version = "1.0.199", optional = true }
 solana-program = ">=1.18.11,<=2"
 solana-zk-token-sdk = ">=1.18.11,<=2"
 spl-program-error = { version = "0.4.0", path = "../program-error" }
diff --git a/libraries/tlv-account-resolution/Cargo.toml b/libraries/tlv-account-resolution/Cargo.toml
index 4c648b364..e0bed5363 100644
--- a/libraries/tlv-account-resolution/Cargo.toml
+++ b/libraries/tlv-account-resolution/Cargo.toml
@@ -13,7 +13,7 @@ test-sbf = []
 
 [dependencies]
 bytemuck = { version = "1.15.0", features = ["derive"] }
-serde = { version = "1.0.198", optional = true }
+serde = { version = "1.0.199", optional = true }
 solana-program = ">=1.18.11,<=2"
 spl-discriminator = { version = "0.2.2", path = "../discriminator" }
 spl-program-error = { version = "0.4.0", path = "../program-error" }
diff --git a/managed-token/program/Cargo.toml b/managed-token/program/Cargo.toml
index 985644a09..377173633 100644
--- a/managed-token/program/Cargo.toml
+++ b/managed-token/program/Cargo.toml
@@ -22,7 +22,7 @@ default = []
 test = []
 
 [dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 shank = "^0.4.2"
 solana-program = ">=1.18.11,<=2"
 spl-associated-token-account = { version = "3.0.2", path = "../../associated-token-account/program", features = [
diff --git a/name-service/program/Cargo.toml b/name-service/program/Cargo.toml
index 50c438857..d6bc485aa 100644
--- a/name-service/program/Cargo.toml
+++ b/name-service/program/Cargo.toml
@@ -19,7 +19,7 @@ test-sbf = []
 [dependencies]
 solana-program = ">=1.18.11,<=2"
 num-traits = "0.2"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4.2"
 thiserror = "1.0.59"
 
diff --git a/package.json b/package.json
index 535270ebc..aff2c9f6d 100644
--- a/package.json
+++ b/package.json
@@ -23,8 +23,8 @@
     "devDependencies": {
         "@solana/eslint-config-solana": "^3.0.3",
         "@solana/prettier-config-solana": "^0.0.5",
-        "eslint-config-turbo": "^1.13.2",
-        "turbo": "^1.13.2"
+        "eslint-config-turbo": "^1.13.3",
+        "turbo": "^1.13.3"
     },
     "engines": {
         "node": ">=14.0.0"
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index cf2d5eab8..6730cab2c 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -1,5 +1,9 @@
 lockfileVersion: '6.0'
 
+settings:
+  autoInstallPeers: true
+  excludeLinksFromLockfile: false
+
 importers:
 
   .:
@@ -11,11 +15,11 @@ importers:
         specifier: ^0.0.5
         version: 0.0.5(prettier@3.2.5)
       eslint-config-turbo:
-        specifier: ^1.13.2
-        version: 1.13.2(eslint@8.57.0)
+        specifier: ^1.13.3
+        version: 1.13.3(eslint@8.57.0)
       turbo:
-        specifier: ^1.13.2
-        version: 1.13.2
+        specifier: ^1.13.3
+        version: 1.13.3
 
   account-compression/sdk:
     dependencies:
@@ -49,7 +53,7 @@ importers:
         version: 0.26.0
       '@solana/eslint-config-solana':
         specifier: ^3.0.3
-        version: 3.0.3(@typescript-eslint/eslint-plugin@7.7.1)(@typescript-eslint/parser@7.7.1)(eslint-plugin-jest@28.2.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@12.1.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint-plugin-typescript-sort-keys@3.2.0)(eslint@8.57.0)(typescript@5.4.5)
+        version: 3.0.3(@typescript-eslint/eslint-plugin@7.7.1)(@typescript-eslint/parser@7.7.1)(eslint-plugin-jest@28.3.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@12.1.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint-plugin-typescript-sort-keys@3.2.0)(eslint@8.57.0)(typescript@5.4.5)
       '@solana/prettier-config-solana':
         specifier: ^0.0.5
         version: 0.0.5(prettier@3.2.5)
@@ -75,14 +79,14 @@ importers:
         specifier: ^9.1.0
         version: 9.1.0(eslint@8.57.0)
       eslint-config-turbo:
-        specifier: ^1.13.2
-        version: 1.13.2(eslint@8.57.0)
+        specifier: ^1.13.3
+        version: 1.13.3(eslint@8.57.0)
       eslint-plugin-import:
         specifier: ^2.29.1
         version: 2.29.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)
       eslint-plugin-jest:
-        specifier: ^28.2.0
-        version: 28.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5)
+        specifier: ^28.3.0
+        version: 28.3.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5)
       eslint-plugin-mocha:
         specifier: ^10.4.3
         version: 10.4.3(eslint@8.57.0)
@@ -398,8 +402,8 @@ importers:
         specifier: ^4.0.1
         version: 4.0.1
       '@solana/spl-token':
-        specifier: 0.4.4
-        version: link:../../token/js
+        specifier: 0.4.6
+        version: 0.4.6(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22)
       '@solana/web3.js':
         specifier: ^1.91.7
         version: 1.91.7
@@ -415,25 +419,25 @@ importers:
     devDependencies:
       '@rollup/plugin-alias':
         specifier: ^5.1.0
-        version: 5.1.0(rollup@4.16.4)
+        version: 5.1.0(rollup@4.17.1)
       '@rollup/plugin-commonjs':
         specifier: ^25.0.0
-        version: 25.0.7(rollup@4.16.4)
+        version: 25.0.7(rollup@4.17.1)
       '@rollup/plugin-json':
         specifier: ^6.1.0
-        version: 6.1.0(rollup@4.16.4)
+        version: 6.1.0(rollup@4.17.1)
       '@rollup/plugin-multi-entry':
         specifier: ^6.0.0
-        version: 6.0.1(rollup@4.16.4)
+        version: 6.0.1(rollup@4.17.1)
       '@rollup/plugin-node-resolve':
         specifier: ^15.0.2
-        version: 15.2.3(rollup@4.16.4)
+        version: 15.2.3(rollup@4.17.1)
       '@rollup/plugin-terser':
         specifier: ^0.4.4
-        version: 0.4.4(rollup@4.16.4)
+        version: 0.4.4(rollup@4.17.1)
       '@rollup/plugin-typescript':
         specifier: ^11.1.6
-        version: 11.1.6(rollup@4.16.4)(tslib@2.6.2)(typescript@5.4.5)
+        version: 11.1.6(rollup@4.17.1)(tslib@2.6.2)(typescript@5.4.5)
       '@types/bn.js':
         specifier: ^5.1.0
         version: 5.1.5
@@ -474,11 +478,11 @@ importers:
         specifier: ^5.0.0
         version: 5.0.5
       rollup:
-        specifier: ^4.16.4
-        version: 4.16.4
+        specifier: ^4.17.1
+        version: 4.17.1
       rollup-plugin-dts:
         specifier: ^6.1.0
-        version: 6.1.0(rollup@4.16.4)(typescript@5.4.5)
+        version: 6.1.0(rollup@4.17.1)(typescript@5.4.5)
       ts-jest:
         specifier: ^29.1.2
         version: 29.1.2(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.4.5)
@@ -570,16 +574,16 @@ importers:
     devDependencies:
       '@rollup/plugin-commonjs':
         specifier: ^25.0.0
-        version: 25.0.7(rollup@4.16.4)
+        version: 25.0.7(rollup@4.17.1)
       '@rollup/plugin-node-resolve':
         specifier: ^15.0.2
-        version: 15.2.3(rollup@4.16.4)
+        version: 15.2.3(rollup@4.17.1)
       '@rollup/plugin-typescript':
         specifier: ^11.1.6
-        version: 11.1.6(rollup@4.16.4)(tslib@2.6.2)(typescript@5.4.5)
+        version: 11.1.6(rollup@4.17.1)(tslib@2.6.2)(typescript@5.4.5)
       '@solana/spl-token':
-        specifier: 0.4.4
-        version: link:../../token/js
+        specifier: 0.4.6
+        version: 0.4.6(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22)
       '@solana/web3.js':
         specifier: ^1.91.7
         version: 1.91.7
@@ -614,8 +618,8 @@ importers:
         specifier: ^3.2.5
         version: 3.2.5
       rollup:
-        specifier: ^4.16.4
-        version: 4.16.4
+        specifier: ^4.17.1
+        version: 4.17.1
       ts-node:
         specifier: ^10.9.2
         version: 10.9.2(@types/node@20.12.7)(typescript@5.4.5)
@@ -706,8 +710,8 @@ importers:
         version: 0.2.0
     devDependencies:
       '@solana/spl-token':
-        specifier: 0.4.4
-        version: link:../../token/js
+        specifier: 0.4.6
+        version: 0.4.6(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22)
       '@solana/web3.js':
         specifier: ^1.91.7
         version: 1.91.7
@@ -773,7 +777,7 @@ importers:
         version: link:../../token-group/js
       '@solana/spl-token-metadata':
         specifier: ^0.1.3
-        version: link:../../token-metadata/js
+        version: 0.1.4(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22)
       buffer:
         specifier: ^6.0.3
         version: 6.0.3
@@ -2000,7 +2004,7 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@rollup/plugin-alias@5.1.0(rollup@4.16.4):
+  /@rollup/plugin-alias@5.1.0(rollup@4.17.1):
     resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2009,11 +2013,11 @@ packages:
       rollup:
         optional: true
     dependencies:
-      rollup: 4.16.4
+      rollup: 4.17.1
       slash: 4.0.0
     dev: true
 
-  /@rollup/plugin-commonjs@25.0.7(rollup@4.16.4):
+  /@rollup/plugin-commonjs@25.0.7(rollup@4.17.1):
     resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2022,16 +2026,16 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.0.5(rollup@4.16.4)
+      '@rollup/pluginutils': 5.0.5(rollup@4.17.1)
       commondir: 1.0.1
       estree-walker: 2.0.2
       glob: 8.1.0
       is-reference: 1.2.1
       magic-string: 0.30.5
-      rollup: 4.16.4
+      rollup: 4.17.1
     dev: true
 
-  /@rollup/plugin-json@6.1.0(rollup@4.16.4):
+  /@rollup/plugin-json@6.1.0(rollup@4.17.1):
     resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2040,11 +2044,11 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.1.0(rollup@4.16.4)
-      rollup: 4.16.4
+      '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
+      rollup: 4.17.1
     dev: true
 
-  /@rollup/plugin-multi-entry@6.0.1(rollup@4.16.4):
+  /@rollup/plugin-multi-entry@6.0.1(rollup@4.17.1):
     resolution: {integrity: sha512-AXm6toPyTSfbYZWghQGbom1Uh7dHXlrGa+HoiYNhQtDUE3Q7LqoUYdVQx9E1579QWS1uOiu+cZRSE4okO7ySgw==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2053,12 +2057,12 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/plugin-virtual': 3.0.2(rollup@4.16.4)
+      '@rollup/plugin-virtual': 3.0.2(rollup@4.17.1)
       matched: 5.0.1
-      rollup: 4.16.4
+      rollup: 4.17.1
     dev: true
 
-  /@rollup/plugin-node-resolve@15.2.3(rollup@4.16.4):
+  /@rollup/plugin-node-resolve@15.2.3(rollup@4.17.1):
     resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2067,16 +2071,16 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.0.5(rollup@4.16.4)
+      '@rollup/pluginutils': 5.0.5(rollup@4.17.1)
       '@types/resolve': 1.20.2
       deepmerge: 4.3.1
       is-builtin-module: 3.2.1
       is-module: 1.0.0
       resolve: 1.22.8
-      rollup: 4.16.4
+      rollup: 4.17.1
     dev: true
 
-  /@rollup/plugin-terser@0.4.4(rollup@4.16.4):
+  /@rollup/plugin-terser@0.4.4(rollup@4.17.1):
     resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2085,13 +2089,13 @@ packages:
       rollup:
         optional: true
     dependencies:
-      rollup: 4.16.4
+      rollup: 4.17.1
       serialize-javascript: 6.0.1
       smob: 1.4.1
       terser: 5.24.0
     dev: true
 
-  /@rollup/plugin-typescript@11.1.6(rollup@4.16.4)(tslib@2.6.2)(typescript@5.4.5):
+  /@rollup/plugin-typescript@11.1.6(rollup@4.17.1)(tslib@2.6.2)(typescript@5.4.5):
     resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2104,14 +2108,14 @@ packages:
       tslib:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.1.0(rollup@4.16.4)
+      '@rollup/pluginutils': 5.1.0(rollup@4.17.1)
       resolve: 1.22.8
-      rollup: 4.16.4
+      rollup: 4.17.1
       tslib: 2.6.2
       typescript: 5.4.5
     dev: true
 
-  /@rollup/plugin-virtual@3.0.2(rollup@4.16.4):
+  /@rollup/plugin-virtual@3.0.2(rollup@4.17.1):
     resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2120,7 +2124,7 @@ packages:
       rollup:
         optional: true
     dependencies:
-      rollup: 4.16.4
+      rollup: 4.17.1
     dev: true
 
   /@rollup/pluginutils@4.2.1:
@@ -2131,7 +2135,7 @@ packages:
       picomatch: 2.3.1
     dev: true
 
-  /@rollup/pluginutils@5.0.5(rollup@4.16.4):
+  /@rollup/pluginutils@5.0.5(rollup@4.17.1):
     resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2143,10 +2147,10 @@ packages:
       '@types/estree': 1.0.5
       estree-walker: 2.0.2
       picomatch: 2.3.1
-      rollup: 4.16.4
+      rollup: 4.17.1
     dev: true
 
-  /@rollup/pluginutils@5.1.0(rollup@4.16.4):
+  /@rollup/pluginutils@5.1.0(rollup@4.17.1):
     resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2158,131 +2162,131 @@ packages:
       '@types/estree': 1.0.5
       estree-walker: 2.0.2
       picomatch: 2.3.1
-      rollup: 4.16.4
+      rollup: 4.17.1
     dev: true
 
-  /@rollup/rollup-android-arm-eabi@4.16.4:
-    resolution: {integrity: sha512-GkhjAaQ8oUTOKE4g4gsZ0u8K/IHU1+2WQSgS1TwTcYvL+sjbaQjNHFXbOJ6kgqGHIO1DfUhI/Sphi9GkRT9K+Q==}
+  /@rollup/rollup-android-arm-eabi@4.17.1:
+    resolution: {integrity: sha512-P6Wg856Ou/DLpR+O0ZLneNmrv7QpqBg+hK4wE05ijbC/t349BRfMfx+UFj5Ha3fCFopIa6iSZlpdaB4agkWp2Q==}
     cpu: [arm]
     os: [android]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-android-arm64@4.16.4:
-    resolution: {integrity: sha512-Bvm6D+NPbGMQOcxvS1zUl8H7DWlywSXsphAeOnVeiZLQ+0J6Is8T7SrjGTH29KtYkiY9vld8ZnpV3G2EPbom+w==}
+  /@rollup/rollup-android-arm64@4.17.1:
+    resolution: {integrity: sha512-piwZDjuW2WiHr05djVdUkrG5JbjnGbtx8BXQchYCMfib/nhjzWoiScelZ+s5IJI7lecrwSxHCzW026MWBL+oJQ==}
     cpu: [arm64]
     os: [android]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-darwin-arm64@4.16.4:
-    resolution: {integrity: sha512-i5d64MlnYBO9EkCOGe5vPR/EeDwjnKOGGdd7zKFhU5y8haKhQZTN2DgVtpODDMxUr4t2K90wTUJg7ilgND6bXw==}
+  /@rollup/rollup-darwin-arm64@4.17.1:
+    resolution: {integrity: sha512-LsZXXIsN5Q460cKDT4Y+bzoPDhBmO5DTr7wP80d+2EnYlxSgkwdPfE3hbE+Fk8dtya+8092N9srjBTJ0di8RIA==}
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-darwin-x64@4.16.4:
-    resolution: {integrity: sha512-WZupV1+CdUYehaZqjaFTClJI72fjJEgTXdf4NbW69I9XyvdmztUExBtcI2yIIU6hJtYvtwS6pkTkHJz+k08mAQ==}
+  /@rollup/rollup-darwin-x64@4.17.1:
+    resolution: {integrity: sha512-S7TYNQpWXB9APkxu/SLmYHezWwCoZRA9QLgrDeml+SR2A1LLPD2DBUdUlvmCF7FUpRMKvbeeWky+iizQj65Etw==}
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm-gnueabihf@4.16.4:
-    resolution: {integrity: sha512-ADm/xt86JUnmAfA9mBqFcRp//RVRt1ohGOYF6yL+IFCYqOBNwy5lbEK05xTsEoJq+/tJzg8ICUtS82WinJRuIw==}
+  /@rollup/rollup-linux-arm-gnueabihf@4.17.1:
+    resolution: {integrity: sha512-Lq2JR5a5jsA5um2ZoLiXXEaOagnVyCpCW7xvlcqHC7y46tLwTEgUSTM3a2TfmmTMmdqv+jknUioWXlmxYxE9Yw==}
     cpu: [arm]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm-musleabihf@4.16.4:
-    resolution: {integrity: sha512-tJfJaXPiFAG+Jn3cutp7mCs1ePltuAgRqdDZrzb1aeE3TktWWJ+g7xK9SNlaSUFw6IU4QgOxAY4rA+wZUT5Wfg==}
+  /@rollup/rollup-linux-arm-musleabihf@4.17.1:
+    resolution: {integrity: sha512-9BfzwyPNV0IizQoR+5HTNBGkh1KXE8BqU0DBkqMngmyFW7BfuIZyMjQ0s6igJEiPSBvT3ZcnIFohZ19OqjhDPg==}
     cpu: [arm]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm64-gnu@4.16.4:
-    resolution: {integrity: sha512-7dy1BzQkgYlUTapDTvK997cgi0Orh5Iu7JlZVBy1MBURk7/HSbHkzRnXZa19ozy+wwD8/SlpJnOOckuNZtJR9w==}
+  /@rollup/rollup-linux-arm64-gnu@4.17.1:
+    resolution: {integrity: sha512-e2uWaoxo/rtzA52OifrTSXTvJhAXb0XeRkz4CdHBK2KtxrFmuU/uNd544Ogkpu938BzEfvmWs8NZ8Axhw33FDw==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm64-musl@4.16.4:
-    resolution: {integrity: sha512-zsFwdUw5XLD1gQe0aoU2HVceI6NEW7q7m05wA46eUAyrkeNYExObfRFQcvA6zw8lfRc5BHtan3tBpo+kqEOxmg==}
+  /@rollup/rollup-linux-arm64-musl@4.17.1:
+    resolution: {integrity: sha512-ekggix/Bc/d/60H1Mi4YeYb/7dbal1kEDZ6sIFVAE8pUSx7PiWeEh+NWbL7bGu0X68BBIkgF3ibRJe1oFTksQQ==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-powerpc64le-gnu@4.16.4:
-    resolution: {integrity: sha512-p8C3NnxXooRdNrdv6dBmRTddEapfESEUflpICDNKXpHvTjRRq1J82CbU5G3XfebIZyI3B0s074JHMWD36qOW6w==}
+  /@rollup/rollup-linux-powerpc64le-gnu@4.17.1:
+    resolution: {integrity: sha512-UGV0dUo/xCv4pkr/C8KY7XLFwBNnvladt8q+VmdKrw/3RUd3rD0TptwjisvE2TTnnlENtuY4/PZuoOYRiGp8Gw==}
     cpu: [ppc64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-riscv64-gnu@4.16.4:
-    resolution: {integrity: sha512-Lh/8ckoar4s4Id2foY7jNgitTOUQczwMWNYi+Mjt0eQ9LKhr6sK477REqQkmy8YHY3Ca3A2JJVdXnfb3Rrwkng==}
+  /@rollup/rollup-linux-riscv64-gnu@4.17.1:
+    resolution: {integrity: sha512-gEYmYYHaehdvX46mwXrU49vD6Euf1Bxhq9pPb82cbUU9UT2NV+RSckQ5tKWOnNXZixKsy8/cPGtiUWqzPuAcXQ==}
     cpu: [riscv64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-s390x-gnu@4.16.4:
-    resolution: {integrity: sha512-1xwwn9ZCQYuqGmulGsTZoKrrn0z2fAur2ujE60QgyDpHmBbXbxLaQiEvzJWDrscRq43c8DnuHx3QorhMTZgisQ==}
+  /@rollup/rollup-linux-s390x-gnu@4.17.1:
+    resolution: {integrity: sha512-xeae5pMAxHFp6yX5vajInG2toST5lsCTrckSRUFwNgzYqnUjNBcQyqk1bXUxX5yhjWFl2Mnz3F8vQjl+2FRIcw==}
     cpu: [s390x]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-x64-gnu@4.16.4:
-    resolution: {integrity: sha512-LuOGGKAJ7dfRtxVnO1i3qWc6N9sh0Em/8aZ3CezixSTM+E9Oq3OvTsvC4sm6wWjzpsIlOCnZjdluINKESflJLA==}
+  /@rollup/rollup-linux-x64-gnu@4.17.1:
+    resolution: {integrity: sha512-AsdnINQoDWfKpBzCPqQWxSPdAWzSgnYbrJYtn6W0H2E9It5bZss99PiLA8CgmDRfvKygt20UpZ3xkhFlIfX9zQ==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-x64-musl@4.16.4:
-    resolution: {integrity: sha512-ch86i7KkJKkLybDP2AtySFTRi5fM3KXp0PnHocHuJMdZwu7BuyIKi35BE9guMlmTpwwBTB3ljHj9IQXnTCD0vA==}
+  /@rollup/rollup-linux-x64-musl@4.17.1:
+    resolution: {integrity: sha512-KoB4fyKXTR+wYENkIG3fFF+5G6N4GFvzYx8Jax8BR4vmddtuqSb5oQmYu2Uu067vT/Fod7gxeQYKupm8gAcMSQ==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-win32-arm64-msvc@4.16.4:
-    resolution: {integrity: sha512-Ma4PwyLfOWZWayfEsNQzTDBVW8PZ6TUUN1uFTBQbF2Chv/+sjenE86lpiEwj2FiviSmSZ4Ap4MaAfl1ciF4aSA==}
+  /@rollup/rollup-win32-arm64-msvc@4.17.1:
+    resolution: {integrity: sha512-J0d3NVNf7wBL9t4blCNat+d0PYqAx8wOoY+/9Q5cujnafbX7BmtYk3XvzkqLmFECaWvXGLuHmKj/wrILUinmQg==}
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-win32-ia32-msvc@4.16.4:
-    resolution: {integrity: sha512-9m/ZDrQsdo/c06uOlP3W9G2ENRVzgzbSXmXHT4hwVaDQhYcRpi9bgBT0FTG9OhESxwK0WjQxYOSfv40cU+T69w==}
+  /@rollup/rollup-win32-ia32-msvc@4.17.1:
+    resolution: {integrity: sha512-xjgkWUwlq7IbgJSIxvl516FJ2iuC/7ttjsAxSPpC9kkI5iQQFHKyEN5BjbhvJ/IXIZ3yIBcW5QDlWAyrA+TFag==}
     cpu: [ia32]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-win32-x64-msvc@4.16.4:
-    resolution: {integrity: sha512-YunpoOAyGLDseanENHmbFvQSfVL5BxW3k7hhy0eN4rb3gS/ct75dVD0EXOWIqFT/nE8XYW6LP6vz6ctKRi0k9A==}
+  /@rollup/rollup-win32-x64-msvc@4.17.1:
+    resolution: {integrity: sha512-0QbCkfk6cnnVKWqqlC0cUrrUMDMfu5ffvYMTUHf+qMN2uAb3MKP31LPcwiMXBNsvoFGs/kYdFOsuLmvppCopXA==}
     cpu: [x64]
     os: [win32]
     requiresBuild: true
@@ -2347,7 +2351,6 @@ packages:
       - bufferutil
       - encoding
       - utf-8-validate
-    dev: false
 
   /@solana/buffer-layout@4.0.1:
     resolution: {integrity: sha512-E1ImOIAD1tBZFRdjeM4/pzTiTApC0AOBGwyAMS4fwIodCWArzJ3DWdoh8cKxeFM2fElkxBh2Aqts1BPC373rHA==}
@@ -2366,7 +2369,6 @@ packages:
       '@solana/codecs-core': 2.0.0-preview.2
       '@solana/codecs-numbers': 2.0.0-preview.2
       '@solana/errors': 2.0.0-preview.2
-    dev: false
 
   /@solana/codecs-numbers@2.0.0-preview.2:
     resolution: {integrity: sha512-aLZnDTf43z4qOnpTcDsUVy1Ci9im1Md8thWipSWbE+WM9ojZAx528oAql+Cv8M8N+6ALKwgVRhPZkto6E59ARw==}
@@ -2394,7 +2396,6 @@ packages:
       '@solana/options': 2.0.0-preview.2
     transitivePeerDependencies:
       - fastestsmallesttextencoderdecoder
-    dev: false
 
   /@solana/errors@2.0.0-preview.2:
     resolution: {integrity: sha512-H2DZ1l3iYF5Rp5pPbJpmmtCauWeQXRJapkDg8epQ8BJ7cA2Ut/QEtC3CMmw/iMTcuS6uemFNLcWvlOfoQhvQuA==}
@@ -2427,7 +2428,7 @@ packages:
       typescript: 5.4.5
     dev: true
 
-  /@solana/eslint-config-solana@3.0.3(@typescript-eslint/eslint-plugin@7.7.1)(@typescript-eslint/parser@7.7.1)(eslint-plugin-jest@28.2.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@12.1.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint-plugin-typescript-sort-keys@3.2.0)(eslint@8.57.0)(typescript@5.4.5):
+  /@solana/eslint-config-solana@3.0.3(@typescript-eslint/eslint-plugin@7.7.1)(@typescript-eslint/parser@7.7.1)(eslint-plugin-jest@28.3.0)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@12.1.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint-plugin-typescript-sort-keys@3.2.0)(eslint@8.57.0)(typescript@5.4.5):
     resolution: {integrity: sha512-yTaeCbOBwjmK4oUkknixOpwOzzAK8+4YWvJEJFNHuueESetieDnAeEHV7rzJllFgHEWa9nXps9Q3aD4/XJp71A==}
     peerDependencies:
       '@typescript-eslint/eslint-plugin': ^6.0.0
@@ -2443,7 +2444,7 @@ packages:
       '@typescript-eslint/eslint-plugin': 7.7.1(@typescript-eslint/parser@7.7.1)(eslint@8.57.0)(typescript@5.4.5)
       '@typescript-eslint/parser': 7.7.1(eslint@8.57.0)(typescript@5.4.5)
       eslint: 8.57.0
-      eslint-plugin-jest: 28.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5)
+      eslint-plugin-jest: 28.3.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5)
       eslint-plugin-react-hooks: 4.6.0(eslint@8.57.0)
       eslint-plugin-simple-import-sort: 12.1.0(eslint@8.57.0)
       eslint-plugin-sort-keys-fix: 1.1.2
@@ -2470,7 +2471,6 @@ packages:
     dependencies:
       '@solana/codecs-core': 2.0.0-preview.2
       '@solana/codecs-numbers': 2.0.0-preview.2
-    dev: false
 
   /@solana/prettier-config-solana@0.0.5(prettier@3.2.5):
     resolution: {integrity: sha512-igtLH1QaX5xzSLlqteexRIg9X1QKA03xKYQc2qY1TrMDDhxKXoRZOStQPWdita2FVJzxTGz/tdMGC1vS0biRcg==}
@@ -2496,6 +2496,54 @@ packages:
       ws: 8.14.2(bufferutil@4.0.8)(utf-8-validate@5.0.10)
     dev: false
 
+  /@solana/spl-token-group@0.0.4(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22):
+    resolution: {integrity: sha512-7+80nrEMdUKlK37V6kOe024+T7J4nNss0F8LQ9OOPYdWCCfJmsGUzVx2W3oeizZR4IHM6N4yC9v1Xqwc3BTPWw==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      '@solana/web3.js': ^1.91.6
+    dependencies:
+      '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+      '@solana/spl-type-length-value': 0.1.0
+      '@solana/web3.js': 1.91.7
+    transitivePeerDependencies:
+      - fastestsmallesttextencoderdecoder
+
+  /@solana/spl-token-metadata@0.1.4(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22):
+    resolution: {integrity: sha512-N3gZ8DlW6NWDV28+vCCDJoTqaCZiF/jDUnk3o8GRkAFzHObiR60Bs1gXHBa8zCPdvOwiG6Z3dg5pg7+RW6XNsQ==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      '@solana/web3.js': ^1.91.6
+    dependencies:
+      '@solana/codecs': 2.0.0-preview.2(fastestsmallesttextencoderdecoder@1.0.22)
+      '@solana/spl-type-length-value': 0.1.0
+      '@solana/web3.js': 1.91.7
+    transitivePeerDependencies:
+      - fastestsmallesttextencoderdecoder
+
+  /@solana/spl-token@0.4.6(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22):
+    resolution: {integrity: sha512-1nCnUqfHVtdguFciVWaY/RKcQz1IF4b31jnKgAmjU9QVN1q7dRUkTEWJZgTYIEtsULjVnC9jRqlhgGN39WbKKA==}
+    engines: {node: '>=16'}
+    peerDependencies:
+      '@solana/web3.js': ^1.91.6
+    dependencies:
+      '@solana/buffer-layout': 4.0.1
+      '@solana/buffer-layout-utils': 0.2.0
+      '@solana/spl-token-group': 0.0.4(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22)
+      '@solana/spl-token-metadata': 0.1.4(@solana/web3.js@1.91.7)(fastestsmallesttextencoderdecoder@1.0.22)
+      '@solana/web3.js': 1.91.7
+      buffer: 6.0.3
+    transitivePeerDependencies:
+      - bufferutil
+      - encoding
+      - fastestsmallesttextencoderdecoder
+      - utf-8-validate
+
+  /@solana/spl-type-length-value@0.1.0:
+    resolution: {integrity: sha512-JBMGB0oR4lPttOZ5XiUGyvylwLQjt1CPJa6qQ5oM+MBCndfjz2TKKkw0eATlLLcYmq1jBVsNlJ2cD6ns2GR7lA==}
+    engines: {node: '>=16'}
+    dependencies:
+      buffer: 6.0.3
+
   /@solana/transactions@2.0.0-experimental.21e994f:
     resolution: {integrity: sha512-DunbTMBzlC7jmTzkFsRm5DhGe+MjaZ8m+SJ7V520mQq+kxrbPrRmI3ikfUVdejg0WaEV4Dy+RwQ5xllsrJ47kA==}
     dependencies:
@@ -3611,7 +3659,6 @@ packages:
 
   /bignumber.js@9.1.2:
     resolution: {integrity: sha512-2/mKyZH9K85bzOEfhXDBFZTGd1CTs+5IHpeFQo9luiBG7hghdC851Pj2WAhb6E3R6b9tZj/XKhbg4fum+Kepug==}
-    dev: false
 
   /binary-extensions@2.2.0:
     resolution: {integrity: sha512-jDctJ/IVQbZoJykoeHbhXpOlNBqGNcwXJKJog42E5HDPUwQTSdjCHdihjj0DlnheQ7blbT6dHOafNAiS8ooQKA==}
@@ -4435,13 +4482,13 @@ packages:
       eslint: 8.57.0
     dev: true
 
-  /eslint-config-turbo@1.13.2(eslint@8.57.0):
-    resolution: {integrity: sha512-TzvsMwNJx/P4JYw79iFqbyQApnyT050gW7dBxnNeNVl3pVMnT2rwaFo9Q3Hc49Tp5NANxEwYN9RStF50P/IwGA==}
+  /eslint-config-turbo@1.13.3(eslint@8.57.0):
+    resolution: {integrity: sha512-if/QtwEiWZ5b7Bg8yZBPSvS0TeCG2Zvfa/+XBYANS7uSYucjmW+BBC8enJB0PqpB/YLGGOumeo3x7h1Nuba9iw==}
     peerDependencies:
       eslint: '>6.6.0'
     dependencies:
       eslint: 8.57.0
-      eslint-plugin-turbo: 1.13.2(eslint@8.57.0)
+      eslint-plugin-turbo: 1.13.3(eslint@8.57.0)
     dev: true
 
   /eslint-import-resolver-node@0.3.9:
@@ -4572,8 +4619,8 @@ packages:
       - typescript
     dev: true
 
-  /eslint-plugin-jest@28.2.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5):
-    resolution: {integrity: sha512-yRDti/a+f+SMSmNTiT9/M/MzXGkitl8CfzUxnpoQcTyfq8gUrXMriVcWU36W1X6BZSUoyUCJrDAWWUA2N4hE5g==}
+  /eslint-plugin-jest@28.3.0(@typescript-eslint/eslint-plugin@7.7.1)(eslint@8.57.0)(jest@29.7.0)(typescript@5.4.5):
+    resolution: {integrity: sha512-5LjCSSno8E+IUCOX4hJiIb/upPIgpkaDEcaN/40gOcw26t/5UTLHFc4JdxKjOOvGTh0XdCu+fNr0fpOVNvcxMA==}
     engines: {node: ^16.10.0 || ^18.12.0 || >=20.0.0}
     peerDependencies:
       '@typescript-eslint/eslint-plugin': ^6.0.0 || ^7.0.0
@@ -4672,8 +4719,8 @@ packages:
       requireindex: 1.2.0
     dev: true
 
-  /eslint-plugin-turbo@1.13.2(eslint@8.57.0):
-    resolution: {integrity: sha512-QNaihF0hTRjfOBd1SLHrftm8V3pOU35CNS/C0/Z6qY1xxdL1PSv4IctEIldSMX7/A1jOPYwMPO7wYwPXgjgp/g==}
+  /eslint-plugin-turbo@1.13.3(eslint@8.57.0):
+    resolution: {integrity: sha512-RjmlnqYsEqnJ+U3M3IS5jLJDjWv5NsvReCpsC61n5pJ4JMHTZ/lU0EIoL1ccuL1L5wP0APzdXdByBxERcPQ+Nw==}
     peerDependencies:
       eslint: '>6.6.0'
     dependencies:
@@ -7238,7 +7285,7 @@ packages:
       glob: 10.3.10
     dev: true
 
-  /rollup-plugin-dts@6.1.0(rollup@4.16.4)(typescript@5.4.5):
+  /rollup-plugin-dts@6.1.0(rollup@4.17.1)(typescript@5.4.5):
     resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==}
     engines: {node: '>=16'}
     peerDependencies:
@@ -7246,35 +7293,35 @@ packages:
       typescript: ^4.5 || ^5.0
     dependencies:
       magic-string: 0.30.5
-      rollup: 4.16.4
+      rollup: 4.17.1
       typescript: 5.4.5
     optionalDependencies:
       '@babel/code-frame': 7.22.13
     dev: true
 
-  /rollup@4.16.4:
-    resolution: {integrity: sha512-kuaTJSUbz+Wsb2ATGvEknkI12XV40vIiHmLuFlejoo7HtDok/O5eDDD0UpCVY5bBX5U5RYo8wWP83H7ZsqVEnA==}
+  /rollup@4.17.1:
+    resolution: {integrity: sha512-0gG94inrUtg25sB2V/pApwiv1lUb0bQ25FPNuzO89Baa+B+c0ccaaBKM5zkZV/12pUUdH+lWCSm9wmHqyocuVQ==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
     dependencies:
       '@types/estree': 1.0.5
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.16.4
-      '@rollup/rollup-android-arm64': 4.16.4
-      '@rollup/rollup-darwin-arm64': 4.16.4
-      '@rollup/rollup-darwin-x64': 4.16.4
-      '@rollup/rollup-linux-arm-gnueabihf': 4.16.4
-      '@rollup/rollup-linux-arm-musleabihf': 4.16.4
-      '@rollup/rollup-linux-arm64-gnu': 4.16.4
-      '@rollup/rollup-linux-arm64-musl': 4.16.4
-      '@rollup/rollup-linux-powerpc64le-gnu': 4.16.4
-      '@rollup/rollup-linux-riscv64-gnu': 4.16.4
-      '@rollup/rollup-linux-s390x-gnu': 4.16.4
-      '@rollup/rollup-linux-x64-gnu': 4.16.4
-      '@rollup/rollup-linux-x64-musl': 4.16.4
-      '@rollup/rollup-win32-arm64-msvc': 4.16.4
-      '@rollup/rollup-win32-ia32-msvc': 4.16.4
-      '@rollup/rollup-win32-x64-msvc': 4.16.4
+      '@rollup/rollup-android-arm-eabi': 4.17.1
+      '@rollup/rollup-android-arm64': 4.17.1
+      '@rollup/rollup-darwin-arm64': 4.17.1
+      '@rollup/rollup-darwin-x64': 4.17.1
+      '@rollup/rollup-linux-arm-gnueabihf': 4.17.1
+      '@rollup/rollup-linux-arm-musleabihf': 4.17.1
+      '@rollup/rollup-linux-arm64-gnu': 4.17.1
+      '@rollup/rollup-linux-arm64-musl': 4.17.1
+      '@rollup/rollup-linux-powerpc64le-gnu': 4.17.1
+      '@rollup/rollup-linux-riscv64-gnu': 4.17.1
+      '@rollup/rollup-linux-s390x-gnu': 4.17.1
+      '@rollup/rollup-linux-x64-gnu': 4.17.1
+      '@rollup/rollup-linux-x64-musl': 4.17.1
+      '@rollup/rollup-win32-arm64-msvc': 4.17.1
+      '@rollup/rollup-win32-ia32-msvc': 4.17.1
+      '@rollup/rollup-win32-x64-msvc': 4.17.1
       fsevents: 2.3.3
     dev: true
 
@@ -7997,64 +8044,64 @@ packages:
       fsevents: 2.3.3
     dev: true
 
-  /turbo-darwin-64@1.13.2:
-    resolution: {integrity: sha512-CCSuD8CfmtncpohCuIgq7eAzUas0IwSbHfI8/Q3vKObTdXyN8vAo01gwqXjDGpzG9bTEVedD0GmLbD23dR0MLA==}
+  /turbo-darwin-64@1.13.3:
+    resolution: {integrity: sha512-glup8Qx1qEFB5jerAnXbS8WrL92OKyMmg5Hnd4PleLljAeYmx+cmmnsmLT7tpaVZIN58EAAwu8wHC6kIIqhbWA==}
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-darwin-arm64@1.13.2:
-    resolution: {integrity: sha512-0HySm06/D2N91rJJ89FbiI/AodmY8B3WDSFTVEpu2+8spUw7hOJ8okWOT0e5iGlyayUP9gr31eOeL3VFZkpfCw==}
+  /turbo-darwin-arm64@1.13.3:
+    resolution: {integrity: sha512-/np2xD+f/+9qY8BVtuOQXRq5f9LehCFxamiQnwdqWm5iZmdjygC5T3uVSYuagVFsZKMvX3ycySwh8dylGTl6lg==}
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-linux-64@1.13.2:
-    resolution: {integrity: sha512-7HnibgbqZrjn4lcfIouzlPu8ZHSBtURG4c7Bedu7WJUDeZo+RE1crlrQm8wuwO54S0siYqUqo7GNHxu4IXbioQ==}
+  /turbo-linux-64@1.13.3:
+    resolution: {integrity: sha512-G+HGrau54iAnbXLfl+N/PynqpDwi/uDzb6iM9hXEDG+yJnSJxaHMShhOkXYJPk9offm9prH33Khx2scXrYVW1g==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-linux-arm64@1.13.2:
-    resolution: {integrity: sha512-sUq4dbpk6SNKg/Hkwn256Vj2AEYSQdG96repio894h5/LEfauIK2QYiC/xxAeW3WBMc6BngmvNyURIg7ltrePg==}
+  /turbo-linux-arm64@1.13.3:
+    resolution: {integrity: sha512-qWwEl5VR02NqRyl68/3pwp3c/olZuSp+vwlwrunuoNTm6JXGLG5pTeme4zoHNnk0qn4cCX7DFrOboArlYxv0wQ==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-windows-64@1.13.2:
-    resolution: {integrity: sha512-DqzhcrciWq3dpzllJR2VVIyOhSlXYCo4mNEWl98DJ3FZ08PEzcI3ceudlH6F0t/nIcfSItK1bDP39cs7YoZHEA==}
+  /turbo-windows-64@1.13.3:
+    resolution: {integrity: sha512-Nudr4bRChfJzBPzEmpVV85VwUYRCGKecwkBFpbp2a4NtrJ3+UP1VZES653ckqCu2FRyRuS0n03v9euMbAvzH+Q==}
     cpu: [x64]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo-windows-arm64@1.13.2:
-    resolution: {integrity: sha512-WnPMrwfCXxK69CdDfS1/j2DlzcKxSmycgDAqV0XCYpK/812KB0KlvsVAt5PjEbZGXkY88pCJ1BLZHAjF5FcbqA==}
+  /turbo-windows-arm64@1.13.3:
+    resolution: {integrity: sha512-ouJCgsVLd3icjRLmRvHQDDZnmGzT64GBupM1Y+TjtYn2LVaEBoV6hicFy8x5DUpnqdLy+YpCzRMkWlwhmkX7sQ==}
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /turbo@1.13.2:
-    resolution: {integrity: sha512-rX/d9f4MgRT3yK6cERPAkfavIxbpBZowDQpgvkYwGMGDQ0Nvw1nc0NVjruE76GrzXQqoxR1UpnmEP54vBARFHQ==}
+  /turbo@1.13.3:
+    resolution: {integrity: sha512-n17HJv4F4CpsYTvKzUJhLbyewbXjq1oLCi90i5tW1TiWDz16ML1eDG7wi5dHaKxzh5efIM56SITnuVbMq5dk4g==}
     hasBin: true
     optionalDependencies:
-      turbo-darwin-64: 1.13.2
-      turbo-darwin-arm64: 1.13.2
-      turbo-linux-64: 1.13.2
-      turbo-linux-arm64: 1.13.2
-      turbo-windows-64: 1.13.2
-      turbo-windows-arm64: 1.13.2
+      turbo-darwin-64: 1.13.3
+      turbo-darwin-arm64: 1.13.3
+      turbo-linux-64: 1.13.3
+      turbo-linux-arm64: 1.13.3
+      turbo-windows-64: 1.13.3
+      turbo-windows-arm64: 1.13.3
     dev: true
 
   /type-check@0.4.0:
@@ -8440,7 +8487,3 @@ packages:
     resolution: {integrity: sha512-rVksvsnNCdJ/ohGc6xgPwyN8eheCxsiLM8mxuE/t/mOVqJewPuO1miLpTHQiRgTKCLexL4MeAFVagts7HmNZ2Q==}
     engines: {node: '>=10'}
     dev: true
-
-settings:
-  autoInstallPeers: true
-  excludeLinksFromLockfile: false
diff --git a/single-pool/cli/Cargo.toml b/single-pool/cli/Cargo.toml
index a521b8ef5..76e1cffbd 100644
--- a/single-pool/cli/Cargo.toml
+++ b/single-pool/cli/Cargo.toml
@@ -11,12 +11,12 @@ edition = "2021"
 tokio = "1.37"
 clap = { version = "3.2.23", features = ["derive"] }
 console = "0.15.8"
-borsh = "1.4.0"
+borsh = "1.5.0"
 bincode = "1.3.1"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 serde_json = "1.0.116"
-serde_with = "3.8.0"
+serde_with = "3.8.1"
 solana-account-decoder = ">=1.18.11,<=2"
 solana-clap-v3-utils = ">=1.18.11,<=2"
 solana-cli-config = ">=1.18.11,<=2"
@@ -30,7 +30,7 @@ solana-vote-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../token/program", features = [
   "no-entrypoint",
 ] }
-spl-token-client = { version = "0.9.2", path = "../../token/client" }
+spl-token-client = { version = "0.10.0", path = "../../token/client" }
 spl-associated-token-account = { version = "3.0.2", path = "../../associated-token-account/program", features = [
   "no-entrypoint",
 ] }
@@ -40,7 +40,7 @@ spl-single-pool = { version = "1.0.0", path = "../program", features = [
 
 [dev-dependencies]
 solana-test-validator = ">=1.18.11,<=2"
-serial_test = "3.1.0"
+serial_test = "3.1.1"
 test-case = "3.3"
 tempfile = "3.10.1"
 
diff --git a/single-pool/cli/src/main.rs b/single-pool/cli/src/main.rs
index 20d63a7c0..10aaa89af 100644
--- a/single-pool/cli/src/main.rs
+++ b/single-pool/cli/src/main.rs
@@ -408,7 +408,7 @@ async fn command_withdraw(config: &Config, command_config: WithdrawCli) -> Comma
     let stake_account = Keypair::new();
     let stake_account_address = stake_account.pubkey();
 
-    // since we cant infer pool from token account, the withdraw invocation is
+    // since we can't infer pool from token account, the withdraw invocation is
     // rather simpler first get the pool address
     let pool_address = pool_address_from_args(
         command_config.pool_address,
diff --git a/single-pool/program/Cargo.toml b/single-pool/program/Cargo.toml
index deb7bc215..cb95999f6 100644
--- a/single-pool/program/Cargo.toml
+++ b/single-pool/program/Cargo.toml
@@ -13,7 +13,7 @@ test-sbf = []
 
 [dependencies]
 arrayref = "0.3.7"
-borsh = "1.4.0"
+borsh = "1.5.0"
 num-derive = "0.4"
 num-traits = "0.2"
 num_enum = "0.7.2"
diff --git a/single-pool/program/src/state.rs b/single-pool/program/src/state.rs
index 1ad95305c..0c58b87f6 100644
--- a/single-pool/program/src/state.rs
+++ b/single-pool/program/src/state.rs
@@ -46,7 +46,7 @@ impl SinglePool {
         }
 
         // pool vote account address is properly configured. in practice this is
-        // irrefutable because the pool is initialized from the addresss that
+        // irrefutable because the pool is initialized from the address that
         // derives it, and never modified
         if *account_info.key != find_pool_address(program_id, &pool.vote_account_address) {
             return Err(SinglePoolError::InvalidPoolAccount.into());
diff --git a/stake-pool/cli/Cargo.toml b/stake-pool/cli/Cargo.toml
index c972cc474..346030deb 100644
--- a/stake-pool/cli/Cargo.toml
+++ b/stake-pool/cli/Cargo.toml
@@ -9,9 +9,9 @@ repository = "https://github.com/solana-labs/solana-program-library"
 version = "1.0.0"
 
 [dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 clap = "2.33.3"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.130"
 serde_json = "1.0.116"
 solana-account-decoder = ">=1.18.11,<=2"
diff --git a/stake-pool/cli/src/main.rs b/stake-pool/cli/src/main.rs
index c695f3511..a7bd4cfa5 100644
--- a/stake-pool/cli/src/main.rs
+++ b/stake-pool/cli/src/main.rs
@@ -114,19 +114,21 @@ const COMPUTE_UNIT_LIMIT_ARG: ArgConstant<'static> = ArgConstant {
     name: "compute_unit_limit",
     long: "--with-compute-unit-limit",
     help: "Set compute unit limit for transaction, in compute units; also accepts \
-        keyword SIMULATED to use compute units from transaction simulation prior \
-        to sending. Note that SIMULATED may fail if accounts are modified by another \
-        transaction between simulation and execution.",
+        keyword DEFAULT to use the default compute unit limit, which is 200k per \
+        top-level instruction, with a maximum of 1.4 million. \
+        If nothing is set, transactions are simulated prior to sending, and the \
+        compute units consumed are set as the limit. This may may fail if accounts \
+        are modified by another transaction between simulation and execution.",
 };
 fn is_compute_unit_limit_or_simulated<T>(string: T) -> Result<(), String>
 where
     T: AsRef<str> + std::fmt::Display,
 {
-    if string.as_ref().parse::<u32>().is_ok() || string.as_ref() == "SIMULATED" {
+    if string.as_ref().parse::<u32>().is_ok() || string.as_ref() == "DEFAULT" {
         Ok(())
     } else {
         Err(format!(
-            "Unable to parse input compute unit limit as integer or SIMULATED, provided: {string}"
+            "Unable to parse input compute unit limit as integer or DEFAULT, provided: {string}"
         ))
     }
 }
@@ -136,7 +138,7 @@ where
 {
     match string.as_ref().parse::<u32>() {
         Ok(compute_unit_limit) => Ok(ComputeUnitLimit::Static(compute_unit_limit)),
-        Err(_) if string.as_ref() == "SIMULATED" => Ok(ComputeUnitLimit::Simulated),
+        Err(_) if string.as_ref() == "DEFAULT" => Ok(ComputeUnitLimit::Default),
         _ => Err(format!(
             "Unable to parse compute unit limit, provided: {string}"
         )),
@@ -2040,7 +2042,7 @@ fn main() {
                 .global(true)
                 .help("Transaction fee payer account [default: cli config keypair]"),
         )
-        .arg(compute_unit_price_arg().validator(is_parsable::<u64>).requires(COMPUTE_UNIT_LIMIT_ARG.name).global(true))
+        .arg(compute_unit_price_arg().validator(is_parsable::<u64>).global(true))
         .arg(
             Arg::with_name(COMPUTE_UNIT_LIMIT_ARG.name)
                 .long(COMPUTE_UNIT_LIMIT_ARG.long)
@@ -2834,7 +2836,13 @@ fn main() {
         let compute_unit_limit = matches
             .value_of(COMPUTE_UNIT_LIMIT_ARG.name)
             .map(|x| parse_compute_unit_limit(x).unwrap())
-            .unwrap_or(ComputeUnitLimit::Default);
+            .unwrap_or_else(|| {
+                if compute_unit_price.is_some() {
+                    ComputeUnitLimit::Simulated
+                } else {
+                    ComputeUnitLimit::Default
+                }
+            });
 
         Config {
             rpc_client: RpcClient::new_with_commitment(json_rpc_url, CommitmentConfig::confirmed()),
diff --git a/stake-pool/js/package.json b/stake-pool/js/package.json
index d30081b6d..434c20c11 100644
--- a/stake-pool/js/package.json
+++ b/stake-pool/js/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@solana/spl-stake-pool",
-  "version": "1.1.1",
+  "version": "1.1.3",
   "description": "SPL Stake Pool Program JS API",
   "scripts": {
     "build": "tsc && cross-env NODE_ENV=production rollup -c",
@@ -45,7 +45,7 @@
   "dependencies": {
     "@coral-xyz/borsh": "^0.30.0",
     "@solana/buffer-layout": "^4.0.1",
-    "@solana/spl-token": "0.4.4",
+    "@solana/spl-token": "0.4.6",
     "@solana/web3.js": "^1.91.7",
     "bn.js": "^5.2.0",
     "buffer": "^6.0.3",
@@ -72,7 +72,7 @@
     "jest": "^29.0.0",
     "prettier": "^3.2.5",
     "rimraf": "^5.0.0",
-    "rollup": "^4.16.4",
+    "rollup": "^4.17.1",
     "rollup-plugin-dts": "^6.1.0",
     "ts-jest": "^29.1.2",
     "typescript": "^5.4.5"
diff --git a/stake-pool/program/Cargo.toml b/stake-pool/program/Cargo.toml
index 22b220a8e..1180bf5f7 100644
--- a/stake-pool/program/Cargo.toml
+++ b/stake-pool/program/Cargo.toml
@@ -13,12 +13,12 @@ test-sbf = []
 
 [dependencies]
 arrayref = "0.3.7"
-borsh = "1.4.0"
+borsh = "1.5.0"
 bytemuck = "1.15"
 num-derive = "0.4"
 num-traits = "0.2"
 num_enum = "0.7.2"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 solana-program = ">=1.18.11,<=2"
 solana-security-txt = "1.1.1"
diff --git a/stateless-asks/program/Cargo.toml b/stateless-asks/program/Cargo.toml
index 6ad6132a8..5969351bb 100644
--- a/stateless-asks/program/Cargo.toml
+++ b/stateless-asks/program/Cargo.toml
@@ -11,7 +11,7 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 solana-program = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../token/program", features = [
   "no-entrypoint",
diff --git a/token-collection/program/Cargo.toml b/token-collection/program/Cargo.toml
index 961b0be88..9799aa97a 100644
--- a/token-collection/program/Cargo.toml
+++ b/token-collection/program/Cargo.toml
@@ -25,7 +25,7 @@ spl-type-length-value = { version = "0.4.3", path = "../../libraries/type-length
 solana-program-test = ">=1.18.11,<=2"
 solana-sdk = ">=1.18.11,<=2"
 spl-discriminator = { version = "0.2.2", path = "../../libraries/discriminator" }
-spl-token-client = { version = "0.9.2", path = "../../token/client" }
+spl-token-client = { version = "0.10.0", path = "../../token/client" }
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/token-group/example/Cargo.toml b/token-group/example/Cargo.toml
index a48418645..9c4d5d0a2 100644
--- a/token-group/example/Cargo.toml
+++ b/token-group/example/Cargo.toml
@@ -22,7 +22,7 @@ spl-type-length-value = { version = "0.4.3", path = "../../libraries/type-length
 solana-program-test = ">=1.18.11,<=2"
 solana-sdk = ">=1.18.11,<=2"
 spl-discriminator = { version = "0.2.2", path = "../../libraries/discriminator" }
-spl-token-client = { version = "0.9.2", path = "../../token/client" }
+spl-token-client = { version = "0.10.0", path = "../../token/client" }
 spl-token-metadata-interface = { version = "0.3.3", path = "../../token-metadata/interface" }
 
 [lib]
diff --git a/token-group/example/src/processor.rs b/token-group/example/src/processor.rs
index fd1dd0c66..4b86defc7 100644
--- a/token-group/example/src/processor.rs
+++ b/token-group/example/src/processor.rs
@@ -178,7 +178,7 @@ pub fn process_initialize_member(_program_id: &Pubkey, accounts: &[AccountInfo])
         }
     }
 
-    // Make sure the member account is not the same as the group accout
+    // Make sure the member account is not the same as the group account
     if member_info.key == group_info.key {
         return Err(TokenGroupError::MemberAccountIsGroupAccount.into());
     }
diff --git a/token-lending/js/package.json b/token-lending/js/package.json
index 685813227..18b3cdc46 100644
--- a/token-lending/js/package.json
+++ b/token-lending/js/package.json
@@ -1,6 +1,6 @@
 {
     "name": "@solana/spl-token-lending",
-    "version": "0.3.7",
+    "version": "0.3.9",
     "description": "SPL Token Lending JavaScript API",
     "license": "MIT",
     "author": "Solana Labs Maintainers <maintainers@solanalabs.com>",
@@ -37,14 +37,14 @@
         "bignumber.js": "^9.0.1"
     },
     "peerDependencies": {
-        "@solana/spl-token": "0.4.4",
+        "@solana/spl-token": "0.4.6",
         "@solana/web3.js": "^1.20.3"
     },
     "devDependencies": {
         "@rollup/plugin-commonjs": "^25.0.0",
         "@rollup/plugin-node-resolve": "^15.0.2",
         "@rollup/plugin-typescript": "^11.1.6",
-        "@solana/spl-token": "0.4.4",
+        "@solana/spl-token": "0.4.6",
         "@solana/web3.js": "^1.91.7",
         "@types/eslint": "^8.56.7",
         "@types/eslint-plugin-prettier": "^3.1.0",
@@ -56,7 +56,7 @@
         "eslint-plugin-prettier": "^5.1.3",
         "gh-pages": "^6.1.1",
         "prettier": "^3.2.5",
-        "rollup": "^4.16.4",
+        "rollup": "^4.17.1",
         "ts-node": "^10.9.2",
         "tslib": "^2.3.0",
         "typedoc": "^0.25.13",
diff --git a/token-metadata/example/Cargo.toml b/token-metadata/example/Cargo.toml
index 8908953c1..175ebdb2d 100644
--- a/token-metadata/example/Cargo.toml
+++ b/token-metadata/example/Cargo.toml
@@ -21,7 +21,7 @@ spl-pod = { version = "0.2.2", path = "../../libraries/pod" }
 [dev-dependencies]
 solana-program-test = ">=1.18.11,<=2"
 solana-sdk = ">=1.18.11,<=2"
-spl-token-client = { version = "0.9.2", path = "../../token/client" }
+spl-token-client = { version = "0.10.0", path = "../../token/client" }
 test-case = "3.3"
 
 [lib]
diff --git a/token-metadata/interface/Cargo.toml b/token-metadata/interface/Cargo.toml
index 5c95da730..1b24faf2a 100644
--- a/token-metadata/interface/Cargo.toml
+++ b/token-metadata/interface/Cargo.toml
@@ -11,8 +11,8 @@ edition = "2021"
 serde-traits = ["dep:serde", "spl-pod/serde-traits"]
 
 [dependencies]
-borsh = "1.4.0"
-serde = { version = "1.0.198", optional = true }
+borsh = "1.5.0"
+serde = { version = "1.0.199", optional = true }
 solana-program = ">=1.18.11,<=2"
 spl-discriminator = { version = "0.2.2", path = "../../libraries/discriminator" }
 spl-program-error = { version = "0.4.0", path = "../../libraries/program-error" }
diff --git a/token-swap/js/package.json b/token-swap/js/package.json
index ffe24ff0b..ce36b0a55 100644
--- a/token-swap/js/package.json
+++ b/token-swap/js/package.json
@@ -1,6 +1,6 @@
 {
   "name": "@solana/spl-token-swap",
-  "version": "0.4.1",
+  "version": "0.4.3",
   "description": "SPL Token Swap JavaScript API",
   "license": "MIT",
   "type": "module",
@@ -52,7 +52,7 @@
     "@solana/web3.js": "^1.91.7"
   },
   "devDependencies": {
-    "@solana/spl-token": "0.4.4",
+    "@solana/spl-token": "0.4.6",
     "@solana/web3.js": "^1.91.7",
     "@types/bn.js": "^5.1.0",
     "@types/chai-as-promised": "^7.1.4",
diff --git a/token-upgrade/cli/Cargo.toml b/token-upgrade/cli/Cargo.toml
index 55c0f2957..5887dceb9 100644
--- a/token-upgrade/cli/Cargo.toml
+++ b/token-upgrade/cli/Cargo.toml
@@ -22,7 +22,7 @@ solana-sdk = ">=1.18.11,<=2"
 spl-associated-token-account = { version = "3.0.2", path = "../../associated-token-account/program", features = ["no-entrypoint"] }
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-token-2022 = { version = "3.0.2", path = "../../token/program-2022", features = ["no-entrypoint"] }
-spl-token-client = { version = "0.9.2", path = "../../token/client" }
+spl-token-client = { version = "0.10.0", path = "../../token/client" }
 spl-token-upgrade = { version = "0.1", path = "../program", features = ["no-entrypoint"] }
 tokio = { version = "1", features = ["full"] }
 
diff --git a/token-upgrade/program/Cargo.toml b/token-upgrade/program/Cargo.toml
index e516224ab..b24acb973 100644
--- a/token-upgrade/program/Cargo.toml
+++ b/token-upgrade/program/Cargo.toml
@@ -23,7 +23,7 @@ thiserror = "1.0"
 solana-program-test = ">=1.18.11,<=2"
 solana-sdk = ">=1.18.11,<=2"
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
-spl-token-client = { version = "0.9.2", path = "../../token/client" }
+spl-token-client = { version = "0.10.0", path = "../../token/client" }
 test-case = "3.3"
 
 [lib]
diff --git a/token/cli/Cargo.toml b/token/cli/Cargo.toml
index 828fb260b..7b07bdafc 100644
--- a/token/cli/Cargo.toml
+++ b/token/cli/Cargo.toml
@@ -6,7 +6,7 @@ homepage = "https://spl.solana.com/token"
 license = "Apache-2.0"
 name = "spl-token-cli"
 repository = "https://github.com/solana-labs/solana-program-library"
-version = "3.4.0"
+version = "3.4.1"
 
 [build-dependencies]
 walkdir = "2"
@@ -16,7 +16,7 @@ base64 = "0.22.0"
 clap = "2.33.3"
 console = "0.15.8"
 futures = "0.3"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 serde_json = "1.0.116"
 solana-account-decoder = ">=1.18.11,<=2"
@@ -34,7 +34,7 @@ spl-token = { version = "4.0", path = "../program", features = [
 spl-token-2022 = { version = "3.0.2", path = "../program-2022", features = [
   "no-entrypoint",
 ] }
-spl-token-client = { version = "0.9.2", path = "../client" }
+spl-token-client = { version = "0.10.0", path = "../client" }
 spl-token-metadata-interface = { version = "0.3.3", path = "../../token-metadata/interface" }
 spl-token-group-interface = { version = "0.2.3", path = "../../token-group/interface" }
 spl-associated-token-account = { version = "3.0.2", path = "../../associated-token-account/program", features = [
@@ -51,7 +51,7 @@ tokio = "1.37"
 solana-test-validator = ">=1.18.11,<=2"
 assert_cmd = "2.0.14"
 libtest-mimic = "0.7"
-serial_test = "3.1.0"
+serial_test = "3.1.1"
 tempfile = "3.10.1"
 
 [[bin]]
diff --git a/token/client/Cargo.toml b/token/client/Cargo.toml
index db24f5f43..2d58adb00 100644
--- a/token/client/Cargo.toml
+++ b/token/client/Cargo.toml
@@ -5,7 +5,7 @@ edition = "2021"
 license = "Apache-2.0"
 name = "spl-token-client"
 repository = "https://github.com/solana-labs/solana-program-library"
-version = "0.9.2"
+version = "0.10.0"
 
 [dependencies]
 async-trait = "0.1"
diff --git a/token/program-2022/Cargo.toml b/token/program-2022/Cargo.toml
index 27a8789cb..f2ff08619 100644
--- a/token/program-2022/Cargo.toml
+++ b/token/program-2022/Cargo.toml
@@ -37,14 +37,14 @@ spl-transfer-hook-interface = { version = "0.6.3", path = "../transfer-hook/inte
 spl-type-length-value = { version = "0.4.3", path = "../../libraries/type-length-value" }
 spl-pod = { version = "0.2.2", path = "../../libraries/pod" }
 thiserror = "1.0"
-serde = { version = "1.0.198", optional = true }
-serde_with = { version = "3.8.0", optional = true }
+serde = { version = "1.0.199", optional = true }
+serde_with = { version = "3.8.1", optional = true }
 base64 = { version = "0.22.0", optional = true }
 
 [dev-dependencies]
 lazy_static = "1.4.0"
 proptest = "1.4"
-serial_test = "3.1.0"
+serial_test = "3.1.1"
 solana-program-test = ">=1.18.11,<=2"
 solana-sdk = ">=1.18.11,<=2"
 spl-tlv-account-resolution = { version = "0.6.3", path = "../../libraries/tlv-account-resolution" }
diff --git a/token/program/Cargo.toml b/token/program/Cargo.toml
index afa56278b..e310bf3bb 100644
--- a/token/program/Cargo.toml
+++ b/token/program/Cargo.toml
@@ -24,7 +24,7 @@ thiserror = "1.0"
 [dev-dependencies]
 lazy_static = "1.4.0"
 proptest = "1.4"
-serial_test = "3.1.0"
+serial_test = "3.1.1"
 solana-program-test = ">=1.18.11,<=2"
 solana-sdk = ">=1.18.11,<=2"
 
diff --git a/token/transfer-hook/cli/Cargo.toml b/token/transfer-hook/cli/Cargo.toml
index 02e916f81..230ba6aff 100644
--- a/token/transfer-hook/cli/Cargo.toml
+++ b/token/transfer-hook/cli/Cargo.toml
@@ -22,14 +22,14 @@ spl-tlv-account-resolution = { version = "0.6.3" , path = "../../../libraries/tl
 strum = "0.26"
 strum_macros = "0.26"
 tokio = { version = "1", features = ["full"] }
-serde = { version = "1.0.198", features = ["derive"] }
+serde = { version = "1.0.199", features = ["derive"] }
 serde_json = "1.0.116"
 serde_yaml = "0.9.34"
 
 [dev-dependencies]
 solana-test-validator = ">=1.18.11,<=2"
 spl-token-2022 = { version = "3.0.2", path = "../../program-2022", features = ["no-entrypoint"] }
-spl-token-client = { version = "0.9.2", path = "../../client" }
+spl-token-client = { version = "0.10.0", path = "../../client" }
 
 [[bin]]
 name = "spl-transfer-hook"
diff --git a/token/transfer-hook/cli/src/main.rs b/token/transfer-hook/cli/src/main.rs
index 4dae0beaa..2ffd54c8c 100644
--- a/token/transfer-hook/cli/src/main.rs
+++ b/token/transfer-hook/cli/src/main.rs
@@ -455,9 +455,7 @@ extraMetas:
             )
             .unwrap();
 
-            let token_source = arg_matches
-                .try_get_one::<SignerSource>("program_id")?
-                .unwrap();
+            let token_source = arg_matches.try_get_one::<SignerSource>("token")?.unwrap();
             let token = pubkey_from_source(arg_matches, token_source, "token", &mut wallet_manager)
                 .unwrap();
 
@@ -506,9 +504,7 @@ extraMetas:
             )
             .unwrap();
 
-            let token_source = arg_matches
-                .try_get_one::<SignerSource>("program_id")?
-                .unwrap();
+            let token_source = arg_matches.try_get_one::<SignerSource>("token")?.unwrap();
             let token = pubkey_from_source(arg_matches, token_source, "token", &mut wallet_manager)
                 .unwrap();
 


Test patch:
diff --git a/governance/test-sdk/Cargo.toml b/governance/test-sdk/Cargo.toml
index 8928cf9d7..38bc793d2 100644
--- a/governance/test-sdk/Cargo.toml
+++ b/governance/test-sdk/Cargo.toml
@@ -10,11 +10,11 @@ edition = "2021"
 [dependencies]
 arrayref = "0.3.7"
 bincode = "1.3.2"
-borsh = "1.4.0"
+borsh = "1.5.0"
 lazy_static = "1.4.0"
 num-derive = "0.4"
 num-traits = "0.2"
-serde = "1.0.198"
+serde = "1.0.199"
 serde_derive = "1.0.103"
 solana-program = ">=1.18.11,<=2"
 solana-program-test = ">=1.18.11,<=2"
diff --git a/libraries/type-length-value-derive-test/Cargo.toml b/libraries/type-length-value-derive-test/Cargo.toml
index 7c78414dc..adbb0fb86 100644
--- a/libraries/type-length-value-derive-test/Cargo.toml
+++ b/libraries/type-length-value-derive-test/Cargo.toml
@@ -8,7 +8,7 @@ license = "Apache-2.0"
 edition = "2021"
 
 [dev-dependencies]
-borsh = "1.4.0"
+borsh = "1.5.0"
 solana-program = "1.16"
 spl-discriminator = { version = "0.2.2", path = "../discriminator" }
 spl-type-length-value = { version = "0.4.3", path = "../type-length-value", features = [
diff --git a/token/program-2022-test/Cargo.toml b/token/program-2022-test/Cargo.toml
index 4c04f5210..05a46d3d7 100644
--- a/token/program-2022-test/Cargo.toml
+++ b/token/program-2022-test/Cargo.toml
@@ -17,7 +17,7 @@ walkdir = "2"
 
 [dev-dependencies]
 async-trait = "0.1"
-borsh = "1.4.0"
+borsh = "1.5.0"
 futures-util = "0.3"
 solana-program = ">=1.18.11,<=2"
 solana-program-test = ">=1.18.11,<=2"
@@ -34,7 +34,7 @@ spl-instruction-padding = { version = "0.1.1", path = "../../instruction-padding
   "no-entrypoint",
 ] }
 spl-tlv-account-resolution = { version = "0.6.3", path = "../../libraries/tlv-account-resolution" }
-spl-token-client = { version = "0.9.2", path = "../client" }
+spl-token-client = { version = "0.10.0", path = "../client" }
 spl-token-group-interface = { version = "0.2.3", path = "../../token-group/interface" }
 spl-token-metadata-interface = { version = "0.3.3", path = "../../token-metadata/interface" }
 spl-transfer-hook-example = { version = "0.6", path = "../transfer-hook/example", features = [