Repository: solana-labs/solana-program-library
Pull request #6122 (2024-01-12 06:00:28)

token 2022 & transfer hook: drop deprecated helpers
Ahead of #6119, if we're going to do releases, we can drop the deprecated helpers altogether.

This PR removes the deprecated `offchain` and `onchain` helpers from SPL Transfer Hook interface, as well as the deprecated `offchain` helper from Token2022.

buffalojoec: I've also added a commit to do JavaScript here, too. But if we don't think it belongs in this PR I can roll it back!

Patch:
diff --git a/Anchor.toml b/Anchor.toml
index 9fcf4f3f9..fff1987af 100644
--- a/Anchor.toml
+++ b/Anchor.toml
@@ -1,6 +1,6 @@
 [toolchain]
 anchor_version = "0.29.0"
-solana_version = "1.17.6"
+solana_version = "1.17.13"
 
 [workspace]
 members = [
diff --git a/Cargo.lock b/Cargo.lock
index 8e059cc9e..4d0290bb7 100644
--- a/Cargo.lock
+++ b/Cargo.lock
@@ -76,14 +76,15 @@ dependencies = [
 
 [[package]]
 name = "ahash"
-version = "0.8.3"
+version = "0.8.4"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2c99f64d1e06488f620f932677e24bc6e2897582980441ae90a671415bd7ec2f"
+checksum = "72832d73be48bac96a5d7944568f305d829ed55b0ce3b483647089dfaf6cf704"
 dependencies = [
  "cfg-if 1.0.0",
  "getrandom 0.2.10",
  "once_cell",
  "version_check",
+ "zerocopy",
 ]
 
 [[package]]
@@ -403,9 +404,9 @@ dependencies = [
 
 [[package]]
 name = "assert_cmd"
-version = "2.0.12"
+version = "2.0.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "88903cb14723e4d4003335bb7f8a14f27691649105346a0f0957466c096adfe6"
+checksum = "00ad3f3a942eee60335ab4342358c161ee296829e0d16ff42fc1d6cb07815467"
 dependencies = [
  "anstyle",
  "bstr 1.6.0",
@@ -602,9 +603,9 @@ checksum = "904dfeac50f3cdaba28fc6f57fdcddb75f49ed61346676a78c4ffe55877802fd"
 
 [[package]]
 name = "base64"
-version = "0.21.6"
+version = "0.21.7"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c79fed4cdb43e993fcdadc7e58a09fd0e3e649c4436fa11da71c9f1f3ee7feb9"
+checksum = "9d297deb1925b89f2ccc13d7635fa0714f12c87adce1c75356b39ca9b7178567"
 
 [[package]]
 name = "base64ct"
@@ -1834,6 +1835,15 @@ dependencies = [
  "windows-sys 0.52.0",
 ]
 
+[[package]]
+name = "escape8259"
+version = "0.5.2"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "ba4f4911e3666fcd7826997b4745c8224295a6f3072f1418c3067b97a67557ee"
+dependencies = [
+ "rustversion",
+]
+
 [[package]]
 name = "etcd-client"
 version = "0.11.1"
@@ -2172,9 +2182,9 @@ dependencies = [
 
 [[package]]
 name = "h2"
-version = "0.3.17"
+version = "0.3.24"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "66b91535aa35fea1523ad1b86cb6b53c28e0ae566ba4a460f4457e936cad7c6f"
+checksum = "bb2c4422095b67ee78da96fbb51a4cc413b3b25883c7717ff7ca1ab31022c9c9"
 dependencies = [
  "bytes",
  "fnv",
@@ -2182,7 +2192,7 @@ dependencies = [
  "futures-sink",
  "futures-util",
  "http",
- "indexmap 1.9.3",
+ "indexmap 2.0.2",
  "slab",
  "tokio",
  "tokio-util 0.7.1",
@@ -2222,7 +2232,7 @@ version = "0.13.2"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "43a3c133739dddd0d2990f9a4bdf8eb4b21ef50e4851ca85ab661199821d510e"
 dependencies = [
- "ahash 0.8.3",
+ "ahash 0.8.4",
 ]
 
 [[package]]
@@ -2867,11 +2877,12 @@ dependencies = [
 
 [[package]]
 name = "libtest-mimic"
-version = "0.6.1"
+version = "0.7.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "6d8de370f98a6cb8a4606618e53e802f93b094ddec0f96988eaec2c27e6e9ce7"
+checksum = "7f0f4c6f44ecfd52e8b443f2ad18f2b996540135771561283c2352ce56a1c70b"
 dependencies = [
  "clap 4.4.8",
+ "escape8259",
  "termcolor",
  "threadpool",
 ]
@@ -2889,12 +2900,13 @@ dependencies = [
 
 [[package]]
 name = "light-poseidon"
-version = "0.1.1"
+version = "0.2.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "949bdd22e4ed93481d45e9a6badb34b99132bcad0c8a8d4f05c42f7dcc7b90bc"
+checksum = "3c9a85a9752c549ceb7578064b4ed891179d20acd85f27318573b64d2d7ee7ee"
 dependencies = [
  "ark-bn254",
  "ark-ff",
+ "num-bigint 0.4.4",
  "thiserror",
 ]
 
@@ -4184,7 +4196,7 @@ source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "046cd98826c46c2ac8ddecae268eb5c2e58628688a5fc7a2643704a73faba95b"
 dependencies = [
  "async-compression",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bytes",
  "encoding_rs",
  "futures-core",
@@ -4560,7 +4572,7 @@ version = "3.4.0"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "64cd236ccc1b7a29e7e2739f27c0b2dd199804abc4290e32f59f3b68d6405c23"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "chrono",
  "hex",
  "indexmap 1.9.3",
@@ -4898,12 +4910,12 @@ dependencies = [
 
 [[package]]
 name = "solana-account-decoder"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "df7138257d4e2cdc6349a6385825a51d20ab1a458661df7ca1d31e3436165a40"
+checksum = "c48541b782c0fbb15ac202f2487353c3649fbf868afacae6ca1c9fe0f7df0b4a"
 dependencies = [
  "Inflector",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bs58",
  "bv",
@@ -4922,9 +4934,9 @@ dependencies = [
 
 [[package]]
 name = "solana-accounts-db"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "5ac9a43038ed52dd4a99f6343a0216fb8ce2a4ae205d92f377caaf65e3d437e1"
+checksum = "9a5a48e3dfffb0699a7b2c6a0714f4c6dd974a8fd744b4e4ac67238ed3fc3ba0"
 dependencies = [
  "arrayref",
  "bincode",
@@ -4981,9 +4993,9 @@ dependencies = [
 
 [[package]]
 name = "solana-address-lookup-table-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0209bbb9e62330a4850ede86fc5e808a7e78d235963f60732041f96fe911e9f3"
+checksum = "918eaf2c89e92960ab5fa7c21921fb3921ace134770c371b5d25b13569e2993f"
 dependencies = [
  "bincode",
  "bytemuck",
@@ -5002,9 +5014,9 @@ dependencies = [
 
 [[package]]
 name = "solana-banks-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "2a0718a3dffd9edc8d07d94fa5b8a115f49ac7b38f381f8d274c5dd54823c975"
+checksum = "c565499d7fdb92ac2dc6ad2de23c9b8e9cedd54630953e8fcdd98a03a898b8e6"
 dependencies = [
  "borsh 0.10.3",
  "futures 0.3.30",
@@ -5019,9 +5031,9 @@ dependencies = [
 
 [[package]]
 name = "solana-banks-interface"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c03edfe080a6f081e1b27e4ad20f19c31ede66fa95b046138119d4695b8916c9"
+checksum = "b88919cc1dc06b78da78d2f82b0afd094926981d7538ed68fe204201c5f60d72"
 dependencies = [
  "serde",
  "solana-sdk",
@@ -5030,9 +5042,9 @@ dependencies = [
 
 [[package]]
 name = "solana-banks-server"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "330e59c5e46ec0788986115c1a58be475cddae6e6d46afa239cd06ccd714feea"
+checksum = "3fcf6f5a00e3e30b33a6f72c4e5b02a0933dfdf294efabf47dfed4d6a1640928"
 dependencies = [
  "bincode",
  "crossbeam-channel",
@@ -5050,9 +5062,9 @@ dependencies = [
 
 [[package]]
 name = "solana-bloom"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "45a78fe0987a18034757063830f9ecc94ab05f670dbb8bc8ce84b147ed194e79"
+checksum = "f937197c7f16c95f120e4d88b42c1a053d5ff6df599412656e70046d28181b63"
 dependencies = [
  "bv",
  "fnv",
@@ -5069,9 +5081,9 @@ dependencies = [
 
 [[package]]
 name = "solana-bpf-loader-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "536313ac32a79e301773fc06259a13f1992f68d65929464d503a60f749be8629"
+checksum = "7b1f0c6b35b805f7bf31d08b3c609fb37eb13031d675e2e4db227873e1050c27"
 dependencies = [
  "bincode",
  "byteorder",
@@ -5088,9 +5100,9 @@ dependencies = [
 
 [[package]]
 name = "solana-bucket-map"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0b28fc5aa5b11f644b1b3852649c91c68de2d15779743542621847c9889dd5b2"
+checksum = "93f4038e5bf34bcca677fd749512fbca8db2db21ca629b6b1095e502d11e4265"
 dependencies = [
  "bv",
  "bytemuck",
@@ -5106,9 +5118,9 @@ dependencies = [
 
 [[package]]
 name = "solana-clap-utils"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a438d68cf354e0eb57e565569c735ddcd65414b1ff37c624329714be603aae76"
+checksum = "c3a78952f057a7d4f87b3a6a5f4a8705cefbb67bbc00ecffc2c75b168a54c931"
 dependencies = [
  "chrono",
  "clap 2.34.0",
@@ -5123,9 +5135,9 @@ dependencies = [
 
 [[package]]
 name = "solana-clap-v3-utils"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c7372aee28a7223843636a234765881cd492f5fee56dfa272f046ef04788ce9b"
+checksum = "7198e5898c26a245c5f28afe4fc9569dae030afa123b6eed410b602175694b45"
 dependencies = [
  "chrono",
  "clap 3.2.25",
@@ -5141,9 +5153,9 @@ dependencies = [
 
 [[package]]
 name = "solana-cli-config"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d674b29028c750bca5af55d8c5497f7eb0d55940d548418e9c7d3d3cbea2f7d7"
+checksum = "679dc3185379986a1cfa8dce737a59a9899b8114a38cb8e184bac228fabb4a04"
 dependencies = [
  "dirs-next",
  "lazy_static",
@@ -5157,12 +5169,12 @@ dependencies = [
 
 [[package]]
 name = "solana-cli-output"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ee743558a1a7351e2cb2f015983c6cf7f374e8d94e182961d93c82963c153d7"
+checksum = "f7f5c088a3633b79e1087dec6a8f0f7997154a6004d2d444972a7d5dfb96e90f"
 dependencies = [
  "Inflector",
- "base64 0.21.6",
+ "base64 0.21.7",
  "chrono",
  "clap 2.34.0",
  "console",
@@ -5184,9 +5196,9 @@ dependencies = [
 
 [[package]]
 name = "solana-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ca40e627a0eb0ecd2e194279f4a5f636414f6d7623095583822ecef5980e61fa"
+checksum = "4e85b1d68bce244750bd02c4d71ed0df415c9b8d91a4b0f1e7ce6b97748db46c"
 dependencies = [
  "async-trait",
  "bincode",
@@ -5217,9 +5229,9 @@ dependencies = [
 
 [[package]]
 name = "solana-compute-budget-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b05fb9ef78a41b04d34f948e43397bafe9dc8258772babdd02332eb36883f558"
+checksum = "1cc2978cf6a5335576b2c12ce4bb3cf6c95178a9e2f1f110a39c17c7ca79ba94"
 dependencies = [
  "solana-program-runtime",
  "solana-sdk",
@@ -5227,9 +5239,9 @@ dependencies = [
 
 [[package]]
 name = "solana-config-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46661da639413c3e78f2658ce17faf2090d77a67800eafe7cc46645710f05bb4"
+checksum = "7c66c9c5bbc148affd42127061af9c0e7e5901b5e5142e951912f165272203c1"
 dependencies = [
  "bincode",
  "chrono",
@@ -5241,9 +5253,9 @@ dependencies = [
 
 [[package]]
 name = "solana-connection-cache"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "10572a990a087daed7909a8b8e2436cd2e2d810903cc73efdcd31a36f80ad402"
+checksum = "4180686b6384013f062242ee9f18ea6ea68268e9b35fa9aa0206c2a622d1773f"
 dependencies = [
  "async-trait",
  "bincode",
@@ -5263,11 +5275,11 @@ dependencies = [
 
 [[package]]
 name = "solana-core"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "11aa4c8445a309d914fb4b4c295cb32f25ae718cb6b88fa9aa9fe49335bfdf19"
+checksum = "84b20df8cd6f552c37f61b8d545adb17304c58f10c98e341b341cd3dfe84984d"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bs58",
  "bytes",
@@ -5337,9 +5349,9 @@ dependencies = [
 
 [[package]]
 name = "solana-cost-model"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "56c977874c3dc053064212f153b840392d82e62a4fea79d9e196e6ed6a37e712"
+checksum = "2ad4fb3639f3d1751fad91bfbfc07d99427633705328d2e123fe578ca9dedf67"
 dependencies = [
  "lazy_static",
  "log",
@@ -5361,9 +5373,9 @@ dependencies = [
 
 [[package]]
 name = "solana-entry"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf02df461b89c19f8dbd04666520779001ab91899774694c657e67fa50856d7d"
+checksum = "a4e50f3ac126a87e614a56f36f5196e792c1d4e4d97b81199aafa2e0e43ac8b1"
 dependencies = [
  "bincode",
  "crossbeam-channel",
@@ -5383,9 +5395,9 @@ dependencies = [
 
 [[package]]
 name = "solana-faucet"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fcab1525acd38e43a8e9082c5a8299b5b72ed75303326ebaba8a1ac55ab1830f"
+checksum = "13fbc9d1c48031c7fce035bb139e82a2a4fcfcc2bb189dd973fdba158eff1d8c"
 dependencies = [
  "bincode",
  "byteorder",
@@ -5407,11 +5419,11 @@ dependencies = [
 
 [[package]]
 name = "solana-frozen-abi"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "06e33cbcaa4fb22729560b1f5078d809a81a7d54e8b4a0d8c0484cc419d1fc2f"
+checksum = "174a53486f9e0774680c2b6a53568a15c11ccc5cef1263a7e7d42958bfd61792"
 dependencies = [
- "ahash 0.8.3",
+ "ahash 0.8.4",
  "blake3",
  "block-buffer 0.10.4",
  "bs58",
@@ -5437,9 +5449,9 @@ dependencies = [
 
 [[package]]
 name = "solana-frozen-abi-macro"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "29b21f4329e2ee2d0a3f948ba300407b8bf2055308ccc0c9afb2eca44cb1a322"
+checksum = "e69b9bc56d9f92bd194569091d655be239a51a934df1db247e0c8bd2a9352909"
 dependencies = [
  "proc-macro2",
  "quote",
@@ -5449,9 +5461,9 @@ dependencies = [
 
 [[package]]
 name = "solana-geyser-plugin-interface"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "d40b760f0792c1d0195af3857e86c05ce276ce0aa90467010076a28f85e82df2"
+checksum = "8ca531d42ab552024f82f6eaf1cc45af8ed2af9075a4997bd8fd7fbef90375a9"
 dependencies = [
  "log",
  "solana-sdk",
@@ -5461,9 +5473,9 @@ dependencies = [
 
 [[package]]
 name = "solana-geyser-plugin-manager"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "26f401b00104cbd03fe2800ca34fb9c180e2a3c987c7998c8a1d0702cf338133"
+checksum = "4fabe7d9afaf657b63e157e8ac3de7bca4e805e4bbfe7a512dd117141c4a55af"
 dependencies = [
  "bs58",
  "crossbeam-channel",
@@ -5488,9 +5500,9 @@ dependencies = [
 
 [[package]]
 name = "solana-gossip"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "59134fc223a90072897c42a2491cfc7c746cf0a49b9eab187acbceb00f671625"
+checksum = "bf2dec401edb16f0d8c49435ef63ab5d12dd1dd6dfe469bac855f6bb3f988ced"
 dependencies = [
  "assert_matches",
  "bincode",
@@ -5538,9 +5550,9 @@ dependencies = [
 
 [[package]]
 name = "solana-ledger"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a5b86c8d38c991a7e0d5d28248facc23aaf9e114296f05eba41e79d9ace5d118"
+checksum = "bd3f0589a5fcb03bdb8baf4d646cda12eb94b04c7e4926c819c7845454788ff0"
 dependencies = [
  "assert_matches",
  "bincode",
@@ -5604,9 +5616,9 @@ dependencies = [
 
 [[package]]
 name = "solana-loader-v4-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "828d31d6d4f4559299410a1057e2a52617018e6d4754089941d6ccbba825c2f0"
+checksum = "21a62b38cd73c136635f9e8e56185b56d006a508bab67d4a06764efd1f3b0ef7"
 dependencies = [
  "log",
  "solana-measure",
@@ -5617,9 +5629,9 @@ dependencies = [
 
 [[package]]
 name = "solana-logger"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "cf2142caa78bdc817e6f6b2a3d36a1d4e0338429b127c5fd4c184925c5e13991"
+checksum = "ccb457626944fd2f192285c8281e887081dc346920c181aaf165426dbf081859"
 dependencies = [
  "env_logger",
  "lazy_static",
@@ -5628,9 +5640,9 @@ dependencies = [
 
 [[package]]
 name = "solana-measure"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b58887fd41f5de288397729d9f1875ba1fa7accf10a07e15df7179b39a38bd5f"
+checksum = "0b2a8bb3ec59a415b1c30827001c38af358a0c244e00a3d5280ca0b0ed264036"
 dependencies = [
  "log",
  "solana-sdk",
@@ -5638,9 +5650,9 @@ dependencies = [
 
 [[package]]
 name = "solana-merkle-tree"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7d316c635b5807bec0cfea39f19787b4d5b7a45492758e20416411be02749e65"
+checksum = "fd90d0e6c0519ea7b7bc3e3efe120d1d42c95397aff3b15cb8255d728ed717cb"
 dependencies = [
  "fast-math",
  "solana-program",
@@ -5648,9 +5660,9 @@ dependencies = [
 
 [[package]]
 name = "solana-metrics"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "b4bfaebf0b74b9b7eb49bffd9517a0bad107eaa5bc40156b9fffa2ae49ef20d7"
+checksum = "3c89e3237a73f781e0156fe419831c554f6807eb4f4bffea42535be9627d6fc1"
 dependencies = [
  "crossbeam-channel",
  "gethostname",
@@ -5663,9 +5675,9 @@ dependencies = [
 
 [[package]]
 name = "solana-net-utils"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "63992924212096f9806e4a64f212186412dd38e179f76f7d98505476e404e4c5"
+checksum = "0ec445e2d9dbfab7360bc0d846a676e318c13eb4d1e0359ef199187d07795d02"
 dependencies = [
  "bincode",
  "clap 3.2.25",
@@ -5685,11 +5697,11 @@ dependencies = [
 
 [[package]]
 name = "solana-perf"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ba6b7178ef92f0778e6a83b3df7478c2988c193d3086666fd0dcc6686cc3202"
+checksum = "c7b58cc4a2f4f450361bc8c1a24a94383c659e6212a74e6080a410f7d87e05a6"
 dependencies = [
- "ahash 0.8.3",
+ "ahash 0.8.4",
  "bincode",
  "bv",
  "caps",
@@ -5714,9 +5726,9 @@ dependencies = [
 
 [[package]]
 name = "solana-poh"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3b83491298b2e794fed7d7576847227521ca44e45cb8343a5404d8cb74023056"
+checksum = "03bcd81c56b972fd4cea5546ab817f1187f071fc5db990186d4f3864d5457f8c"
 dependencies = [
  "core_affinity",
  "crossbeam-channel",
@@ -5732,15 +5744,15 @@ dependencies = [
 
 [[package]]
 name = "solana-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "71109871717258d6138b8e344e54958c768f14fe35153a963bd817b1c142fa79"
+checksum = "c183d16916dd70ce2b59a4b39088f5094649a592e475fb9ebfc3cfe78b3a192c"
 dependencies = [
  "ark-bn254",
  "ark-ec",
  "ark-ff",
  "ark-serialize",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bitflags 2.4.1",
  "blake3",
@@ -5786,11 +5798,11 @@ dependencies = [
 
 [[package]]
 name = "solana-program-runtime"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a9218a980dd08e26c7663b2ce584046f754f65b468a7429543c9ac48e9ffeef"
+checksum = "1fca7d79b03e54e108069f32cf553c863838b647be7f7135644f8a1d2bdcd3a1"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "eager",
  "enum-iterator",
@@ -5814,13 +5826,13 @@ dependencies = [
 
 [[package]]
 name = "solana-program-test"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "e972cb9918dceb671aeb8cc0172a64ce9fcab4e24b3bcaf0c4311b12949ac08b"
+checksum = "e5c27258c216a68f7fe927da2392d23cf1d1a329fccd888f3287cbf922614772"
 dependencies = [
  "assert_matches",
  "async-trait",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "chrono-humanize",
  "crossbeam-channel",
@@ -5844,9 +5856,9 @@ dependencies = [
 
 [[package]]
 name = "solana-pubsub-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9ea47d1cd7eec32567c2dbcb1882aaa5882d1fb78383aab3363b847a60409210"
+checksum = "d90c6e27f0d1e627728f137db688c45accb1b7ae839021b978d1dcceff40d7a3"
 dependencies = [
  "crossbeam-channel",
  "futures-util",
@@ -5869,9 +5881,9 @@ dependencies = [
 
 [[package]]
 name = "solana-quic-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8954617a09b28ab0955e207788b5d8638dcfc763e2cd617d977e9147517b682d"
+checksum = "f340646d1bdd7b7c8e0c71f1f817a4eaeba35c06f025944c52df8f82bb565c79"
 dependencies = [
  "async-mutex",
  "async-trait",
@@ -5896,9 +5908,9 @@ dependencies = [
 
 [[package]]
 name = "solana-rayon-threadlimit"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "91f84e78a2db79215c3d990c8d26ddcb9aed3af0a1cdd361816b67acaf64a979"
+checksum = "7effa9e68a7ab9883f7fb4a91c083970223e8e8e355979eb605279608fafa6b7"
 dependencies = [
  "lazy_static",
  "num_cpus",
@@ -5906,9 +5918,9 @@ dependencies = [
 
 [[package]]
 name = "solana-remote-wallet"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bdd33ec995f43a813d5e3598f6d713eea754900f32db6c7a5966e78c074b039a"
+checksum = "e59fee3edad929473b7178f84ae58dbb3feb004a26873c8ab557b3aecfaa6d87"
 dependencies = [
  "console",
  "dialoguer",
@@ -5926,11 +5938,11 @@ dependencies = [
 
 [[package]]
 name = "solana-rpc"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "18a789c3326a58ec42eef950c6015fd2b46c93e1271151d6a377d62bdc894a22"
+checksum = "f117472b63df0cc86594a6b50a0cf85b06956aa88243bc836e007055b3c1e565"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bs58",
  "crossbeam-channel",
@@ -5983,12 +5995,12 @@ dependencies = [
 
 [[package]]
 name = "solana-rpc-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "0c2b5de95f647b2019adeb6624c75df343d659ee85256e7996adddb64400df75"
+checksum = "94ae66b579851b5142ace6133b95192b38f9a72fb4a81ce936f0af92977c062f"
 dependencies = [
  "async-trait",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bs58",
  "indicatif",
@@ -6009,11 +6021,11 @@ dependencies = [
 
 [[package]]
 name = "solana-rpc-client-api"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "8f29f7871d826499cd1a021c3257f7bcc409a6b71e9f6e7064c9b1d8c698ec78"
+checksum = "e0a62a61c8c5989f2b5e4b75bda30b4647ad4affbcfe4a2890b1adb05e2b54c8"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "bs58",
  "jsonrpc-core",
  "reqwest",
@@ -6031,9 +6043,9 @@ dependencies = [
 
 [[package]]
 name = "solana-rpc-client-nonce-utils"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0c4b897989a5e30830c0d2d22a33980d6f6a4156fc4a63d52d6e99feb44c836"
+checksum = "9db51df524aceb35e305b735086191db052dc163d09b6d5d9be65e216ab7413b"
 dependencies = [
  "clap 2.34.0",
  "solana-clap-utils",
@@ -6044,12 +6056,12 @@ dependencies = [
 
 [[package]]
 name = "solana-runtime"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ba5766627c68b40e71afe3de08195b7b5a78c4ed848c74e5e3e85995d97aef9b"
+checksum = "ba17961673c7ca5ac090d4e413d6d8b59956f03c36e1a20597b1d13ea4513077"
 dependencies = [
  "arrayref",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "blake3",
  "bv",
@@ -6121,12 +6133,12 @@ dependencies = [
 
 [[package]]
 name = "solana-sdk"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "fa9856edf27de2d32b91dc4faf08852e2231cc6b127337d71b34c43f248bf832"
+checksum = "284587e20a7256621b6061589a6d7f9fc1c1bcb9f25d183555034f7817ec49a6"
 dependencies = [
  "assert_matches",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bitflags 2.4.1",
  "borsh 0.10.3",
@@ -6175,9 +6187,9 @@ dependencies = [
 
 [[package]]
 name = "solana-sdk-macro"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7cce3b1aceaaf92c82d9ea3e7326d1c7dce4dd7bc45421be8d3834f275ab464f"
+checksum = "5fee7090babd8fe6cedd2e377366979464d29fa958bf5fc6554f6c7577b73fd4"
 dependencies = [
  "bs58",
  "proc-macro2",
@@ -6194,9 +6206,9 @@ checksum = "468aa43b7edb1f9b7b7b686d5c3aeb6630dc1708e86e31343499dd5c4d775183"
 
 [[package]]
 name = "solana-send-transaction-service"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "3e0053a052abc9ce4a7a2bcec61a9edb798c2aaf38b0e6dd308039aa0f0bb1d1"
+checksum = "d9d89f6816738de42436b6cb08798b8023a5106effc4f0c37ddca9ee8b10fe32"
 dependencies = [
  "crossbeam-channel",
  "log",
@@ -6210,9 +6222,9 @@ dependencies = [
 
 [[package]]
 name = "solana-stake-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "419cdb62addd653c76d3d3ef3ce9e6cb4d491c2d6f59680afb0d108b34d59260"
+checksum = "9e46cec174bb995bb71ea3c875d17662d4c34f6e6ab853a08e9c3ddc06f0927c"
 dependencies = [
  "bincode",
  "log",
@@ -6225,9 +6237,9 @@ dependencies = [
 
 [[package]]
 name = "solana-storage-bigtable"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "121321650f0050302f45ea856b5c75bf4fa8be613346e541ff6ceb23a7319461"
+checksum = "404c06ae453b4543376bc2a77a70d66b880d1318ee142d13dcd546e902e7acf1"
 dependencies = [
  "backoff",
  "bincode",
@@ -6259,9 +6271,9 @@ dependencies = [
 
 [[package]]
 name = "solana-storage-proto"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "46401851ff4116763ee2f5707eb363330f22e587fa160497c21500510b3a6c20"
+checksum = "26e26b94a4b4cea9286c1917bc9c64af9df960f0c5fd3233ce97df31b995bc25"
 dependencies = [
  "bincode",
  "bs58",
@@ -6276,9 +6288,9 @@ dependencies = [
 
 [[package]]
 name = "solana-streamer"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "9e3371a51b49a2d7bd55ea345c5c67122282e34b2ed744e7062e4acf94075e75"
+checksum = "4219f40db983a290ea75212b9e47013a47715eb224ca18e05bd094d86baefc37"
 dependencies = [
  "async-channel",
  "bytes",
@@ -6308,9 +6320,9 @@ dependencies = [
 
 [[package]]
 name = "solana-system-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "c0f1b312f1f3638e76b1150f4a019f310711cfe5387364821db61ef1ad215e2e"
+checksum = "3b9d710ecc45f8bb0219e46237df572efdf63fa2a1016d0a62e3b4a74f471863"
 dependencies = [
  "bincode",
  "log",
@@ -6322,11 +6334,11 @@ dependencies = [
 
 [[package]]
 name = "solana-test-validator"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "a8a34020858231aea05c5575949592d4d0a69f26c6ade2fbff2be8160ba61d82"
+checksum = "ae267137ac10cae6770775dfb19d1e1f4275279a83c7ab520f627541c4983dfd"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "crossbeam-channel",
  "log",
@@ -6354,9 +6366,9 @@ dependencies = [
 
 [[package]]
 name = "solana-thin-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "7b524e0bdae28ef6d3890a6e046a9492e19347e2497c6418eb5dc2e0f25ee7bf"
+checksum = "7f8d9eb19550425cbb6a96fdea18171a2e44529414fe09f8cf7a238a78fd9a37"
 dependencies = [
  "bincode",
  "log",
@@ -6369,9 +6381,9 @@ dependencies = [
 
 [[package]]
 name = "solana-tpu-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ec71f775779f1be75e2a341d4de2b0732dc314904c0b7a6c73abcbbe456032d1"
+checksum = "795d4d7e76f87640d7a3d1ab6ebc2376d9b9d76a7c2664653628dc6f4bc64ecc"
 dependencies = [
  "async-trait",
  "bincode",
@@ -6393,12 +6405,12 @@ dependencies = [
 
 [[package]]
 name = "solana-transaction-status"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "4a0b68e5d2103184b34ed047e7424c564459fcf0ddad1e6b74eaefd44f341626"
+checksum = "176b554ca42e29abd21d56f31c01599f9b334e65b22911bcdb691b9b02706636"
 dependencies = [
  "Inflector",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "borsh 0.10.3",
  "bs58",
@@ -6418,9 +6430,9 @@ dependencies = [
 
 [[package]]
 name = "solana-turbine"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bafffda6f035657ff09527d94eda24f396af99ea9e5b806fa7f72f9f04777ff9"
+checksum = "74801a5e31efcb4bb94259ed17db720933c3cec71f0e5653d6d9174d4307d70d"
 dependencies = [
  "bincode",
  "bytes",
@@ -6455,9 +6467,9 @@ dependencies = [
 
 [[package]]
 name = "solana-udp-client"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "58f7f914502ccf4b4336bab86b6ce104344489917001c46cbb9c3367d18635f4"
+checksum = "0a60895d452a9e2de1115d4ebaef537fb608b9a6e206cb7b24c82881a35348e3"
 dependencies = [
  "async-trait",
  "solana-connection-cache",
@@ -6470,9 +6482,9 @@ dependencies = [
 
 [[package]]
 name = "solana-version"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "bc97ed56e360a52a800126d2bfb7cf1f2bf3b30fc3d8f15988f4560ddba58c2a"
+checksum = "572a7a0f49ee43473c2f235432f98b2594c3a4e8cc9a1befd7a085be8192f5bd"
 dependencies = [
  "log",
  "rustc_version",
@@ -6486,9 +6498,9 @@ dependencies = [
 
 [[package]]
 name = "solana-vote"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "30cce9071d89159a0c6bf1e66a481ae948b0e13d43e5f0147d6dd30fea0998e7"
+checksum = "8d11054cc7d40221e3b80aded18b4436c57d0ae8a586aff88e32e22099e99298"
 dependencies = [
  "crossbeam-channel",
  "itertools",
@@ -6505,9 +6517,9 @@ dependencies = [
 
 [[package]]
 name = "solana-vote-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1a04868ec04dd8fac5ed4100a11b9ac616e0f5230a6678118bac685b85fecc1e"
+checksum = "89cffa52ab296ccc95ced7ae7875534cb4fd1cbb0bd9b8ad20e7ec55f15bcd5d"
 dependencies = [
  "bincode",
  "log",
@@ -6527,9 +6539,9 @@ dependencies = [
 
 [[package]]
 name = "solana-zk-token-proof-program"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "53c122ae88f9aac95fb387c16c7cec90ce9963d9db17c667dd654ae344f58bad"
+checksum = "83089a1e9b5ceef00ac0d399922604b12e925667fc6c3f0024398bb805a4ae27"
 dependencies = [
  "bytemuck",
  "num-derive 0.3.3",
@@ -6541,12 +6553,12 @@ dependencies = [
 
 [[package]]
 name = "solana-zk-token-sdk"
-version = "1.17.6"
+version = "1.17.13"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "ac110323e0eaf7b2d1764ab35efbb8c17d40fbcfaecbd0829c025e357a6318f6"
+checksum = "a3e8e2f6c0d78bc9eb07efc1fcd034dd0fcc508af8809343ac861096aab84876"
 dependencies = [
  "aes-gcm-siv",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "bytemuck",
  "byteorder",
@@ -6841,7 +6853,7 @@ version = "3.1.1"
 dependencies = [
  "arrayref",
  "assert_matches",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bincode",
  "borsh 0.10.3",
  "num-derive 0.4.1",
@@ -7035,7 +7047,7 @@ dependencies = [
 name = "spl-pod"
 version = "0.1.0"
 dependencies = [
- "base64 0.21.6",
+ "base64 0.21.7",
  "borsh 0.10.3",
  "bytemuck",
  "serde",
@@ -7332,7 +7344,7 @@ name = "spl-token-2022"
 version = "1.0.0"
 dependencies = [
  "arrayref",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bytemuck",
  "lazy_static",
  "num-derive 0.4.1",
@@ -7389,7 +7401,7 @@ name = "spl-token-cli"
 version = "3.3.0"
 dependencies = [
  "assert_cmd",
- "base64 0.21.6",
+ "base64 0.21.7",
  "clap 2.34.0",
  "console",
  "futures 0.3.30",
@@ -8327,7 +8339,7 @@ dependencies = [
  "async-stream",
  "async-trait",
  "axum",
- "base64 0.21.6",
+ "base64 0.21.7",
  "bytes",
  "futures-core",
  "futures-util",
@@ -8396,11 +8408,10 @@ checksum = "b6bc1c9ce2b5135ac7f93c72918fc37feb872bdc6a5533a8b85eb4b86bfdae52"
 
 [[package]]
 name = "tracing"
-version = "0.1.29"
+version = "0.1.40"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "375a639232caf30edfc78e8d89b2d4c375515393e7af7e16f01cd96917fb2105"
+checksum = "c3523ab5a71916ccf420eebdf5521fcef02141234bbc0b8a49f2fdc4544364ef"
 dependencies = [
- "cfg-if 1.0.0",
  "log",
  "pin-project-lite",
  "tracing-attributes",
@@ -8409,22 +8420,23 @@ dependencies = [
 
 [[package]]
 name = "tracing-attributes"
-version = "0.1.18"
+version = "0.1.27"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "f4f480b8f81512e825f337ad51e94c1eb5d3bbdf2b363dcd01e2b19a9ffe3f8e"
+checksum = "34704c8d6ebcbc939824180af020566b01a7c01f80641264eba0999f6c2b6be7"
 dependencies = [
  "proc-macro2",
  "quote",
- "syn 1.0.107",
+ "syn 2.0.46",
 ]
 
 [[package]]
 name = "tracing-core"
-version = "0.1.21"
+version = "0.1.32"
 source = "registry+https://github.com/rust-lang/crates.io-index"
-checksum = "1f4ed65637b8390770814083d20756f87bfa2c21bf2f110babdc5438351746e4"
+checksum = "c06d3da6113f116aaee68e4d601191614c9053067f9ab7f6edbcb161237daa54"
 dependencies = [
- "lazy_static",
+ "once_cell",
+ "valuable",
 ]
 
 [[package]]
@@ -8637,6 +8649,12 @@ version = "0.2.1"
 source = "registry+https://github.com/rust-lang/crates.io-index"
 checksum = "711b9620af191e0cdc7468a8d14e709c3dcdb115b36f838e601583af800a370a"
 
+[[package]]
+name = "valuable"
+version = "0.1.0"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "830b7e5d4d90034032940e4ace0d9a9a057e7a45cd94e6c007832e39edb82f6d"
+
 [[package]]
 name = "vcpkg"
 version = "0.2.15"
@@ -9068,6 +9086,26 @@ dependencies = [
  "time",
 ]
 
+[[package]]
+name = "zerocopy"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "74d4d3961e53fa4c9a25a8637fc2bfaf2595b3d3ae34875568a5cf64787716be"
+dependencies = [
+ "zerocopy-derive",
+]
+
+[[package]]
+name = "zerocopy-derive"
+version = "0.7.32"
+source = "registry+https://github.com/rust-lang/crates.io-index"
+checksum = "9ce1b18ccd8e73a9321186f97e46f9f04b778851177567b1975109d26a08d2a6"
+dependencies = [
+ "proc-macro2",
+ "quote",
+ "syn 2.0.46",
+]
+
 [[package]]
 name = "zeroize"
 version = "1.3.0"
diff --git a/README.md b/README.md
index 4bf7aa0d7..a2b68fe4d 100644
--- a/README.md
+++ b/README.md
@@ -46,7 +46,7 @@ Only a subset of programs within the Solana Program Library repo are audited. Cu
 | [stake-pool](https://github.com/solana-labs/solana-program-library/tree/master/stake-pool/program) | [2023-11-14](https://github.com/solana-labs/security-audits/blob/master/spl/NeodymeStakePoolAudit-2023-11-14.pdf) | [6ed7254](https://github.com/solana-labs/solana-program-library/commit/6ed7254d1a578ffbc2b091d28cb92b25e7cc511d) |
 | [account-compression](https://github.com/solana-labs/solana-program-library/tree/master/account-compression/programs/account-compression) | [2022-12-05](https://github.com/solana-labs/security-audits/blob/master/spl/OtterSecAccountCompressionAudit-2022-12-03.pdf) | [6e81794](https://github.com/solana-labs/solana-program-library/commit/6e81794) |
 | [shared-memory](https://github.com/solana-labs/solana-program-library/tree/master/shared-memory/program) | [2021-02-25](https://github.com/solana-labs/security-audits/blob/master/spl/KudelskiTokenSwapSharedMemAudit-2021-02-25.pdf) | [b40e0dd](https://github.com/solana-labs/solana-program-library/commit/b40e0dd3fd6c0e509dc1e8dd3da0a6d609035bbd) |
-| [single-pool](https://github.com/solana-labs/solana-program-library/tree/master/single-pool/program) | [2023-08-08](https://github.com/solana-labs/security-audits/blob/master/spl/NeodymeSinglePoolAudit-2023-08-08.pdf) | [735d729](https://github.com/solana-labs/solana-program-library/commit/735d7292e35d35101750a4452d2647bdbf848e8b) |
+| [single-pool](https://github.com/solana-labs/solana-program-library/tree/master/single-pool/program) | [2024-01-02](https://github.com/solana-labs/security-audits/blob/master/spl/ZellicSinglePoolAudit-2024-01-02.pdf) | [ef44df9](https://github.com/solana-labs/solana-program-library/commit/ef44df985e76a697ee9a8aabb3a223610e4cf1dc) |
 
 All other programs may be updated from time to time. These programs are not
 audited, so fork and deploy them at your own risk. Here is the full list of
diff --git a/account-compression/programs/noop/Cargo.toml b/account-compression/programs/noop/Cargo.toml
index 6ba5dc9e6..545ac6c7c 100644
--- a/account-compression/programs/noop/Cargo.toml
+++ b/account-compression/programs/noop/Cargo.toml
@@ -16,4 +16,4 @@ cpi = ["no-entrypoint"]
 default = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
diff --git a/account-compression/sdk/package.json b/account-compression/sdk/package.json
index aa7a3e437..d7b64106f 100644
--- a/account-compression/sdk/package.json
+++ b/account-compression/sdk/package.json
@@ -61,7 +61,7 @@
     "typescript-collections": "^1.3.3"
   },
   "peerDependencies": {
-    "@solana/web3.js": "^1.89.0"
+    "@solana/web3.js": "^1.89.1"
   },
   "devDependencies": {
     "@metaplex-foundation/rustbin": "^0.3.5",
@@ -72,15 +72,15 @@
     "@types/bn.js": "^5.1.0",
     "@types/chai": "^4.3.0",
     "@types/jest": "^29.5.11",
-    "@types/node-fetch": "^2.6.10",
-    "@typescript-eslint/eslint-plugin": "^6.18.1",
-    "@typescript-eslint/parser": "^6.18.1",
+    "@types/node-fetch": "^2.6.11",
+    "@typescript-eslint/eslint-plugin": "^6.19.0",
+    "@typescript-eslint/parser": "^6.19.0",
     "chai": "^4.3.4",
     "eslint": "^8.56.0",
     "eslint-config-prettier": "^9.1.0",
     "eslint-config-turbo": "^1.11.3",
     "eslint-plugin-import": "^2.29.1",
-    "eslint-plugin-jest": "^27.6.2",
+    "eslint-plugin-jest": "^27.6.3",
     "eslint-plugin-mocha": "^10.2.0",
     "eslint-plugin-prettier": "^5.1.3",
     "eslint-plugin-simple-import-sort": "^10.0.0",
diff --git a/account-compression/sdk/src/accounts/ConcurrentMerkleTreeAccount.ts b/account-compression/sdk/src/accounts/ConcurrentMerkleTreeAccount.ts
index d43f53c4b..2e602599b 100644
--- a/account-compression/sdk/src/accounts/ConcurrentMerkleTreeAccount.ts
+++ b/account-compression/sdk/src/accounts/ConcurrentMerkleTreeAccount.ts
@@ -30,7 +30,7 @@ export class ConcurrentMerkleTreeAccount {
     static async fromAccountAddress(
         connection: Connection,
         publicKey: PublicKey,
-        commitmentOrConfig?: Commitment | GetAccountInfoConfig
+        commitmentOrConfig?: Commitment | GetAccountInfoConfig,
     ): Promise<ConcurrentMerkleTreeAccount> {
         const account = await connection.getAccountInfo(publicKey, commitmentOrConfig);
         if (!account) {
@@ -149,7 +149,7 @@ function deserializeConcurrentMerkleTree(buffer: Buffer): ConcurrentMerkleTreeAc
     const header = versionedHeader.header.fields[0];
     const [tree, offsetIncr2] = concurrentMerkleTreeBeetFactory(header.maxDepth, header.maxBufferSize).deserialize(
         buffer,
-        offset
+        offset,
     );
     offset = offsetIncr2;
 
@@ -181,7 +181,7 @@ export function getConcurrentMerkleTreeAccountSize(
     maxDepth: number,
     maxBufferSize: number,
     canopyDepth?: number,
-    headerVersion = 'V1'
+    headerVersion = 'V1',
 ): number {
     if (headerVersion != 'V1') {
         throw Error('Unsupported header version');
diff --git a/account-compression/sdk/src/generated/errors/index.ts b/account-compression/sdk/src/generated/errors/index.ts
index 15cea66af..4600510da 100644
--- a/account-compression/sdk/src/generated/errors/index.ts
+++ b/account-compression/sdk/src/generated/errors/index.ts
@@ -91,7 +91,7 @@ export class ConcurrentMerkleTreeConstantsErrorError extends Error {
 createErrorFromCodeLookup.set(0x1773, () => new ConcurrentMerkleTreeConstantsErrorError());
 createErrorFromNameLookup.set(
     'ConcurrentMerkleTreeConstantsError',
-    () => new ConcurrentMerkleTreeConstantsErrorError()
+    () => new ConcurrentMerkleTreeConstantsErrorError(),
 );
 
 /**
diff --git a/account-compression/sdk/src/generated/instructions/append.ts b/account-compression/sdk/src/generated/instructions/append.ts
index 56260a2ab..902dbe58a 100644
--- a/account-compression/sdk/src/generated/instructions/append.ts
+++ b/account-compression/sdk/src/generated/instructions/append.ts
@@ -30,7 +30,7 @@ export const appendStruct = new beet.BeetArgsStruct<
         ['instructionDiscriminator', beet.uniformFixedSizeArray(beet.u8, 8)],
         ['leaf', beet.uniformFixedSizeArray(beet.u8, 32)],
     ],
-    'AppendInstructionArgs'
+    'AppendInstructionArgs',
 );
 /**
  * Accounts required by the _append_ instruction
@@ -64,7 +64,7 @@ export const appendInstructionDiscriminator = [149, 120, 18, 222, 236, 225, 88,
 export function createAppendInstruction(
     accounts: AppendInstructionAccounts,
     args: AppendInstructionArgs,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = appendStruct.serialize({
         instructionDiscriminator: appendInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts b/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts
index 63aeeca4a..f2e446f34 100644
--- a/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts
+++ b/account-compression/sdk/src/generated/instructions/closeEmptyTree.ts
@@ -45,7 +45,7 @@ export const closeEmptyTreeInstructionDiscriminator = [50, 14, 219, 107, 78, 103
  */
 export function createCloseEmptyTreeInstruction(
     accounts: CloseEmptyTreeInstructionAccounts,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = closeEmptyTreeStruct.serialize({
         instructionDiscriminator: closeEmptyTreeInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts b/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts
index 610cde2ef..c8119f169 100644
--- a/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts
+++ b/account-compression/sdk/src/generated/instructions/initEmptyMerkleTree.ts
@@ -32,7 +32,7 @@ export const initEmptyMerkleTreeStruct = new beet.BeetArgsStruct<
         ['maxDepth', beet.u32],
         ['maxBufferSize', beet.u32],
     ],
-    'InitEmptyMerkleTreeInstructionArgs'
+    'InitEmptyMerkleTreeInstructionArgs',
 );
 /**
  * Accounts required by the _initEmptyMerkleTree_ instruction
@@ -66,7 +66,7 @@ export const initEmptyMerkleTreeInstructionDiscriminator = [191, 11, 119, 7, 180
 export function createInitEmptyMerkleTreeInstruction(
     accounts: InitEmptyMerkleTreeInstructionAccounts,
     args: InitEmptyMerkleTreeInstructionArgs,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = initEmptyMerkleTreeStruct.serialize({
         instructionDiscriminator: initEmptyMerkleTreeInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/instructions/insertOrAppend.ts b/account-compression/sdk/src/generated/instructions/insertOrAppend.ts
index d3ed9f438..dcbf7825b 100644
--- a/account-compression/sdk/src/generated/instructions/insertOrAppend.ts
+++ b/account-compression/sdk/src/generated/instructions/insertOrAppend.ts
@@ -34,7 +34,7 @@ export const insertOrAppendStruct = new beet.BeetArgsStruct<
         ['leaf', beet.uniformFixedSizeArray(beet.u8, 32)],
         ['index', beet.u32],
     ],
-    'InsertOrAppendInstructionArgs'
+    'InsertOrAppendInstructionArgs',
 );
 /**
  * Accounts required by the _insertOrAppend_ instruction
@@ -68,7 +68,7 @@ export const insertOrAppendInstructionDiscriminator = [6, 42, 50, 190, 51, 109,
 export function createInsertOrAppendInstruction(
     accounts: InsertOrAppendInstructionAccounts,
     args: InsertOrAppendInstructionArgs,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = insertOrAppendStruct.serialize({
         instructionDiscriminator: insertOrAppendInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/instructions/replaceLeaf.ts b/account-compression/sdk/src/generated/instructions/replaceLeaf.ts
index 513d0d618..3652f9b52 100644
--- a/account-compression/sdk/src/generated/instructions/replaceLeaf.ts
+++ b/account-compression/sdk/src/generated/instructions/replaceLeaf.ts
@@ -36,7 +36,7 @@ export const replaceLeafStruct = new beet.BeetArgsStruct<
         ['newLeaf', beet.uniformFixedSizeArray(beet.u8, 32)],
         ['index', beet.u32],
     ],
-    'ReplaceLeafInstructionArgs'
+    'ReplaceLeafInstructionArgs',
 );
 /**
  * Accounts required by the _replaceLeaf_ instruction
@@ -70,7 +70,7 @@ export const replaceLeafInstructionDiscriminator = [204, 165, 76, 100, 73, 147,
 export function createReplaceLeafInstruction(
     accounts: ReplaceLeafInstructionAccounts,
     args: ReplaceLeafInstructionArgs,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = replaceLeafStruct.serialize({
         instructionDiscriminator: replaceLeafInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/instructions/transferAuthority.ts b/account-compression/sdk/src/generated/instructions/transferAuthority.ts
index c26457c28..be9d16164 100644
--- a/account-compression/sdk/src/generated/instructions/transferAuthority.ts
+++ b/account-compression/sdk/src/generated/instructions/transferAuthority.ts
@@ -31,7 +31,7 @@ export const transferAuthorityStruct = new beet.BeetArgsStruct<
         ['instructionDiscriminator', beet.uniformFixedSizeArray(beet.u8, 8)],
         ['newAuthority', beetSolana.publicKey],
     ],
-    'TransferAuthorityInstructionArgs'
+    'TransferAuthorityInstructionArgs',
 );
 /**
  * Accounts required by the _transferAuthority_ instruction
@@ -63,7 +63,7 @@ export const transferAuthorityInstructionDiscriminator = [48, 169, 76, 72, 229,
 export function createTransferAuthorityInstruction(
     accounts: TransferAuthorityInstructionAccounts,
     args: TransferAuthorityInstructionArgs,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = transferAuthorityStruct.serialize({
         instructionDiscriminator: transferAuthorityInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/instructions/verifyLeaf.ts b/account-compression/sdk/src/generated/instructions/verifyLeaf.ts
index 7c85532b5..030ce5d3b 100644
--- a/account-compression/sdk/src/generated/instructions/verifyLeaf.ts
+++ b/account-compression/sdk/src/generated/instructions/verifyLeaf.ts
@@ -34,7 +34,7 @@ export const verifyLeafStruct = new beet.BeetArgsStruct<
         ['leaf', beet.uniformFixedSizeArray(beet.u8, 32)],
         ['index', beet.u32],
     ],
-    'VerifyLeafInstructionArgs'
+    'VerifyLeafInstructionArgs',
 );
 /**
  * Accounts required by the _verifyLeaf_ instruction
@@ -64,7 +64,7 @@ export const verifyLeafInstructionDiscriminator = [124, 220, 22, 223, 104, 10, 2
 export function createVerifyLeafInstruction(
     accounts: VerifyLeafInstructionAccounts,
     args: VerifyLeafInstructionArgs,
-    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK')
+    programId = new web3.PublicKey('cmtDvXumGCrqC1Age74AVPhSRVXJMd8PJS91L8KbNCK'),
 ) {
     const [data] = verifyLeafStruct.serialize({
         instructionDiscriminator: verifyLeafInstructionDiscriminator,
diff --git a/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts b/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts
index d3910b41e..00d2504a5 100644
--- a/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts
+++ b/account-compression/sdk/src/generated/types/AccountCompressionEvent.ts
@@ -37,10 +37,10 @@ export type AccountCompressionEventRecord = {
 export type AccountCompressionEvent = beet.DataEnumKeyAsKind<AccountCompressionEventRecord>;
 
 export const isAccountCompressionEventChangeLog = (
-    x: AccountCompressionEvent
+    x: AccountCompressionEvent,
 ): x is AccountCompressionEvent & { __kind: 'ChangeLog' } => x.__kind === 'ChangeLog';
 export const isAccountCompressionEventApplicationData = (
-    x: AccountCompressionEvent
+    x: AccountCompressionEvent,
 ): x is AccountCompressionEvent & { __kind: 'ApplicationData' } => x.__kind === 'ApplicationData';
 
 /**
@@ -52,14 +52,14 @@ export const accountCompressionEventBeet = beet.dataEnum<AccountCompressionEvent
         'ChangeLog',
         new beet.FixableBeetArgsStruct<AccountCompressionEventRecord['ChangeLog']>(
             [['fields', beet.tuple([changeLogEventBeet])]],
-            'AccountCompressionEventRecord["ChangeLog"]'
+            'AccountCompressionEventRecord["ChangeLog"]',
         ),
     ],
     [
         'ApplicationData',
         new beet.FixableBeetArgsStruct<AccountCompressionEventRecord['ApplicationData']>(
             [['fields', beet.tuple([applicationDataEventBeet])]],
-            'AccountCompressionEventRecord["ApplicationData"]'
+            'AccountCompressionEventRecord["ApplicationData"]',
         ),
     ],
 ]) as beet.FixableBeet<AccountCompressionEvent>;
diff --git a/account-compression/sdk/src/generated/types/ApplicationDataEvent.ts b/account-compression/sdk/src/generated/types/ApplicationDataEvent.ts
index 4721ffb25..eef6c13b3 100644
--- a/account-compression/sdk/src/generated/types/ApplicationDataEvent.ts
+++ b/account-compression/sdk/src/generated/types/ApplicationDataEvent.ts
@@ -46,7 +46,7 @@ export const applicationDataEventBeet = beet.dataEnum<ApplicationDataEventRecord
         'V1',
         new beet.FixableBeetArgsStruct<ApplicationDataEventRecord['V1']>(
             [['fields', beet.tuple([applicationDataEventV1Beet])]],
-            'ApplicationDataEventRecord["V1"]'
+            'ApplicationDataEventRecord["V1"]',
         ),
     ],
 ]) as beet.FixableBeet<ApplicationDataEvent>;
diff --git a/account-compression/sdk/src/generated/types/ApplicationDataEventV1.ts b/account-compression/sdk/src/generated/types/ApplicationDataEventV1.ts
index 7f1aef1ee..b581369ff 100644
--- a/account-compression/sdk/src/generated/types/ApplicationDataEventV1.ts
+++ b/account-compression/sdk/src/generated/types/ApplicationDataEventV1.ts
@@ -16,5 +16,5 @@ export type ApplicationDataEventV1 = {
  */
 export const applicationDataEventV1Beet = new beet.FixableBeetArgsStruct<ApplicationDataEventV1>(
     [['applicationData', beet.bytes]],
-    'ApplicationDataEventV1'
+    'ApplicationDataEventV1',
 );
diff --git a/account-compression/sdk/src/generated/types/ChangeLogEvent.ts b/account-compression/sdk/src/generated/types/ChangeLogEvent.ts
index 9250577b2..ffd34de77 100644
--- a/account-compression/sdk/src/generated/types/ChangeLogEvent.ts
+++ b/account-compression/sdk/src/generated/types/ChangeLogEvent.ts
@@ -45,7 +45,7 @@ export const changeLogEventBeet = beet.dataEnum<ChangeLogEventRecord>([
         'V1',
         new beet.FixableBeetArgsStruct<ChangeLogEventRecord['V1']>(
             [['fields', beet.tuple([changeLogEventV1Beet])]],
-            'ChangeLogEventRecord["V1"]'
+            'ChangeLogEventRecord["V1"]',
         ),
     ],
 ]) as beet.FixableBeet<ChangeLogEvent>;
diff --git a/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts b/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts
index 8c242d3f7..797e60b7e 100644
--- a/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts
+++ b/account-compression/sdk/src/generated/types/ChangeLogEventV1.ts
@@ -28,5 +28,5 @@ export const changeLogEventV1Beet = new beet.FixableBeetArgsStruct<ChangeLogEven
         ['seq', beet.u64],
         ['index', beet.u32],
     ],
-    'ChangeLogEventV1'
+    'ChangeLogEventV1',
 );
diff --git a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeader.ts b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeader.ts
index a17460b12..4ab090445 100644
--- a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeader.ts
+++ b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeader.ts
@@ -23,5 +23,5 @@ export const concurrentMerkleTreeHeaderBeet = new beet.FixableBeetArgsStruct<Con
         ['accountType', compressionAccountTypeBeet],
         ['header', concurrentMerkleTreeHeaderDataBeet],
     ],
-    'ConcurrentMerkleTreeHeader'
+    'ConcurrentMerkleTreeHeader',
 );
diff --git a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderData.ts b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderData.ts
index ac24b84d1..f49f8f389 100644
--- a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderData.ts
+++ b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderData.ts
@@ -38,7 +38,7 @@ export type ConcurrentMerkleTreeHeaderDataRecord = {
 export type ConcurrentMerkleTreeHeaderData = beet.DataEnumKeyAsKind<ConcurrentMerkleTreeHeaderDataRecord>;
 
 export const isConcurrentMerkleTreeHeaderDataV1 = (
-    x: ConcurrentMerkleTreeHeaderData
+    x: ConcurrentMerkleTreeHeaderData,
 ): x is ConcurrentMerkleTreeHeaderData & { __kind: 'V1' } => x.__kind === 'V1';
 
 /**
@@ -50,7 +50,7 @@ export const concurrentMerkleTreeHeaderDataBeet = beet.dataEnum<ConcurrentMerkle
         'V1',
         new beet.BeetArgsStruct<ConcurrentMerkleTreeHeaderDataRecord['V1']>(
             [['fields', beet.fixedSizeTuple([concurrentMerkleTreeHeaderDataV1Beet])]],
-            'ConcurrentMerkleTreeHeaderDataRecord["V1"]'
+            'ConcurrentMerkleTreeHeaderDataRecord["V1"]',
         ),
     ],
 ]) as beet.FixableBeet<ConcurrentMerkleTreeHeaderData>;
diff --git a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts
index e75cbc317..4ad4b8fd5 100644
--- a/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts
+++ b/account-compression/sdk/src/generated/types/ConcurrentMerkleTreeHeaderDataV1.ts
@@ -28,5 +28,5 @@ export const concurrentMerkleTreeHeaderDataV1Beet = new beet.BeetArgsStruct<Conc
         ['creationSlot', beet.u64],
         ['padding', beet.uniformFixedSizeArray(beet.u8, 6)],
     ],
-    'ConcurrentMerkleTreeHeaderDataV1'
+    'ConcurrentMerkleTreeHeaderDataV1',
 );
diff --git a/account-compression/sdk/src/generated/types/PathNode.ts b/account-compression/sdk/src/generated/types/PathNode.ts
index 72eb77a2f..cd3fab4c6 100644
--- a/account-compression/sdk/src/generated/types/PathNode.ts
+++ b/account-compression/sdk/src/generated/types/PathNode.ts
@@ -20,5 +20,5 @@ export const pathNodeBeet = new beet.BeetArgsStruct<PathNode>(
         ['node', beet.uniformFixedSizeArray(beet.u8, 32)],
         ['index', beet.u32],
     ],
-    'PathNode'
+    'PathNode',
 );
diff --git a/account-compression/sdk/src/instructions/index.ts b/account-compression/sdk/src/instructions/index.ts
index a2ccb9dc7..6e16e1ccc 100644
--- a/account-compression/sdk/src/instructions/index.ts
+++ b/account-compression/sdk/src/instructions/index.ts
@@ -25,7 +25,7 @@ export function addProof(instruction: TransactionInstruction, nodeProof: Buffer[
                 isWritable: false,
                 pubkey: new PublicKey(node),
             };
-        })
+        }),
     );
     return instruction;
 }
@@ -41,7 +41,7 @@ export function addProof(instruction: TransactionInstruction, nodeProof: Buffer[
 export function createInitEmptyMerkleTreeIx(
     merkleTree: PublicKey,
     authority: PublicKey,
-    depthSizePair: ValidDepthSizePair
+    depthSizePair: ValidDepthSizePair,
 ): TransactionInstruction {
     return createInitEmptyMerkleTreeInstruction(
         {
@@ -49,7 +49,7 @@ export function createInitEmptyMerkleTreeIx(
             merkleTree,
             noop: SPL_NOOP_PROGRAM_ID,
         },
-        depthSizePair
+        depthSizePair,
     );
 }
 
@@ -65,7 +65,7 @@ export function createReplaceIx(
     merkleTree: PublicKey,
     authority: PublicKey,
     newLeaf: Buffer,
-    proof: MerkleTreeProof
+    proof: MerkleTreeProof,
 ): TransactionInstruction {
     return addProof(
         createReplaceLeafInstruction(
@@ -79,9 +79,9 @@ export function createReplaceIx(
                 newLeaf: Array.from(newLeaf),
                 previousLeaf: Array.from(proof.leaf),
                 root: Array.from(proof.root),
-            }
+            },
         ),
-        proof.proof
+        proof.proof,
     );
 }
 
@@ -95,7 +95,7 @@ export function createReplaceIx(
 export function createAppendIx(
     merkleTree: PublicKey,
     authority: PublicKey,
-    newLeaf: Buffer | ArrayLike<number>
+    newLeaf: Buffer | ArrayLike<number>,
 ): TransactionInstruction {
     return createAppendInstruction(
         {
@@ -105,7 +105,7 @@ export function createAppendIx(
         },
         {
             leaf: Array.from(newLeaf),
-        }
+        },
     );
 }
 
@@ -119,7 +119,7 @@ export function createAppendIx(
 export function createTransferAuthorityIx(
     merkleTree: PublicKey,
     authority: PublicKey,
-    newAuthority: PublicKey
+    newAuthority: PublicKey,
 ): TransactionInstruction {
     return createTransferAuthorityInstruction(
         {
@@ -128,7 +128,7 @@ export function createTransferAuthorityIx(
         },
         {
             newAuthority,
-        }
+        },
     );
 }
 
@@ -148,9 +148,9 @@ export function createVerifyLeafIx(merkleTree: PublicKey, proof: MerkleTreeProof
                 index: proof.leafIndex,
                 leaf: Array.from(proof.leaf),
                 root: Array.from(proof.root),
-            }
+            },
         ),
-        proof.proof
+        proof.proof,
     );
 }
 
@@ -171,12 +171,12 @@ export async function createAllocTreeIx(
     merkleTree: PublicKey,
     payer: PublicKey,
     depthSizePair: ValidDepthSizePair,
-    canopyDepth: number
+    canopyDepth: number,
 ): Promise<TransactionInstruction> {
     const requiredSpace = getConcurrentMerkleTreeAccountSize(
         depthSizePair.maxDepth,
         depthSizePair.maxBufferSize,
-        canopyDepth ?? 0
+        canopyDepth ?? 0,
     );
     return SystemProgram.createAccount({
         fromPubkey: payer,
@@ -197,7 +197,7 @@ export async function createAllocTreeIx(
 export function createCloseEmptyTreeIx(
     merkleTree: PublicKey,
     authority: PublicKey,
-    recipient: PublicKey
+    recipient: PublicKey,
 ): TransactionInstruction {
     return createCloseEmptyTreeInstruction({
         authority,
diff --git a/account-compression/sdk/src/merkle-tree/index.ts b/account-compression/sdk/src/merkle-tree/index.ts
index fc95fd1a2..87f5237d0 100644
--- a/account-compression/sdk/src/merkle-tree/index.ts
+++ b/account-compression/sdk/src/merkle-tree/index.ts
@@ -272,7 +272,7 @@ function buildLeaves(leaves: Buffer[]): [Collections.Queue<TreeNode>, TreeNode[]
     leaves.forEach((buffer, index) => {
         if (buffer.length != LEAF_BUFFER_LENGTH) {
             throw Error(
-                `Provided leaf has length: ${buffer.length}, but we need all leaves to be length ${LEAF_BUFFER_LENGTH}`
+                `Provided leaf has length: ${buffer.length}, but we need all leaves to be length ${LEAF_BUFFER_LENGTH}`,
             );
         }
 
diff --git a/account-compression/sdk/src/types/Canopy.ts b/account-compression/sdk/src/types/Canopy.ts
index fcd4c7fde..ee7902f13 100644
--- a/account-compression/sdk/src/types/Canopy.ts
+++ b/account-compression/sdk/src/types/Canopy.ts
@@ -26,6 +26,6 @@ export type Canopy = {
 export const canopyBeetFactory = (canopyDepth: number) => {
     return new beet.BeetArgsStruct<Canopy>(
         [['canopyBytes', beet.uniformFixedSizeArray(beet.u8, Math.max(((1 << (canopyDepth + 1)) - 2) * 32, 0))]],
-        'Canopy'
+        'Canopy',
     );
 };
diff --git a/account-compression/sdk/src/types/ConcurrentMerkleTree.ts b/account-compression/sdk/src/types/ConcurrentMerkleTree.ts
index d29ab2584..ac621b448 100644
--- a/account-compression/sdk/src/types/ConcurrentMerkleTree.ts
+++ b/account-compression/sdk/src/types/ConcurrentMerkleTree.ts
@@ -23,7 +23,7 @@ const changeLogBeetFactory = (maxDepth: number) => {
             ['index', beet.u32],
             ['_padding', beet.u32],
         ],
-        'ChangeLog'
+        'ChangeLog',
     );
 };
 
@@ -55,6 +55,6 @@ export const concurrentMerkleTreeBeetFactory = (maxDepth: number, maxBufferSize:
             ['changeLogs', beet.uniformFixedSizeArray(changeLogBeetFactory(maxDepth), maxBufferSize)],
             ['rightMostPath', pathBeetFactory(maxDepth)],
         ],
-        'ConcurrentMerkleTree'
+        'ConcurrentMerkleTree',
     );
 };
diff --git a/account-compression/sdk/src/types/Path.ts b/account-compression/sdk/src/types/Path.ts
index 33c373695..eaf198c5f 100644
--- a/account-compression/sdk/src/types/Path.ts
+++ b/account-compression/sdk/src/types/Path.ts
@@ -28,6 +28,6 @@ export const pathBeetFactory = (maxDepth: number) => {
             ['index', beet.u32],
             ['_padding', beet.u32],
         ],
-        'Path'
+        'Path',
     );
 };
diff --git a/associated-token-account/program/Cargo.toml b/associated-token-account/program/Cargo.toml
index 7db6016d8..bab7c8370 100644
--- a/associated-token-account/program/Cargo.toml
+++ b/associated-token-account/program/Cargo.toml
@@ -16,7 +16,7 @@ assert_matches = "1.5.0"
 borsh = "0.10"
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
 thiserror = "1.0"
diff --git a/binary-option/program/Cargo.toml b/binary-option/program/Cargo.toml
index fd5ceca88..6da509517 100644
--- a/binary-option/program/Cargo.toml
+++ b/binary-option/program/Cargo.toml
@@ -9,7 +9,7 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 thiserror = "1.0"
 spl-token = {version = "4.0", path = "../../token/program", features = ["no-entrypoint"]}
 arrayref = "0.3.7"
diff --git a/binary-oracle-pair/program/Cargo.toml b/binary-oracle-pair/program/Cargo.toml
index 995c8b8f1..9f74978e6 100644
--- a/binary-oracle-pair/program/Cargo.toml
+++ b/binary-oracle-pair/program/Cargo.toml
@@ -13,15 +13,15 @@ test-sbf = []
 [dependencies]
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 thiserror = "1.0"
 uint = "0.9"
 borsh = "0.10"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/ci/solana-version.sh b/ci/solana-version.sh
index eb7aa333f..dbb7383cb 100755
--- a/ci/solana-version.sh
+++ b/ci/solana-version.sh
@@ -14,7 +14,7 @@
 if [[ -n $SOLANA_VERSION ]]; then
   solana_version="$SOLANA_VERSION"
 else
-  solana_version=v1.17.6
+  solana_version=v1.17.13
 fi
 
 export solana_version="$solana_version"
diff --git a/docs/src/single-pool.mdx b/docs/src/single-pool.mdx
index 449d30da3..be12aaa7b 100644
--- a/docs/src/single-pool.mdx
+++ b/docs/src/single-pool.mdx
@@ -28,8 +28,11 @@ The Single Pool Program's source is available on
 
 ## Security Audits
 
-The Single Pool Program has received two audits to ensure total safety of funds:
+The Single Pool Program has received three audits to ensure total safety of funds:
 
+* Zellic (2024-01-02)
+    - Review commit hash [`ef44df9`](https://github.com/solana-labs/solana-program-library/commit/ef44df985e76a697ee9a8aabb3a223610e4cf1dc)
+    - Final report https://github.com/solana-labs/security-audits/blob/master/spl/ZellicSinglePoolAudit-2024-01-02.pdf
 * Neodyme (2023-08-08)
     - Review commit hash [`735d729`](https://github.com/solana-labs/solana-program-library/commit/735d7292e35d35101750a4452d2647bdbf848e8b)
     - Final report https://github.com/solana-labs/security-audits/blob/master/spl/NeodymeSinglePoolAudit-2023-08-08.pdf
@@ -99,7 +102,7 @@ $ solana config set --keypair usb://ledger/
 the wallet to draw funds from (for instance, to fund new stake accounts),
 and the signing authority on accounts that require one.
 When token accounts are required, it defaults to the default keypair's associated account.
-All of these roles can be overriden by command-line flags.
+All of these roles can be overridden by command-line flags.
 
   </TabItem>
   <TabItem value="jsc" label="WEB3.JS CLASSIC">
diff --git a/docs/src/theme/SearchBar/algolia.css b/docs/src/theme/SearchBar/algolia.css
index 7bc622647..02946a904 100644
--- a/docs/src/theme/SearchBar/algolia.css
+++ b/docs/src/theme/SearchBar/algolia.css
@@ -17,7 +17,7 @@
 .algolia-docsearch-suggestion--highlight {
   color: #3a33d1;
 }
-/* Highligted search terms in the main category headers */
+/* Highlighted search terms in the main category headers */
 .algolia-docsearch-suggestion--category-header
   .algolia-docsearch-suggestion--highlight {
   background-color: #4d47d5;
diff --git a/docs/src/token-2022/extensions.mdx b/docs/src/token-2022/extensions.mdx
index 10db2ac17..864e2a476 100644
--- a/docs/src/token-2022/extensions.mdx
+++ b/docs/src/token-2022/extensions.mdx
@@ -1811,7 +1811,7 @@ Token-2022 implements all of the instructions from the
 [spl-token-group-interface](https://github.com/solana-labs/solana-program-library/tree/master/token-group/interface).
 
 The group extension works directly with the group-pointer extension.
-To intialize group configurations within a mint, you must add the group-pointer
+To initialize group configurations within a mint, you must add the group-pointer
 extension, pointed at the mint itself, during mint creation.
 
 The tools do this for you automatically.
@@ -1886,7 +1886,7 @@ group address and the member's number, can be stored directly in the mint
 itself.
 
 The member extension, like the group extension, works directly with the
-member-pointer extension. To intialize member configurations within a mint,
+member-pointer extension. To initialize member configurations within a mint,
 you must add the member-pointer extension, pointed at the mint itself, during
 mint creation.
 
diff --git a/docs/src/token.mdx b/docs/src/token.mdx
index 6222a5c5f..353f587b5 100644
--- a/docs/src/token.mdx
+++ b/docs/src/token.mdx
@@ -978,7 +978,7 @@ account.
   <TabItem value="jsx" label="JS">
 
 The main difference in using multisign is specifying the owner as the multisig key,
-and giving the list of signers when contructing a transaction. Normally you would
+and giving the list of signers when constructing a transaction. Normally you would
 provide the signer that has authority to run the transaction as the owner, but in
 the multisig case the owner would be the multisig key.
 
@@ -1239,7 +1239,7 @@ console.log(`Minted ${mintInfo.supply} token`);
 
 ### Example: Offline signing with multisig
 
-Sometimes online signing is not possible or desireable. Such is the case for example when signers are not in the same geographic location
+Sometimes online signing is not possible or desirable. Such is the case for example when signers are not in the same geographic location
 or when they use air-gapped devices not connected to the network.  In this case, we use offline signing which combines the
 previous examples of [multisig](#example-mint-with-multisig-authority) with [offline signing](https://docs.solana.com/offline-signing)
 and a [nonce account](https://docs.solana.com/offline-signing/durable-nonce).
diff --git a/examples/rust/cross-program-invocation/Cargo.toml b/examples/rust/cross-program-invocation/Cargo.toml
index 0e999220a..7c3c56800 100644
--- a/examples/rust/cross-program-invocation/Cargo.toml
+++ b/examples/rust/cross-program-invocation/Cargo.toml
@@ -13,11 +13,11 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/examples/rust/custom-heap/Cargo.toml b/examples/rust/custom-heap/Cargo.toml
index 69b729793..69cb9fcc5 100644
--- a/examples/rust/custom-heap/Cargo.toml
+++ b/examples/rust/custom-heap/Cargo.toml
@@ -15,11 +15,11 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/examples/rust/logging/Cargo.toml b/examples/rust/logging/Cargo.toml
index 557c1d7ed..e3cf0b844 100644
--- a/examples/rust/logging/Cargo.toml
+++ b/examples/rust/logging/Cargo.toml
@@ -13,11 +13,11 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/examples/rust/sysvar/Cargo.toml b/examples/rust/sysvar/Cargo.toml
index 7a77be0bc..ab68a5179 100644
--- a/examples/rust/sysvar/Cargo.toml
+++ b/examples/rust/sysvar/Cargo.toml
@@ -13,11 +13,11 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/examples/rust/transfer-lamports/Cargo.toml b/examples/rust/transfer-lamports/Cargo.toml
index 9ca262dd9..0303b531e 100644
--- a/examples/rust/transfer-lamports/Cargo.toml
+++ b/examples/rust/transfer-lamports/Cargo.toml
@@ -12,11 +12,11 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/examples/rust/transfer-tokens/Cargo.toml b/examples/rust/transfer-tokens/Cargo.toml
index e77de60ed..3717a3874 100644
--- a/examples/rust/transfer-tokens/Cargo.toml
+++ b/examples/rust/transfer-tokens/Cargo.toml
@@ -12,12 +12,12 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../../token/program", features = [ "no-entrypoint" ] }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/feature-gate/program/Cargo.toml b/feature-gate/program/Cargo.toml
index 5d7cfe13d..0e8ea6a4b 100644
--- a/feature-gate/program/Cargo.toml
+++ b/feature-gate/program/Cargo.toml
@@ -13,12 +13,12 @@ test-sbf = []
 
 [dependencies]
 num_enum = "0.7.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-program-error = { version = "0.3.0", path = "../../libraries/program-error" }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/feature-proposal/cli/Cargo.toml b/feature-proposal/cli/Cargo.toml
index c8bcbb52d..4e00b55b3 100644
--- a/feature-proposal/cli/Cargo.toml
+++ b/feature-proposal/cli/Cargo.toml
@@ -10,11 +10,11 @@ edition = "2021"
 [dependencies]
 chrono = "0.4.31"
 clap = "2.33.3"
-solana-clap-utils = "1.17.6"
-solana-cli-config = "1.17.6"
-solana-client = "1.17.6"
-solana-logger = "1.17.6"
-solana-sdk = "1.17.6"
+solana-clap-utils = "1.17.13"
+solana-cli-config = "1.17.13"
+solana-client = "1.17.13"
+solana-logger = "1.17.13"
+solana-sdk = "1.17.13"
 spl-feature-proposal = { version = "1.0", path = "../program", features = ["no-entrypoint"] }
 
 [[bin]]
diff --git a/feature-proposal/program/Cargo.toml b/feature-proposal/program/Cargo.toml
index 84f433da2..46d9ad7e5 100644
--- a/feature-proposal/program/Cargo.toml
+++ b/feature-proposal/program/Cargo.toml
@@ -13,12 +13,12 @@ test-sbf = []
 
 [dependencies]
 borsh = "0.10"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/governance/addin-api/Cargo.toml b/governance/addin-api/Cargo.toml
index a1b602836..0cd3c01e7 100644
--- a/governance/addin-api/Cargo.toml
+++ b/governance/addin-api/Cargo.toml
@@ -10,4 +10,4 @@ edition = "2021"
 [dependencies]
 borsh = "0.10"
 spl-governance-tools= { version = "0.1.3", path ="../tools"}
-solana-program = "1.17.6"
+solana-program = "1.17.13"
diff --git a/governance/addin-mock/program/Cargo.toml b/governance/addin-mock/program/Cargo.toml
index 7eab201a5..67590bee0 100644
--- a/governance/addin-mock/program/Cargo.toml
+++ b/governance/addin-mock/program/Cargo.toml
@@ -19,7 +19,7 @@ num-derive = "0.4"
 num-traits = "0.2"
 serde = "1.0.195"
 serde_derive = "1.0.103"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../../token/program", features = [ "no-entrypoint" ] }
 spl-governance-addin-api= { version = "0.1.3", path ="../../addin-api"}
 spl-governance-tools= { version = "0.1.3", path ="../../tools"}
@@ -29,8 +29,8 @@ thiserror = "1.0"
 [dev-dependencies]
 assert_matches = "1.5.0"
 proptest = "1.4"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-governance-test-sdk = { version = "0.1.3", path ="../../test-sdk"}
 
 
diff --git a/governance/chat/program/Cargo.toml b/governance/chat/program/Cargo.toml
index 730f9ff50..9aa80ef61 100644
--- a/governance/chat/program/Cargo.toml
+++ b/governance/chat/program/Cargo.toml
@@ -19,7 +19,7 @@ num-derive = "0.4"
 num-traits = "0.2"
 serde = "1.0.195"
 serde_derive = "1.0.103"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../../token/program", features = [
     "no-entrypoint",
 ] }
@@ -34,8 +34,8 @@ thiserror = "1.0"
 [dev-dependencies]
 assert_matches = "1.5.0"
 proptest = "1.4"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-governance-test-sdk = { version = "0.1.3", path = "../../test-sdk" }
 spl-governance-addin-mock = { version = "0.1.3", path = "../../addin-mock/program" }
 
diff --git a/governance/program/Cargo.toml b/governance/program/Cargo.toml
index 57074c874..ae451e9ff 100644
--- a/governance/program/Cargo.toml
+++ b/governance/program/Cargo.toml
@@ -19,7 +19,7 @@ num-derive = "0.4"
 num-traits = "0.2"
 serde = "1.0.195"
 serde_derive = "1.0.103"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 spl-governance-tools= { version = "0.1.3", path ="../tools"}
 spl-governance-addin-api= { version = "0.1.3", path ="../addin-api"}
@@ -29,8 +29,8 @@ thiserror = "1.0"
 assert_matches = "1.5.0"
 base64 = "0.21"
 proptest = "1.4"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-governance-test-sdk = { version = "0.1.3", path ="../test-sdk"}
 spl-governance-addin-mock = { version = "0.1.3", path ="../addin-mock/program"}
 
diff --git a/governance/tools/Cargo.toml b/governance/tools/Cargo.toml
index a25e1bc30..0c0c7ec36 100644
--- a/governance/tools/Cargo.toml
+++ b/governance/tools/Cargo.toml
@@ -15,6 +15,6 @@ num-derive = "0.4"
 num-traits = "0.2"
 serde = "1.0.195"
 serde_derive = "1.0.103"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 thiserror = "1.0"
diff --git a/instruction-padding/program/Cargo.toml b/instruction-padding/program/Cargo.toml
index 7039ec1f3..1565a66d6 100644
--- a/instruction-padding/program/Cargo.toml
+++ b/instruction-padding/program/Cargo.toml
@@ -14,11 +14,11 @@ test-sbf = []
 
 [dependencies]
 num_enum = "0.7.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/libraries/discriminator/Cargo.toml b/libraries/discriminator/Cargo.toml
index 0845f9af8..a9a48319e 100644
--- a/libraries/discriminator/Cargo.toml
+++ b/libraries/discriminator/Cargo.toml
@@ -13,7 +13,7 @@ borsh = ["dep:borsh"]
 [dependencies]
 borsh = { version = "0.10", optional = true }
 bytemuck = { version = "1.14.0", features = ["derive"] }
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-discriminator-derive = { version = "0.1.0", path = "./derive" }
 
 [lib]
diff --git a/libraries/math/Cargo.toml b/libraries/math/Cargo.toml
index f4768c0fd..a63c936c8 100644
--- a/libraries/math/Cargo.toml
+++ b/libraries/math/Cargo.toml
@@ -15,14 +15,14 @@ test-sbf = []
 borsh = "0.10"
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 thiserror = "1.0"
 uint = "0.9"
 
 [dev-dependencies]
 proptest = "1.4.0"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 libm = "0.2.8"
 
 [lib]
diff --git a/libraries/pod/Cargo.toml b/libraries/pod/Cargo.toml
index 3a472f51d..5fc53cb69 100644
--- a/libraries/pod/Cargo.toml
+++ b/libraries/pod/Cargo.toml
@@ -12,12 +12,12 @@ serde-traits = ["dep:serde", "dep:base64"]
 borsh = ["dep:borsh"]
 
 [dependencies]
-base64 = { version = "0.21.6", optional = true }
+base64 = { version = "0.21.7", optional = true }
 borsh = { version = "0.10", optional = true }
 bytemuck = { version = "1.14.0" }
 serde = { version = "1.0.195", optional = true }
-solana-program = "1.17.6"
-solana-zk-token-sdk = "1.17.6"
+solana-program = "1.17.13"
+solana-zk-token-sdk = "1.17.13"
 spl-program-error = { version = "0.3", path = "../program-error" }
 
 [dev-dependencies]
diff --git a/libraries/program-error/Cargo.toml b/libraries/program-error/Cargo.toml
index 002da7db7..08140831e 100644
--- a/libraries/program-error/Cargo.toml
+++ b/libraries/program-error/Cargo.toml
@@ -10,14 +10,14 @@ edition = "2021"
 [dependencies]
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-program-error-derive = { version = "0.3.1", path = "./derive" }
 thiserror = "1.0"
 
 [dev-dependencies]
 lazy_static = "1.4"
 serial_test = "3.0"
-solana-sdk = "1.17.6"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/libraries/tlv-account-resolution/Cargo.toml b/libraries/tlv-account-resolution/Cargo.toml
index 3b6ff13f1..960ff7836 100644
--- a/libraries/tlv-account-resolution/Cargo.toml
+++ b/libraries/tlv-account-resolution/Cargo.toml
@@ -14,7 +14,7 @@ test-sbf = []
 [dependencies]
 bytemuck = { version = "1.14.0", features = ["derive"] }
 serde = { version = "1.0.195", optional = true }
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-discriminator = { version = "0.1", path = "../discriminator" }
 spl-program-error = { version = "0.3", path = "../program-error" }
 spl-type-length-value = { version = "0.3", path = "../type-length-value" }
@@ -23,9 +23,9 @@ spl-pod = { version = "0.1", path = "../pod" }
 [dev-dependencies]
 futures = "0.3.30"
 futures-util = "0.3"
-solana-client = "1.17.6"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-client = "1.17.13"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-discriminator = { version = "0.1", path = "../discriminator" }
 
 [lib]
diff --git a/libraries/type-length-value/Cargo.toml b/libraries/type-length-value/Cargo.toml
index 4a190e28e..7ee7ebbfe 100644
--- a/libraries/type-length-value/Cargo.toml
+++ b/libraries/type-length-value/Cargo.toml
@@ -13,7 +13,7 @@ derive = ["dep:spl-type-length-value-derive"]
 
 [dependencies]
 bytemuck = { version = "1.14.0", features = ["derive"] }
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-discriminator = { version = "0.1", path = "../discriminator" }
 spl-program-error = { version = "0.3", path = "../program-error" }
 spl-type-length-value-derive = { version = "0.1", path = "./derive", optional = true }
diff --git a/libraries/type-length-value/js/package.json b/libraries/type-length-value/js/package.json
index a7b775e65..f9180028b 100644
--- a/libraries/type-length-value/js/package.json
+++ b/libraries/type-length-value/js/package.json
@@ -46,9 +46,9 @@
     "devDependencies": {
         "@types/chai": "^4.3.11",
         "@types/mocha": "^10.0.6",
-        "@types/node": "^20.11.0",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser": "^6.18.1",
+        "@types/node": "^20.11.5",
+        "@typescript-eslint/eslint-plugin": "^6.19.0",
+        "@typescript-eslint/parser": "^6.19.0",
         "chai": "^4.3.10",
         "chai-as-promised": "^7.1.1",
         "eslint": "^8.56.0",
@@ -57,7 +57,7 @@
         "eslint-plugin-require-extensions": "^0.1.1",
         "gh-pages": "^6.1.1",
         "mocha": "^10.1.0",
-        "prettier": "^3.1.1",
+        "prettier": "^3.2.4",
         "shx": "^0.3.4",
         "ts-node": "^10.9.2",
         "typescript": "^5.3.3"
diff --git a/libraries/type-length-value/js/tsconfig.json b/libraries/type-length-value/js/tsconfig.json
index 2f9b239bf..faff0d68f 100644
--- a/libraries/type-length-value/js/tsconfig.json
+++ b/libraries/type-length-value/js/tsconfig.json
@@ -3,6 +3,6 @@
     "include": ["src", "test"],
     "compilerOptions": {
         "noEmit": true,
-        "skipLibCheck": true
-    }
+        "skipLibCheck": true,
+    },
 }
diff --git a/managed-token/program/Cargo.toml b/managed-token/program/Cargo.toml
index 035464fb8..e74220e68 100644
--- a/managed-token/program/Cargo.toml
+++ b/managed-token/program/Cargo.toml
@@ -24,11 +24,11 @@ test = []
 [dependencies]
 borsh = "0.10"
 shank = "^0.2.1"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-associated-token-account = { version = "2.0", path = "../../associated-token-account/program", features = [ "no-entrypoint", ] }
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 thiserror = "^1.0.56"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
diff --git a/memo/js/package.json b/memo/js/package.json
index 07dfdf795..64d1220cc 100644
--- a/memo/js/package.json
+++ b/memo/js/package.json
@@ -46,19 +46,19 @@
         "deploy:docs": "npm run docs && gh-pages --dest memo/js --dist docs --dotfiles"
     },
     "peerDependencies": {
-        "@solana/web3.js": "^1.89.0"
+        "@solana/web3.js": "^1.89.1"
     },
     "dependencies": {
         "buffer": "^6.0.3"
     },
     "devDependencies": {
-        "@solana/web3.js": "^1.89.0",
+        "@solana/web3.js": "^1.89.1",
         "@types/chai": "^4.3.11",
         "@types/jest": "^29.5.11",
-        "@types/node": "^20.11.0",
-        "@types/node-fetch": "^2.6.10",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser": "^6.18.1",
+        "@types/node": "^20.11.5",
+        "@types/node-fetch": "^2.6.11",
+        "@typescript-eslint/eslint-plugin": "^6.19.0",
+        "@typescript-eslint/parser": "^6.19.0",
         "chai": "^4.3.6",
         "eslint": "^8.56.0",
         "eslint-config-prettier": "^9.1.0",
@@ -66,7 +66,7 @@
         "eslint-plugin-require-extensions": "^0.1.1",
         "gh-pages": "^6.1.1",
         "jest": "^29.0.0",
-        "prettier": "^3.1.1",
+        "prettier": "^3.2.4",
         "process": "^0.11.10",
         "shx": "^0.3.4",
         "start-server-and-test": "^2.0.3",
diff --git a/memo/js/tsconfig.json b/memo/js/tsconfig.json
index 2f9b239bf..faff0d68f 100644
--- a/memo/js/tsconfig.json
+++ b/memo/js/tsconfig.json
@@ -3,6 +3,6 @@
     "include": ["src", "test"],
     "compilerOptions": {
         "noEmit": true,
-        "skipLibCheck": true
-    }
+        "skipLibCheck": true,
+    },
 }
diff --git a/memo/program/Cargo.toml b/memo/program/Cargo.toml
index 49900d65b..da01c4b9d 100644
--- a/memo/program/Cargo.toml
+++ b/memo/program/Cargo.toml
@@ -12,11 +12,11 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/name-service/js/package.json b/name-service/js/package.json
index a27f7730b..0a899e445 100644
--- a/name-service/js/package.json
+++ b/name-service/js/package.json
@@ -39,9 +39,9 @@
     "@types/chai": "^4.3.11",
     "@types/chai-as-promised": "^7.1.5",
     "@types/mocha": "^10.0.6",
-    "@types/node": "^20.11.0",
-    "@typescript-eslint/eslint-plugin": "^6.18.1",
-    "@typescript-eslint/parser": "^6.18.1",
+    "@types/node": "^20.11.5",
+    "@typescript-eslint/eslint-plugin": "^6.19.0",
+    "@typescript-eslint/parser": "^6.19.0",
     "chai": "^4.3.7",
     "chai-as-promised": "^7.1.1",
     "eslint": "^8.56.0",
@@ -50,14 +50,14 @@
     "eslint-plugin-functional": "^6.0.0",
     "eslint-plugin-import": "^2.29.1",
     "mocha": "^10.2.0",
-    "prettier": "^3.1.1",
+    "prettier": "^3.2.4",
     "start-server-and-test": "^2.0.3",
     "ts-node": "^10.9.2",
     "typedoc": "^0.25.7",
     "typescript": "^5.3.3"
   },
   "dependencies": {
-    "@solana/web3.js": "^1.89.0",
+    "@solana/web3.js": "^1.89.1",
     "bn.js": "^5.1.3",
     "borsh": "^2.0.0"
   },
diff --git a/name-service/program/Cargo.toml b/name-service/program/Cargo.toml
index 0a711617f..878b182c8 100644
--- a/name-service/program/Cargo.toml
+++ b/name-service/program/Cargo.toml
@@ -17,15 +17,15 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 num-traits = "0.2"
 borsh = "0.10"
 num-derive = "0.4.1"
 thiserror = "1.0.56"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/pnpm-lock.yaml b/pnpm-lock.yaml
index f46e4d2aa..e21c04f27 100644
--- a/pnpm-lock.yaml
+++ b/pnpm-lock.yaml
@@ -6,10 +6,10 @@ importers:
     devDependencies:
       '@solana/eslint-config-solana':
         specifier: ^1.0.2
-        version: 1.0.2(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-jest@27.6.2)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@10.0.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint@8.56.0)(typescript@5.3.3)
+        version: 1.0.2(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-jest@27.6.3)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@10.0.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint@8.56.0)(typescript@5.3.3)
       '@solana/prettier-config-solana':
         specifier: ^0.0.4
-        version: 0.0.4(prettier@3.1.1)
+        version: 0.0.4(prettier@3.2.4)
       eslint-config-turbo:
         specifier: ^1.11.3
         version: 1.11.3(eslint@8.56.0)
@@ -26,8 +26,8 @@ importers:
         specifier: ^0.4.1
         version: 0.4.1
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       bn.js:
         specifier: ^5.2.1
         version: 5.2.1
@@ -49,10 +49,10 @@ importers:
         version: 0.26.0
       '@solana/eslint-config-solana':
         specifier: ^1.0.2
-        version: 1.0.2(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-jest@27.6.2)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@10.0.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint@8.56.0)(typescript@5.3.3)
+        version: 1.0.2(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-jest@27.6.3)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@10.0.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint@8.56.0)(typescript@5.3.3)
       '@solana/prettier-config-solana':
         specifier: ^0.0.4
-        version: 0.0.4(prettier@3.1.1)
+        version: 0.0.4(prettier@3.2.4)
       '@types/bn.js':
         specifier: ^5.1.0
         version: 5.1.5
@@ -63,14 +63,14 @@ importers:
         specifier: ^29.5.11
         version: 29.5.11
       '@types/node-fetch':
-        specifier: ^2.6.10
-        version: 2.6.10
+        specifier: ^2.6.11
+        version: 2.6.11
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.4
         version: 4.3.10
@@ -85,16 +85,16 @@ importers:
         version: 1.11.3(eslint@8.56.0)
       eslint-plugin-import:
         specifier: ^2.29.1
-        version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)
+        version: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)
       eslint-plugin-jest:
-        specifier: ^27.6.2
-        version: 27.6.2(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3)
+        specifier: ^27.6.3
+        version: 27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3)
       eslint-plugin-mocha:
         specifier: ^10.2.0
         version: 10.2.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-simple-import-sort:
         specifier: ^10.0.0
         version: 10.0.0(eslint@8.56.0)
@@ -106,10 +106,10 @@ importers:
         version: 6.1.1
       jest:
         specifier: ^29.0.1
-        version: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+        version: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       jest-config:
         specifier: ^29.0.1
-        version: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+        version: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       start-server-and-test:
         specifier: ^2.0.3
         version: 2.0.3
@@ -121,7 +121,7 @@ importers:
         version: 2.0.1
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       typedoc:
         specifier: ^0.25.7
         version: 0.25.7(typescript@5.3.3)
@@ -142,14 +142,14 @@ importers:
         specifier: ^10.0.6
         version: 10.0.6
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.10
         version: 4.3.10
@@ -164,7 +164,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-require-extensions:
         specifier: ^0.1.1
         version: 0.1.3(eslint@8.56.0)
@@ -175,14 +175,14 @@ importers:
         specifier: ^10.1.0
         version: 10.2.0
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       shx:
         specifier: ^0.3.4
         version: 0.3.4
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       typescript:
         specifier: ^5.3.3
         version: 5.3.3
@@ -194,8 +194,8 @@ importers:
         version: 6.0.3
     devDependencies:
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       '@types/chai':
         specifier: ^4.3.11
         version: 4.3.11
@@ -203,17 +203,17 @@ importers:
         specifier: ^29.5.11
         version: 29.5.11
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@types/node-fetch':
-        specifier: ^2.6.10
-        version: 2.6.10
+        specifier: ^2.6.11
+        version: 2.6.11
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.6
         version: 4.3.10
@@ -225,7 +225,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-require-extensions:
         specifier: ^0.1.1
         version: 0.1.3(eslint@8.56.0)
@@ -234,10 +234,10 @@ importers:
         version: 6.1.1
       jest:
         specifier: ^29.0.0
-        version: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+        version: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       process:
         specifier: ^0.11.10
         version: 0.11.10
@@ -252,7 +252,7 @@ importers:
         version: 29.1.1(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.3.3)
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       typedoc:
         specifier: ^0.25.7
         version: 0.25.7(typescript@5.3.3)
@@ -263,8 +263,8 @@ importers:
   name-service/js:
     dependencies:
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       bn.js:
         specifier: ^5.1.3
         version: 5.2.1
@@ -285,14 +285,14 @@ importers:
         specifier: ^10.0.6
         version: 10.0.6
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.7
         version: 4.3.10
@@ -313,19 +313,19 @@ importers:
         version: 6.0.0(eslint@8.56.0)(typescript@5.3.3)
       eslint-plugin-import:
         specifier: ^2.29.1
-        version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)
+        version: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)
       mocha:
         specifier: ^10.2.0
         version: 10.2.0
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       start-server-and-test:
         specifier: ^2.0.3
         version: 2.0.3
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       typedoc:
         specifier: ^0.25.7
         version: 0.25.7(typescript@5.3.3)
@@ -339,18 +339,18 @@ importers:
         specifier: 1.0.0
         version: link:../modern
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
     devDependencies:
       '@ava/typescript':
         specifier: ^4.1.0
         version: 4.1.0
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       ava:
         specifier: ^6.0.1
         version: 6.0.1(@ava/typescript@4.1.0)
@@ -362,7 +362,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       solana-bankrun:
         specifier: ^0.2.0
         version: 0.2.0
@@ -380,11 +380,11 @@ importers:
         version: 2.0.0-experimental.21e994f(node-fetch@2.7.0)(ws@8.14.2)
     devDependencies:
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       eslint:
         specifier: ^8.56.0
         version: 8.56.0
@@ -393,7 +393,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       typescript:
         specifier: ^5.3.3
         version: 5.3.3
@@ -402,7 +402,7 @@ importers:
     dependencies:
       '@coral-xyz/borsh':
         specifier: ^0.29.0
-        version: 0.29.0(@solana/web3.js@1.89.0)
+        version: 0.29.0(@solana/web3.js@1.89.1)
       '@solana/buffer-layout':
         specifier: ^4.0.1
         version: 4.0.1
@@ -410,8 +410,8 @@ importers:
         specifier: 0.3.11
         version: link:../../token/js
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       bn.js:
         specifier: ^5.2.0
         version: 5.2.1
@@ -424,25 +424,25 @@ importers:
     devDependencies:
       '@rollup/plugin-alias':
         specifier: ^5.1.0
-        version: 5.1.0(rollup@4.9.4)
+        version: 5.1.0(rollup@4.9.5)
       '@rollup/plugin-commonjs':
         specifier: ^25.0.0
-        version: 25.0.7(rollup@4.9.4)
+        version: 25.0.7(rollup@4.9.5)
       '@rollup/plugin-json':
         specifier: ^6.1.0
-        version: 6.1.0(rollup@4.9.4)
+        version: 6.1.0(rollup@4.9.5)
       '@rollup/plugin-multi-entry':
         specifier: ^6.0.0
-        version: 6.0.1(rollup@4.9.4)
+        version: 6.0.1(rollup@4.9.5)
       '@rollup/plugin-node-resolve':
         specifier: ^15.0.2
-        version: 15.2.3(rollup@4.9.4)
+        version: 15.2.3(rollup@4.9.5)
       '@rollup/plugin-terser':
         specifier: ^0.4.4
-        version: 0.4.4(rollup@4.9.4)
+        version: 0.4.4(rollup@4.9.5)
       '@rollup/plugin-typescript':
         specifier: ^11.1.6
-        version: 11.1.6(rollup@4.9.4)(tslib@2.6.2)(typescript@5.3.3)
+        version: 11.1.6(rollup@4.9.5)(tslib@2.6.2)(typescript@5.3.3)
       '@types/bn.js':
         specifier: ^5.1.0
         version: 5.1.5
@@ -450,17 +450,17 @@ importers:
         specifier: ^29.5.11
         version: 29.5.11
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@types/node-fetch':
-        specifier: ^2.6.10
-        version: 2.6.10
+        specifier: ^2.6.11
+        version: 2.6.11
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       cross-env:
         specifier: ^7.0.3
         version: 7.0.3
@@ -472,22 +472,22 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       jest:
         specifier: ^29.0.0
-        version: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+        version: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       rimraf:
         specifier: ^5.0.0
         version: 5.0.5
       rollup:
-        specifier: ^4.9.4
-        version: 4.9.4
+        specifier: ^4.9.5
+        version: 4.9.5
       rollup-plugin-dts:
         specifier: ^6.1.0
-        version: 6.1.0(rollup@4.9.4)(typescript@5.3.3)
+        version: 6.1.0(rollup@4.9.5)(typescript@5.3.3)
       ts-jest:
         specifier: ^29.0.0
         version: 29.1.1(@babel/core@7.23.2)(jest@29.7.0)(typescript@5.3.3)
@@ -514,8 +514,8 @@ importers:
         version: link:../../libraries/type-length-value/js
     devDependencies:
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       '@types/chai':
         specifier: ^4.3.11
         version: 4.3.11
@@ -523,14 +523,14 @@ importers:
         specifier: ^10.0.6
         version: 10.0.6
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.6
         version: 4.3.10
@@ -542,7 +542,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-require-extensions:
         specifier: ^0.1.1
         version: 0.1.3(eslint@8.56.0)
@@ -553,14 +553,14 @@ importers:
         specifier: ^10.1.0
         version: 10.2.0
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       shx:
         specifier: ^0.3.4
         version: 0.3.4
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       tslib:
         specifier: ^2.3.1
         version: 2.6.2
@@ -588,19 +588,19 @@ importers:
     devDependencies:
       '@rollup/plugin-commonjs':
         specifier: ^25.0.0
-        version: 25.0.7(rollup@4.9.4)
+        version: 25.0.7(rollup@4.9.5)
       '@rollup/plugin-node-resolve':
         specifier: ^15.0.2
-        version: 15.2.3(rollup@4.9.4)
+        version: 15.2.3(rollup@4.9.5)
       '@rollup/plugin-typescript':
         specifier: ^11.1.6
-        version: 11.1.6(rollup@4.9.4)(tslib@2.6.2)(typescript@5.3.3)
+        version: 11.1.6(rollup@4.9.5)(tslib@2.6.2)(typescript@5.3.3)
       '@solana/spl-token':
         specifier: 0.3.11
         version: link:../../token/js
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       '@types/eslint':
         specifier: ^8.56.2
         version: 8.56.2
@@ -608,14 +608,14 @@ importers:
         specifier: ^3.1.0
         version: 3.1.3
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       eslint:
         specifier: ^8.56.0
         version: 8.56.0
@@ -624,19 +624,19 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       gh-pages:
         specifier: ^6.1.1
         version: 6.1.1
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       rollup:
-        specifier: ^4.9.4
-        version: 4.9.4
+        specifier: ^4.9.5
+        version: 4.9.5
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       tslib:
         specifier: ^2.3.0
         version: 2.6.2
@@ -669,8 +669,8 @@ importers:
         version: link:../../libraries/type-length-value/js
     devDependencies:
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       '@types/chai':
         specifier: ^4.3.11
         version: 4.3.11
@@ -678,14 +678,14 @@ importers:
         specifier: ^10.0.6
         version: 10.0.6
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.6
         version: 4.3.10
@@ -697,7 +697,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-require-extensions:
         specifier: ^0.1.1
         version: 0.1.3(eslint@8.56.0)
@@ -708,14 +708,14 @@ importers:
         specifier: ^10.1.0
         version: 10.2.0
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       shx:
         specifier: ^0.3.4
         version: 0.3.4
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       tslib:
         specifier: ^2.3.1
         version: 2.6.2
@@ -739,8 +739,8 @@ importers:
         specifier: 0.3.11
         version: link:../../token/js
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       '@types/bn.js':
         specifier: ^5.1.0
         version: 5.1.5
@@ -754,11 +754,11 @@ importers:
         specifier: ^10.0.6
         version: 10.0.6
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       eslint:
         specifier: ^8.56.0
         version: 8.56.0
@@ -767,10 +767,10 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-import:
         specifier: ^2.29.1
-        version: 2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)
+        version: 2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-require-extensions:
         specifier: ^0.1.1
         version: 0.1.3(eslint@8.56.0)
@@ -778,14 +778,14 @@ importers:
         specifier: ^10.1.0
         version: 10.2.0
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       start-server-and-test:
         specifier: ^2.0.3
         version: 2.0.3
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       typescript:
         specifier: ^5.3.3
         version: 5.3.3
@@ -812,8 +812,8 @@ importers:
         specifier: 0.2.3
         version: link:../../memo/js
       '@solana/web3.js':
-        specifier: ^1.89.0
-        version: 1.89.0
+        specifier: ^1.89.1
+        version: 1.89.1
       '@types/chai':
         specifier: ^4.3.11
         version: 4.3.11
@@ -824,17 +824,17 @@ importers:
         specifier: ^10.0.6
         version: 10.0.6
       '@types/node':
-        specifier: ^20.11.0
-        version: 20.11.0
+        specifier: ^20.11.5
+        version: 20.11.5
       '@types/node-fetch':
-        specifier: ^2.6.10
-        version: 2.6.10
+        specifier: ^2.6.11
+        version: 2.6.11
       '@typescript-eslint/eslint-plugin':
-        specifier: ^6.18.1
-        version: 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/parser':
-        specifier: ^6.18.1
-        version: 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+        specifier: ^6.19.0
+        version: 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       chai:
         specifier: ^4.3.6
         version: 4.3.10
@@ -849,7 +849,7 @@ importers:
         version: 9.1.0(eslint@8.56.0)
       eslint-plugin-prettier:
         specifier: ^5.1.3
-        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1)
+        version: 5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4)
       eslint-plugin-require-extensions:
         specifier: ^0.1.1
         version: 0.1.3(eslint@8.56.0)
@@ -860,8 +860,8 @@ importers:
         specifier: ^10.1.0
         version: 10.2.0
       prettier:
-        specifier: ^3.1.1
-        version: 3.1.1
+        specifier: ^3.2.4
+        version: 3.2.4
       process:
         specifier: ^0.11.10
         version: 0.11.10
@@ -873,7 +873,7 @@ importers:
         version: 2.0.3
       ts-node:
         specifier: ^10.9.2
-        version: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+        version: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
       tslib:
         specifier: ^2.3.1
         version: 2.6.2
@@ -1242,24 +1242,24 @@ packages:
     resolution: {integrity: sha512-0hYQ8SB4Db5zvZB4axdMHGwEaQjkZzFjQiN9LVYvIFB2nSUHW9tYpxWriPrWDASIxiaXax83REcLxuSdnGPZtw==}
     dev: true
 
-  /@coral-xyz/borsh@0.26.0(@solana/web3.js@1.89.0):
+  /@coral-xyz/borsh@0.26.0(@solana/web3.js@1.89.1):
     resolution: {integrity: sha512-uCZ0xus0CszQPHYfWAqKS5swS1UxvePu83oOF+TWpUkedsNlg6p2p4azxZNSSqwXb9uXMFgxhuMBX9r3Xoi0vQ==}
     engines: {node: '>=10'}
     peerDependencies:
       '@solana/web3.js': ^1.68.0
     dependencies:
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       bn.js: 5.2.1
       buffer-layout: 1.2.2
     dev: true
 
-  /@coral-xyz/borsh@0.29.0(@solana/web3.js@1.89.0):
+  /@coral-xyz/borsh@0.29.0(@solana/web3.js@1.89.1):
     resolution: {integrity: sha512-s7VFVa3a0oqpkuRloWVPdCK7hMbAMY270geZOGfCnaqexrP5dTIpbEHL33req6IYPPJ0hYa71cdvJ1h6V55/oQ==}
     engines: {node: '>=10'}
     peerDependencies:
       '@solana/web3.js': ^1.68.0
     dependencies:
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       bn.js: 5.2.1
       buffer-layout: 1.2.2
     dev: false
@@ -1578,7 +1578,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       chalk: 4.1.2
       jest-message-util: 29.7.0
       jest-util: 29.7.0
@@ -1599,14 +1599,14 @@ packages:
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       ci-info: 3.9.0
       exit: 0.1.2
       graceful-fs: 4.2.11
       jest-changed-files: 29.7.0
-      jest-config: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      jest-config: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       jest-haste-map: 29.7.0
       jest-message-util: 29.7.0
       jest-regex-util: 29.6.3
@@ -1634,7 +1634,7 @@ packages:
     dependencies:
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       jest-mock: 29.7.0
     dev: true
 
@@ -1661,7 +1661,7 @@ packages:
     dependencies:
       '@jest/types': 29.6.3
       '@sinonjs/fake-timers': 10.3.0
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       jest-message-util: 29.7.0
       jest-mock: 29.7.0
       jest-util: 29.7.0
@@ -1694,7 +1694,7 @@ packages:
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
       '@jridgewell/trace-mapping': 0.3.20
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       chalk: 4.1.2
       collect-v8-coverage: 1.0.2
       exit: 0.1.2
@@ -1782,7 +1782,7 @@ packages:
       '@jest/schemas': 29.6.3
       '@types/istanbul-lib-coverage': 2.0.6
       '@types/istanbul-reports': 3.0.4
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       '@types/yargs': 17.0.31
       chalk: 4.1.2
     dev: true
@@ -1853,7 +1853,7 @@ packages:
     resolution: {integrity: sha512-tgyEl6dvtLln8XX81JyBvWjIiEcjTkUwZbrM5dIobTmoqMuGewSyk9CClno8qsMsFdB5T3jC91Rjeqmu/6xk2g==}
     dependencies:
       '@metaplex-foundation/beet': 0.7.2
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       bs58: 5.0.0
       debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
@@ -1867,7 +1867,7 @@ packages:
     resolution: {integrity: sha512-/6o32FNUtwK8tjhotrvU/vorP7umBuRFvBZrC6XCk51aKidBHe5LPVPA5AjGPbV3oftMfRuXPNd9yAGeEqeCDQ==}
     dependencies:
       '@metaplex-foundation/beet': 0.7.2
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       bs58: 5.0.0
       debug: 4.3.4(supports-color@8.1.1)
     transitivePeerDependencies:
@@ -1905,7 +1905,7 @@ packages:
       '@metaplex-foundation/beet': 0.7.2
       '@metaplex-foundation/beet-solana': 0.3.1
       '@metaplex-foundation/rustbin': 0.3.5
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       ansi-colors: 4.1.3
       camelcase: 6.3.0
       debug: 4.3.4(supports-color@8.1.1)
@@ -2009,8 +2009,8 @@ packages:
     resolution: {integrity: sha512-Nq+COIjE1135T7qfnOHEn7E0q39bQTgXLFk837/rgFe6Hkew9WML7eHsS+lSYD2p3OJaTiUOHTAq1lHy36oIqQ==}
     engines: {node: '>=11'}
     dependencies:
-      '@coral-xyz/borsh': 0.26.0(@solana/web3.js@1.89.0)
-      '@solana/web3.js': 1.89.0
+      '@coral-xyz/borsh': 0.26.0(@solana/web3.js@1.89.1)
+      '@solana/web3.js': 1.89.1
       base64-js: 1.5.1
       bn.js: 5.2.1
       bs58: 4.0.1
@@ -2030,7 +2030,7 @@ packages:
       - utf-8-validate
     dev: true
 
-  /@rollup/plugin-alias@5.1.0(rollup@4.9.4):
+  /@rollup/plugin-alias@5.1.0(rollup@4.9.5):
     resolution: {integrity: sha512-lpA3RZ9PdIG7qqhEfv79tBffNaoDuukFDrmhLqg9ifv99u/ehn+lOg30x2zmhf8AQqQUZaMk/B9fZraQ6/acDQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2039,11 +2039,11 @@ packages:
       rollup:
         optional: true
     dependencies:
-      rollup: 4.9.4
+      rollup: 4.9.5
       slash: 4.0.0
     dev: true
 
-  /@rollup/plugin-commonjs@25.0.7(rollup@4.9.4):
+  /@rollup/plugin-commonjs@25.0.7(rollup@4.9.5):
     resolution: {integrity: sha512-nEvcR+LRjEjsaSsc4x3XZfCCvZIaSMenZu/OiwOKGN2UhQpAYI7ru7czFvyWbErlpoGjnSX3D5Ch5FcMA3kRWQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2052,16 +2052,16 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.0.5(rollup@4.9.4)
+      '@rollup/pluginutils': 5.0.5(rollup@4.9.5)
       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.9.4
+      rollup: 4.9.5
     dev: true
 
-  /@rollup/plugin-json@6.1.0(rollup@4.9.4):
+  /@rollup/plugin-json@6.1.0(rollup@4.9.5):
     resolution: {integrity: sha512-EGI2te5ENk1coGeADSIwZ7G2Q8CJS2sF120T7jLw4xFw9n7wIOXHo+kIYRAoVpJAN+kmqZSoO3Fp4JtoNF4ReA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2070,11 +2070,11 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.1.0(rollup@4.9.4)
-      rollup: 4.9.4
+      '@rollup/pluginutils': 5.1.0(rollup@4.9.5)
+      rollup: 4.9.5
     dev: true
 
-  /@rollup/plugin-multi-entry@6.0.1(rollup@4.9.4):
+  /@rollup/plugin-multi-entry@6.0.1(rollup@4.9.5):
     resolution: {integrity: sha512-AXm6toPyTSfbYZWghQGbom1Uh7dHXlrGa+HoiYNhQtDUE3Q7LqoUYdVQx9E1579QWS1uOiu+cZRSE4okO7ySgw==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2083,12 +2083,12 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/plugin-virtual': 3.0.2(rollup@4.9.4)
+      '@rollup/plugin-virtual': 3.0.2(rollup@4.9.5)
       matched: 5.0.1
-      rollup: 4.9.4
+      rollup: 4.9.5
     dev: true
 
-  /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.4):
+  /@rollup/plugin-node-resolve@15.2.3(rollup@4.9.5):
     resolution: {integrity: sha512-j/lym8nf5E21LwBT4Df1VD6hRO2L2iwUeUmP7litikRsVp1H6NWx20NEp0Y7su+7XGc476GnXXc4kFeZNGmaSQ==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2097,16 +2097,16 @@ packages:
       rollup:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.0.5(rollup@4.9.4)
+      '@rollup/pluginutils': 5.0.5(rollup@4.9.5)
       '@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.9.4
+      rollup: 4.9.5
     dev: true
 
-  /@rollup/plugin-terser@0.4.4(rollup@4.9.4):
+  /@rollup/plugin-terser@0.4.4(rollup@4.9.5):
     resolution: {integrity: sha512-XHeJC5Bgvs8LfukDwWZp7yeqin6ns8RTl2B9avbejt6tZqsqvVoWI7ZTQrcNsfKEDWBTnTxM8nMDkO2IFFbd0A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2115,13 +2115,13 @@ packages:
       rollup:
         optional: true
     dependencies:
-      rollup: 4.9.4
+      rollup: 4.9.5
       serialize-javascript: 6.0.1
       smob: 1.4.1
       terser: 5.24.0
     dev: true
 
-  /@rollup/plugin-typescript@11.1.6(rollup@4.9.4)(tslib@2.6.2)(typescript@5.3.3):
+  /@rollup/plugin-typescript@11.1.6(rollup@4.9.5)(tslib@2.6.2)(typescript@5.3.3):
     resolution: {integrity: sha512-R92yOmIACgYdJ7dJ97p4K69I8gg6IEHt8M7dUBxN3W6nrO8uUxX5ixl0yU/N3aZTi8WhPuICvOHXQvF6FaykAA==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2134,14 +2134,14 @@ packages:
       tslib:
         optional: true
     dependencies:
-      '@rollup/pluginutils': 5.1.0(rollup@4.9.4)
+      '@rollup/pluginutils': 5.1.0(rollup@4.9.5)
       resolve: 1.22.8
-      rollup: 4.9.4
+      rollup: 4.9.5
       tslib: 2.6.2
       typescript: 5.3.3
     dev: true
 
-  /@rollup/plugin-virtual@3.0.2(rollup@4.9.4):
+  /@rollup/plugin-virtual@3.0.2(rollup@4.9.5):
     resolution: {integrity: sha512-10monEYsBp3scM4/ND4LNH5Rxvh3e/cVeL3jWTgZ2SrQ+BmUoQcopVQvnaMcOnykb1VkxUFuDAN+0FnpTFRy2A==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2150,7 +2150,7 @@ packages:
       rollup:
         optional: true
     dependencies:
-      rollup: 4.9.4
+      rollup: 4.9.5
     dev: true
 
   /@rollup/pluginutils@4.2.1:
@@ -2161,7 +2161,7 @@ packages:
       picomatch: 2.3.1
     dev: true
 
-  /@rollup/pluginutils@5.0.5(rollup@4.9.4):
+  /@rollup/pluginutils@5.0.5(rollup@4.9.5):
     resolution: {integrity: sha512-6aEYR910NyP73oHiJglti74iRyOwgFU4x3meH/H8OJx6Ry0j6cOVZ5X/wTvub7G7Ao6qaHBEaNsV3GLJkSsF+Q==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2173,10 +2173,10 @@ packages:
       '@types/estree': 1.0.5
       estree-walker: 2.0.2
       picomatch: 2.3.1
-      rollup: 4.9.4
+      rollup: 4.9.5
     dev: true
 
-  /@rollup/pluginutils@5.1.0(rollup@4.9.4):
+  /@rollup/pluginutils@5.1.0(rollup@4.9.5):
     resolution: {integrity: sha512-XTIWOPPcpvyKI6L1NHo0lFlCyznUEyPmPY1mc3KpPVDYulHSTvyeLNVW00QTLIAFNhR3kYnJTQHeGqU4M3n09g==}
     engines: {node: '>=14.0.0'}
     peerDependencies:
@@ -2188,107 +2188,107 @@ packages:
       '@types/estree': 1.0.5
       estree-walker: 2.0.2
       picomatch: 2.3.1
-      rollup: 4.9.4
+      rollup: 4.9.5
     dev: true
 
-  /@rollup/rollup-android-arm-eabi@4.9.4:
-    resolution: {integrity: sha512-ub/SN3yWqIv5CWiAZPHVS1DloyZsJbtXmX4HxUTIpS0BHm9pW5iYBo2mIZi+hE3AeiTzHz33blwSnhdUo+9NpA==}
+  /@rollup/rollup-android-arm-eabi@4.9.5:
+    resolution: {integrity: sha512-idWaG8xeSRCfRq9KpRysDHJ/rEHBEXcHuJ82XY0yYFIWnLMjZv9vF/7DOq8djQ2n3Lk6+3qfSH8AqlmHlmi1MA==}
     cpu: [arm]
     os: [android]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-android-arm64@4.9.4:
-    resolution: {integrity: sha512-ehcBrOR5XTl0W0t2WxfTyHCR/3Cq2jfb+I4W+Ch8Y9b5G+vbAecVv0Fx/J1QKktOrgUYsIKxWAKgIpvw56IFNA==}
+  /@rollup/rollup-android-arm64@4.9.5:
+    resolution: {integrity: sha512-f14d7uhAMtsCGjAYwZGv6TwuS3IFaM4ZnGMUn3aCBgkcHAYErhV1Ad97WzBvS2o0aaDv4mVz+syiN0ElMyfBPg==}
     cpu: [arm64]
     os: [android]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-darwin-arm64@4.9.4:
-    resolution: {integrity: sha512-1fzh1lWExwSTWy8vJPnNbNM02WZDS8AW3McEOb7wW+nPChLKf3WG2aG7fhaUmfX5FKw9zhsF5+MBwArGyNM7NA==}
+  /@rollup/rollup-darwin-arm64@4.9.5:
+    resolution: {integrity: sha512-ndoXeLx455FffL68OIUrVr89Xu1WLzAG4n65R8roDlCoYiQcGGg6MALvs2Ap9zs7AHg8mpHtMpwC8jBBjZrT/w==}
     cpu: [arm64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-darwin-x64@4.9.4:
-    resolution: {integrity: sha512-Gc6cukkF38RcYQ6uPdiXi70JB0f29CwcQ7+r4QpfNpQFVHXRd0DfWFidoGxjSx1DwOETM97JPz1RXL5ISSB0pA==}
+  /@rollup/rollup-darwin-x64@4.9.5:
+    resolution: {integrity: sha512-UmElV1OY2m/1KEEqTlIjieKfVwRg0Zwg4PLgNf0s3glAHXBN99KLpw5A5lrSYCa1Kp63czTpVll2MAqbZYIHoA==}
     cpu: [x64]
     os: [darwin]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm-gnueabihf@4.9.4:
-    resolution: {integrity: sha512-g21RTeFzoTl8GxosHbnQZ0/JkuFIB13C3T7Y0HtKzOXmoHhewLbVTFBQZu+z5m9STH6FZ7L/oPgU4Nm5ErN2fw==}
+  /@rollup/rollup-linux-arm-gnueabihf@4.9.5:
+    resolution: {integrity: sha512-Q0LcU61v92tQB6ae+udZvOyZ0wfpGojtAKrrpAaIqmJ7+psq4cMIhT/9lfV6UQIpeItnq/2QDROhNLo00lOD1g==}
     cpu: [arm]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm64-gnu@4.9.4:
-    resolution: {integrity: sha512-TVYVWD/SYwWzGGnbfTkrNpdE4HON46orgMNHCivlXmlsSGQOx/OHHYiQcMIOx38/GWgwr/po2LBn7wypkWw/Mg==}
+  /@rollup/rollup-linux-arm64-gnu@4.9.5:
+    resolution: {integrity: sha512-dkRscpM+RrR2Ee3eOQmRWFjmV/payHEOrjyq1VZegRUa5OrZJ2MAxBNs05bZuY0YCtpqETDy1Ix4i/hRqX98cA==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-arm64-musl@4.9.4:
-    resolution: {integrity: sha512-XcKvuendwizYYhFxpvQ3xVpzje2HHImzg33wL9zvxtj77HvPStbSGI9czrdbfrf8DGMcNNReH9pVZv8qejAQ5A==}
+  /@rollup/rollup-linux-arm64-musl@4.9.5:
+    resolution: {integrity: sha512-QaKFVOzzST2xzY4MAmiDmURagWLFh+zZtttuEnuNn19AiZ0T3fhPyjPPGwLNdiDT82ZE91hnfJsUiDwF9DClIQ==}
     cpu: [arm64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-riscv64-gnu@4.9.4:
-    resolution: {integrity: sha512-LFHS/8Q+I9YA0yVETyjonMJ3UA+DczeBd/MqNEzsGSTdNvSJa1OJZcSH8GiXLvcizgp9AlHs2walqRcqzjOi3A==}
+  /@rollup/rollup-linux-riscv64-gnu@4.9.5:
+    resolution: {integrity: sha512-HeGqmRJuyVg6/X6MpE2ur7GbymBPS8Np0S/vQFHDmocfORT+Zt76qu+69NUoxXzGqVP1pzaY6QIi0FJWLC3OPA==}
     cpu: [riscv64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-x64-gnu@4.9.4:
-    resolution: {integrity: sha512-dIYgo+j1+yfy81i0YVU5KnQrIJZE8ERomx17ReU4GREjGtDW4X+nvkBak2xAUpyqLs4eleDSj3RrV72fQos7zw==}
+  /@rollup/rollup-linux-x64-gnu@4.9.5:
+    resolution: {integrity: sha512-Dq1bqBdLaZ1Gb/l2e5/+o3B18+8TI9ANlA1SkejZqDgdU/jK/ThYaMPMJpVMMXy2uRHvGKbkz9vheVGdq3cJfA==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-linux-x64-musl@4.9.4:
-    resolution: {integrity: sha512-RoaYxjdHQ5TPjaPrLsfKqR3pakMr3JGqZ+jZM0zP2IkDtsGa4CqYaWSfQmZVgFUCgLrTnzX+cnHS3nfl+kB6ZQ==}
+  /@rollup/rollup-linux-x64-musl@4.9.5:
+    resolution: {integrity: sha512-ezyFUOwldYpj7AbkwyW9AJ203peub81CaAIVvckdkyH8EvhEIoKzaMFJj0G4qYJ5sw3BpqhFrsCc30t54HV8vg==}
     cpu: [x64]
     os: [linux]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-win32-arm64-msvc@4.9.4:
-    resolution: {integrity: sha512-T8Q3XHV+Jjf5e49B4EAaLKV74BbX7/qYBRQ8Wop/+TyyU0k+vSjiLVSHNWdVd1goMjZcbhDmYZUYW5RFqkBNHQ==}
+  /@rollup/rollup-win32-arm64-msvc@4.9.5:
+    resolution: {integrity: sha512-aHSsMnUw+0UETB0Hlv7B/ZHOGY5bQdwMKJSzGfDfvyhnpmVxLMGnQPGNE9wgqkLUs3+gbG1Qx02S2LLfJ5GaRQ==}
     cpu: [arm64]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-win32-ia32-msvc@4.9.4:
-    resolution: {integrity: sha512-z+JQ7JirDUHAsMecVydnBPWLwJjbppU+7LZjffGf+Jvrxq+dVjIE7By163Sc9DKc3ADSU50qPVw0KonBS+a+HQ==}
+  /@rollup/rollup-win32-ia32-msvc@4.9.5:
+    resolution: {integrity: sha512-AiqiLkb9KSf7Lj/o1U3SEP9Zn+5NuVKgFdRIZkvd4N0+bYrTOovVd0+LmYCPQGbocT4kvFyK+LXCDiXPBF3fyA==}
     cpu: [ia32]
     os: [win32]
     requiresBuild: true
     dev: true
     optional: true
 
-  /@rollup/rollup-win32-x64-msvc@4.9.4:
-    resolution: {integrity: sha512-LfdGXCV9rdEify1oxlN9eamvDSjv9md9ZVMAbNHA87xqIfFCxImxan9qZ8+Un54iK2nnqPlbnSi4R54ONtbWBw==}
+  /@rollup/rollup-win32-x64-msvc@4.9.5:
+    resolution: {integrity: sha512-1q+mykKE3Vot1kaFJIDoUFv5TuW+QQVaf2FmTT9krg86pQrGStOSJJ0Zil7CFagyxDuouTepzt5Y5TVzyajOdQ==}
     cpu: [x64]
     os: [win32]
     requiresBuild: true
@@ -2346,7 +2346,7 @@ packages:
     engines: {node: '>= 10'}
     dependencies:
       '@solana/buffer-layout': 4.0.1
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       bigint-buffer: 1.1.5
       bignumber.js: 9.1.2
     transitivePeerDependencies:
@@ -2385,7 +2385,7 @@ packages:
       '@solana/codecs-numbers': 2.0.0-experimental.9741939
       fastestsmallesttextencoderdecoder: 1.0.22
 
-  /@solana/eslint-config-solana@1.0.2(@typescript-eslint/eslint-plugin@6.18.1)(@typescript-eslint/parser@6.18.1)(eslint-plugin-jest@27.6.2)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@10.0.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint@8.56.0)(typescript@5.3.3):
+  /@solana/eslint-config-solana@1.0.2(@typescript-eslint/eslint-plugin@6.19.0)(@typescript-eslint/parser@6.19.0)(eslint-plugin-jest@27.6.3)(eslint-plugin-react-hooks@4.6.0)(eslint-plugin-simple-import-sort@10.0.0)(eslint-plugin-sort-keys-fix@1.1.2)(eslint@8.56.0)(typescript@5.3.3):
     resolution: {integrity: sha512-/mBi2xFsX0fq3ukZ3ugA+Zh2+Ct+bh713ZSdOJAv1G7ARzyOEDxmiUz8TLzHu4joOC/3Ok4Yl7cjupOcIRzMHw==}
     peerDependencies:
       '@typescript-eslint/eslint-plugin': ^6.0.0
@@ -2397,10 +2397,10 @@ packages:
       eslint-plugin-sort-keys-fix: ^1.1.2
       typescript: ^5.1.6
     dependencies:
-      '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
-      '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       eslint: 8.56.0
-      eslint-plugin-jest: 27.6.2(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3)
+      eslint-plugin-jest: 27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3)
       eslint-plugin-react-hooks: 4.6.0(eslint@8.56.0)
       eslint-plugin-simple-import-sort: 10.0.0(eslint@8.56.0)
       eslint-plugin-sort-keys-fix: 1.1.2
@@ -2428,12 +2428,12 @@ packages:
       '@solana/codecs-numbers': 2.0.0-experimental.9741939
     dev: false
 
-  /@solana/prettier-config-solana@0.0.4(prettier@3.1.1):
+  /@solana/prettier-config-solana@0.0.4(prettier@3.2.4):
     resolution: {integrity: sha512-8kNkSb7h4DkJlDn4C8v0V2IJQhAswPE4kHE45xAp6eKDEJw7PlHsiYIm46A6owpr57W3KS/xnTVVGE4p/5PijA==}
     peerDependencies:
       prettier: ^3.1.0
     dependencies:
-      prettier: 3.1.1
+      prettier: 3.2.4
     dev: true
 
   /@solana/rpc-core@2.0.0-experimental.21e994f:
@@ -2460,8 +2460,8 @@ packages:
       '@solana/keys': 2.0.0-experimental.21e994f
     dev: false
 
-  /@solana/web3.js@1.89.0:
-    resolution: {integrity: sha512-b6PJxNL/DX+J2zccj3kzxZ6HyUF92tc8L9CjMlnTYKCdotAk163ygQ/jbHDT0yYs7pGeXAszyLuaqUXJ8bxwpA==}
+  /@solana/web3.js@1.89.1:
+    resolution: {integrity: sha512-t9TTLtPQxtQB3SAf/5E8xPXfVDsC6WGOsgKY02l2cbe0HLymT7ynE8Hu48Lk5qynHCquj6nhISfEHcjMkYpu/A==}
     dependencies:
       '@babel/runtime': 7.23.7
       '@noble/curves': 1.2.0
@@ -2548,7 +2548,7 @@ packages:
   /@types/bn.js@5.1.5:
     resolution: {integrity: sha512-V46N0zwKRF5Q00AZ6hWtN0T8gGmDUaUzLWQvHFo5yThtVwK/VCenFY3wXVbOvNfajEpsTfQM4IN9k/d6gUVX3A==}
     dependencies:
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
     dev: true
 
   /@types/chai-as-promised@7.1.8:
@@ -2564,7 +2564,7 @@ packages:
   /@types/connect@3.4.38:
     resolution: {integrity: sha512-K6uROf1LD88uDQqJCktA4yzL1YYAK6NgfsI0v/mTgyPKWsX1CnJ0XPSDhViejru1GcRkLWb8RlzFYJRqGUbaug==}
     dependencies:
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
 
   /@types/eslint-plugin-prettier@3.1.3:
     resolution: {integrity: sha512-Jk+lgBZM0u9ETUyqe2HvykL1j6uE7L1oEqbInWtsVHT6sP+AdwLb4ncmQBqASTS+YzYOPF6hKX0zgEhblRMjqA==}
@@ -2586,7 +2586,7 @@ packages:
   /@types/graceful-fs@4.1.9:
     resolution: {integrity: sha512-olP3sd1qOEe5dXTSaFvQG+02VdRXcdytWLAZsAq1PecU8uqQAhkrnbli7DagjtXKW/Bl7YJbUsa8MPcuc8LHEQ==}
     dependencies:
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
     dev: true
 
   /@types/istanbul-lib-coverage@2.0.6:
@@ -2624,18 +2624,18 @@ packages:
     resolution: {integrity: sha512-dJvrYWxP/UcXm36Qn36fxhUKu8A/xMRXVT2cliFF1Z7UA9liG5Psj3ezNSZw+5puH2czDXRLcXQxf8JbJt0ejg==}
     dev: true
 
-  /@types/node-fetch@2.6.10:
-    resolution: {integrity: sha512-PPpPK6F9ALFTn59Ka3BaL+qGuipRfxNE8qVgkp0bVixeiR2c2/L+IVOiBdu9JhhT22sWnQEp6YyHGI2b2+CMcA==}
+  /@types/node-fetch@2.6.11:
+    resolution: {integrity: sha512-24xFj9R5+rfQJLRyM56qh+wnVSYhyXC2tkoBndtY0U+vubqNsYXGjufB2nn8Q6gt0LrARwL6UBtMCSVCwl4B1g==}
     dependencies:
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       form-data: 4.0.0
     dev: true
 
   /@types/node@12.20.55:
     resolution: {integrity: sha512-J8xLz7q2OFulZ2cyGTLE1TbbZcjpno7FaN6zdJNrgAdrJ+DZzh/uFR6YrTb4C+nXakvud8Q4+rbhoIWlYQbUFQ==}
 
-  /@types/node@20.11.0:
-    resolution: {integrity: sha512-o9bjXmDNcF7GbM4CNQpmi+TutCgap/K3w1JyKgxAjqx41zp9qlIAVFi0IhCNsJcXolEqLWhbFbEeL0PvYm4pcQ==}
+  /@types/node@20.11.5:
+    resolution: {integrity: sha512-g557vgQjUUfN76MZAN/dt1z3dzcUsimuysco0KeluHgrPdJXkP/XdAURgyO2W9fZWHRtRBiVKzKn8vyOAwlG+w==}
     dependencies:
       undici-types: 5.26.5
 
@@ -2654,7 +2654,7 @@ packages:
   /@types/ws@7.4.7:
     resolution: {integrity: sha512-JQbbmxZTZehdc2iszGKs5oC3NFnjeay7mtAWrdt7qNtAVK0g19muApzAy4bm9byz79xa2ZnO/BOBC2R8RC5Lww==}
     dependencies:
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
 
   /@types/yargs-parser@21.0.3:
     resolution: {integrity: sha512-I4q9QU9MQv4oEOz4tAHJtNz1cwuLxn2F3xcc2iV5WdqLPpUnj30aUuxt1mAxYTG+oe8CZMV/+6rU4S4gRDzqtQ==}
@@ -2666,8 +2666,8 @@ packages:
       '@types/yargs-parser': 21.0.3
     dev: true
 
-  /@typescript-eslint/eslint-plugin@6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3):
-    resolution: {integrity: sha512-nISDRYnnIpk7VCFrGcu1rnZfM1Dh9LRHnfgdkjcbi/l7g16VYRri3TjXi9Ir4lOZSw5N/gnV/3H7jIPQ8Q4daA==}
+  /@typescript-eslint/eslint-plugin@6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3):
+    resolution: {integrity: sha512-DUCUkQNklCQYnrBSSikjVChdc84/vMPDQSgJTHBZ64G9bA9w0Crc0rd2diujKbTdp6w2J47qkeHQLoi0rpLCdg==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
       '@typescript-eslint/parser': ^6.0.0 || ^6.0.0-alpha
@@ -2678,11 +2678,11 @@ packages:
         optional: true
     dependencies:
       '@eslint-community/regexpp': 4.10.0
-      '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
-      '@typescript-eslint/scope-manager': 6.18.1
-      '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
-      '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
-      '@typescript-eslint/visitor-keys': 6.18.1
+      '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/scope-manager': 6.19.0
+      '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/visitor-keys': 6.19.0
       debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.56.0
       graphemer: 1.4.0
@@ -2695,8 +2695,8 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/parser@6.18.1(eslint@8.56.0)(typescript@5.3.3):
-    resolution: {integrity: sha512-zct/MdJnVaRRNy9e84XnVtRv9Vf91/qqe+hZJtKanjojud4wAVy/7lXxJmMyX6X6J+xc6c//YEWvpeif8cAhWA==}
+  /@typescript-eslint/parser@6.19.0(eslint@8.56.0)(typescript@5.3.3):
+    resolution: {integrity: sha512-1DyBLG5SH7PYCd00QlroiW60YJ4rWMuUGa/JBV0iZuqi4l4IK3twKPq5ZkEebmGqRjXWVgsUzfd3+nZveewgow==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0
@@ -2705,10 +2705,10 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/scope-manager': 6.18.1
-      '@typescript-eslint/types': 6.18.1
-      '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3)
-      '@typescript-eslint/visitor-keys': 6.18.1
+      '@typescript-eslint/scope-manager': 6.19.0
+      '@typescript-eslint/types': 6.19.0
+      '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3)
+      '@typescript-eslint/visitor-keys': 6.19.0
       debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.56.0
       typescript: 5.3.3
@@ -2732,16 +2732,16 @@ packages:
       '@typescript-eslint/visitor-keys': 6.10.0
     dev: true
 
-  /@typescript-eslint/scope-manager@6.18.1:
-    resolution: {integrity: sha512-BgdBwXPFmZzaZUuw6wKiHKIovms97a7eTImjkXCZE04TGHysG+0hDQPmygyvgtkoB/aOQwSM/nWv3LzrOIQOBw==}
+  /@typescript-eslint/scope-manager@6.19.0:
+    resolution: {integrity: sha512-dO1XMhV2ehBI6QN8Ufi7I10wmUovmLU0Oru3n5LVlM2JuzB4M+dVphCPLkVpKvGij2j/pHBWuJ9piuXx+BhzxQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
     dependencies:
-      '@typescript-eslint/types': 6.18.1
-      '@typescript-eslint/visitor-keys': 6.18.1
+      '@typescript-eslint/types': 6.19.0
+      '@typescript-eslint/visitor-keys': 6.19.0
     dev: true
 
-  /@typescript-eslint/type-utils@6.18.1(eslint@8.56.0)(typescript@5.3.3):
-    resolution: {integrity: sha512-wyOSKhuzHeU/5pcRDP2G2Ndci+4g653V43gXTpt4nbyoIOAASkGDA9JIAgbQCdCkcr1MvpSYWzxTz0olCn8+/Q==}
+  /@typescript-eslint/type-utils@6.19.0(eslint@8.56.0)(typescript@5.3.3):
+    resolution: {integrity: sha512-mcvS6WSWbjiSxKCwBcXtOM5pRkPQ6kcDds/juxcy/727IQr3xMEcwr/YLHW2A2+Fp5ql6khjbKBzOyjuPqGi/w==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0
@@ -2750,8 +2750,8 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3)
-      '@typescript-eslint/utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3)
+      '@typescript-eslint/utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       debug: 4.3.4(supports-color@8.1.1)
       eslint: 8.56.0
       ts-api-utils: 1.0.3(typescript@5.3.3)
@@ -2770,8 +2770,8 @@ packages:
     engines: {node: ^16.0.0 || >=18.0.0}
     dev: true
 
-  /@typescript-eslint/types@6.18.1:
-    resolution: {integrity: sha512-4TuMAe+tc5oA7wwfqMtB0Y5OrREPF1GeJBAjqwgZh1lEMH5PJQgWgHGfYufVB51LtjD+peZylmeyxUXPfENLCw==}
+  /@typescript-eslint/types@6.19.0:
+    resolution: {integrity: sha512-lFviGV/vYhOy3m8BJ/nAKoAyNhInTdXpftonhWle66XHAtT1ouBlkjL496b5H5hb8dWXHwtypTqgtb/DEa+j5A==}
     engines: {node: ^16.0.0 || >=18.0.0}
     dev: true
 
@@ -2817,8 +2817,8 @@ packages:
       - supports-color
     dev: true
 
-  /@typescript-eslint/typescript-estree@6.18.1(typescript@5.3.3):
-    resolution: {integrity: sha512-fv9B94UAhywPRhUeeV/v+3SBDvcPiLxRZJw/xZeeGgRLQZ6rLMG+8krrJUyIf6s1ecWTzlsbp0rlw7n9sjufHA==}
+  /@typescript-eslint/typescript-estree@6.19.0(typescript@5.3.3):
+    resolution: {integrity: sha512-o/zefXIbbLBZ8YJ51NlkSAt2BamrK6XOmuxSR3hynMIzzyMY33KuJ9vuMdFSXW+H0tVvdF9qBPTHA91HDb4BIQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
       typescript: '*'
@@ -2826,8 +2826,8 @@ packages:
       typescript:
         optional: true
     dependencies:
-      '@typescript-eslint/types': 6.18.1
-      '@typescript-eslint/visitor-keys': 6.18.1
+      '@typescript-eslint/types': 6.19.0
+      '@typescript-eslint/visitor-keys': 6.19.0
       debug: 4.3.4(supports-color@8.1.1)
       globby: 11.1.0
       is-glob: 4.0.3
@@ -2878,8 +2878,8 @@ packages:
       - typescript
     dev: true
 
-  /@typescript-eslint/utils@6.18.1(eslint@8.56.0)(typescript@5.3.3):
-    resolution: {integrity: sha512-zZmTuVZvD1wpoceHvoQpOiewmWu3uP9FuTWo8vqpy2ffsmfCE8mklRPi+vmnIYAIk9t/4kOThri2QCDgor+OpQ==}
+  /@typescript-eslint/utils@6.19.0(eslint@8.56.0)(typescript@5.3.3):
+    resolution: {integrity: sha512-QR41YXySiuN++/dC9UArYOg4X86OAYP83OWTewpVx5ct1IZhjjgTLocj7QNxGhWoTqknsgpl7L+hGygCO+sdYw==}
     engines: {node: ^16.0.0 || >=18.0.0}
     peerDependencies:
       eslint: ^7.0.0 || ^8.0.0
@@ -2887,9 +2887,9 @@ packages:
       '@eslint-community/eslint-utils': 4.4.0(eslint@8.56.0)
       '@types/json-schema': 7.0.15
       '@types/semver': 7.5.5
-      '@typescript-eslint/scope-manager': 6.18.1
-      '@typescript-eslint/types': 6.18.1
-      '@typescript-eslint/typescript-estree': 6.18.1(typescript@5.3.3)
+      '@typescript-eslint/scope-manager': 6.19.0
+      '@typescript-eslint/types': 6.19.0
+      '@typescript-eslint/typescript-estree': 6.19.0(typescript@5.3.3)
       eslint: 8.56.0
       semver: 7.5.4
     transitivePeerDependencies:
@@ -2913,11 +2913,11 @@ packages:
       eslint-visitor-keys: 3.4.3
     dev: true
 
-  /@typescript-eslint/visitor-keys@6.18.1:
-    resolution: {integrity: sha512-/kvt0C5lRqGoCfsbmm7/CwMqoSkY3zzHLIjdhHZQW3VFrnz7ATecOHR7nb7V+xn4286MBxfnQfQhAmCI0u+bJA==}
+  /@typescript-eslint/visitor-keys@6.19.0:
+    resolution: {integrity: sha512-hZaUCORLgubBvtGpp1JEFEazcuEdfxta9j4iUwdSAr7mEsYYAp3EAUyCZk3VEEqGj6W+AV4uWyrDGtrlawAsgQ==}
     engines: {node: ^16.0.0 || >=18.0.0}
     dependencies:
-      '@typescript-eslint/types': 6.18.1
+      '@typescript-eslint/types': 6.19.0
       eslint-visitor-keys: 3.4.3
     dev: true
 
@@ -3799,7 +3799,7 @@ packages:
     engines: {node: ^12.20.0 || ^14.13.1 || >=16.0.0}
     dev: true
 
-  /create-jest@29.7.0(@types/node@20.11.0)(ts-node@10.9.2):
+  /create-jest@29.7.0(@types/node@20.11.5)(ts-node@10.9.2):
     resolution: {integrity: sha512-Adz2bdH0Vq3F53KEMJOoftQFutWCukm6J24wbPWRO4k1kMY7gS7ds/uoJkNuV8wDCtWWnuwGcJwpWcih+zEW1Q==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -3808,7 +3808,7 @@ packages:
       chalk: 4.1.2
       exit: 0.1.2
       graceful-fs: 4.2.11
-      jest-config: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      jest-config: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       jest-util: 29.7.0
       prompts: 2.4.2
     transitivePeerDependencies:
@@ -4239,7 +4239,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
+  /eslint-module-utils@2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0):
     resolution: {integrity: sha512-aWajIYfsqCKRDgUfjEXNN/JlrzauMuSEy5sbd7WXbtW3EH6A6MpwEh42c7qD+MqQo9QMJ6fWLAeIJynx0g6OAw==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -4260,7 +4260,7 @@ packages:
       eslint-import-resolver-webpack:
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       debug: 3.2.7
       eslint: 8.56.0
       eslint-import-resolver-node: 0.3.9
@@ -4301,7 +4301,7 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0):
+  /eslint-plugin-import@2.29.1(@typescript-eslint/parser@6.19.0)(eslint@8.56.0):
     resolution: {integrity: sha512-BbPC0cuExzhiMo4Ff1BTVwHpjjv28C5R+btTOGaCRC7UEz801up0JadwkeSk5Ued6TG34uaczuVuH6qyy5YUxw==}
     engines: {node: '>=4'}
     peerDependencies:
@@ -4311,7 +4311,7 @@ packages:
       '@typescript-eslint/parser':
         optional: true
     dependencies:
-      '@typescript-eslint/parser': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/parser': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       array-includes: 3.1.7
       array.prototype.findlastindex: 1.2.3
       array.prototype.flat: 1.3.2
@@ -4320,7 +4320,7 @@ packages:
       doctrine: 2.1.0
       eslint: 8.56.0
       eslint-import-resolver-node: 0.3.9
-      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.18.1)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
+      eslint-module-utils: 2.8.0(@typescript-eslint/parser@6.19.0)(eslint-import-resolver-node@0.3.9)(eslint@8.56.0)
       hasown: 2.0.0
       is-core-module: 2.13.1
       is-glob: 4.0.3
@@ -4336,8 +4336,8 @@ packages:
       - supports-color
     dev: true
 
-  /eslint-plugin-jest@27.6.2(@typescript-eslint/eslint-plugin@6.18.1)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3):
-    resolution: {integrity: sha512-CI1AlKrsNhYFoP48VU8BVWOi7+qHTq4bRxyUlGjeU8SfFt8abjXhjOuDzUoMp68DoXIx17KpNpIkMrl4s4ZW0g==}
+  /eslint-plugin-jest@27.6.3(@typescript-eslint/eslint-plugin@6.19.0)(eslint@8.56.0)(jest@29.7.0)(typescript@5.3.3):
+    resolution: {integrity: sha512-+YsJFVH6R+tOiO3gCJon5oqn4KWc+mDq2leudk8mrp8RFubLOo9CVyi3cib4L7XMpxExmkmBZQTPDYVBzgpgOA==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
       '@typescript-eslint/eslint-plugin': ^5.0.0 || ^6.0.0
@@ -4349,10 +4349,10 @@ packages:
       jest:
         optional: true
     dependencies:
-      '@typescript-eslint/eslint-plugin': 6.18.1(@typescript-eslint/parser@6.18.1)(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/eslint-plugin': 6.19.0(@typescript-eslint/parser@6.19.0)(eslint@8.56.0)(typescript@5.3.3)
       '@typescript-eslint/utils': 5.62.0(eslint@8.56.0)(typescript@5.3.3)
       eslint: 8.56.0
-      jest: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      jest: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
     transitivePeerDependencies:
       - supports-color
       - typescript
@@ -4369,7 +4369,7 @@ packages:
       rambda: 7.5.0
     dev: true
 
-  /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.1.1):
+  /eslint-plugin-prettier@5.1.3(@types/eslint@8.56.2)(eslint-config-prettier@9.1.0)(eslint@8.56.0)(prettier@3.2.4):
     resolution: {integrity: sha512-C9GCVAs4Eq7ZC/XFQHITLiHJxQngdtraXaM+LoUFoFp/lHNl2Zn8f3WQbe9HvTBBQ9YnKFB0/2Ajdqwo5D1EAw==}
     engines: {node: ^14.18.0 || >=16.0.0}
     peerDependencies:
@@ -4386,7 +4386,7 @@ packages:
       '@types/eslint': 8.56.2
       eslint: 8.56.0
       eslint-config-prettier: 9.1.0(eslint@8.56.0)
-      prettier: 3.1.1
+      prettier: 3.2.4
       prettier-linter-helpers: 1.0.0
       synckit: 0.8.6
     dev: true
@@ -5337,7 +5337,7 @@ packages:
       eslint: '*'
       typescript: '>=4.7.4'
     dependencies:
-      '@typescript-eslint/type-utils': 6.18.1(eslint@8.56.0)(typescript@5.3.3)
+      '@typescript-eslint/type-utils': 6.19.0(eslint@8.56.0)(typescript@5.3.3)
       eslint: 8.56.0
       ts-api-utils: 1.0.3(typescript@5.3.3)
       typescript: 5.3.3
@@ -5594,7 +5594,7 @@ packages:
       '@jest/expect': 29.7.0
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       chalk: 4.1.2
       co: 4.6.0
       dedent: 1.5.1
@@ -5615,7 +5615,7 @@ packages:
       - supports-color
     dev: true
 
-  /jest-cli@29.7.0(@types/node@20.11.0)(ts-node@10.9.2):
+  /jest-cli@29.7.0(@types/node@20.11.5)(ts-node@10.9.2):
     resolution: {integrity: sha512-OVVobw2IubN/GSYsxETi+gOe7Ka59EFMR/twOU3Jb2GnKKeMGJB5SGUUrEz3SFVmJASUdZUzy83sLNNQ2gZslg==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -5629,10 +5629,10 @@ packages:
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
       chalk: 4.1.2
-      create-jest: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      create-jest: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       exit: 0.1.2
       import-local: 3.1.0
-      jest-config: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      jest-config: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       jest-util: 29.7.0
       jest-validate: 29.7.0
       yargs: 17.7.2
@@ -5643,7 +5643,7 @@ packages:
       - ts-node
     dev: true
 
-  /jest-config@29.7.0(@types/node@20.11.0)(ts-node@10.9.2):
+  /jest-config@29.7.0(@types/node@20.11.5)(ts-node@10.9.2):
     resolution: {integrity: sha512-uXbpfeQ7R6TZBqI3/TxCU4q4ttk3u0PJeC+E0zbfSoSjq6bJ7buBPxzQPL0ifrkY4DNu4JUdk0ImlBUYi840eQ==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     peerDependencies:
@@ -5658,7 +5658,7 @@ packages:
       '@babel/core': 7.23.2
       '@jest/test-sequencer': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       babel-jest: 29.7.0(@babel/core@7.23.2)
       chalk: 4.1.2
       ci-info: 3.9.0
@@ -5678,7 +5678,7 @@ packages:
       pretty-format: 29.7.0
       slash: 3.0.0
       strip-json-comments: 3.1.1
-      ts-node: 10.9.2(@types/node@20.11.0)(typescript@5.3.3)
+      ts-node: 10.9.2(@types/node@20.11.5)(typescript@5.3.3)
     transitivePeerDependencies:
       - babel-plugin-macros
       - supports-color
@@ -5719,7 +5719,7 @@ packages:
       '@jest/environment': 29.7.0
       '@jest/fake-timers': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       jest-mock: 29.7.0
       jest-util: 29.7.0
     dev: true
@@ -5735,7 +5735,7 @@ packages:
     dependencies:
       '@jest/types': 29.6.3
       '@types/graceful-fs': 4.1.9
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       anymatch: 3.1.3
       fb-watchman: 2.0.2
       graceful-fs: 4.2.11
@@ -5786,7 +5786,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       jest-util: 29.7.0
     dev: true
 
@@ -5841,7 +5841,7 @@ packages:
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       chalk: 4.1.2
       emittery: 0.13.1
       graceful-fs: 4.2.11
@@ -5872,7 +5872,7 @@ packages:
       '@jest/test-result': 29.7.0
       '@jest/transform': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       chalk: 4.1.2
       cjs-module-lexer: 1.2.3
       collect-v8-coverage: 1.0.2
@@ -5924,7 +5924,7 @@ packages:
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       chalk: 4.1.2
       ci-info: 3.9.0
       graceful-fs: 4.2.11
@@ -5949,7 +5949,7 @@ packages:
     dependencies:
       '@jest/test-result': 29.7.0
       '@jest/types': 29.6.3
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       ansi-escapes: 4.3.2
       chalk: 4.1.2
       emittery: 0.13.1
@@ -5961,13 +5961,13 @@ packages:
     resolution: {integrity: sha512-eIz2msL/EzL9UFTFFx7jBTkeZfku0yUAyZZZmJ93H2TYEiroIx2PQjEXcwYtYl8zXCxb+PAmA2hLIt/6ZEkPHw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     dependencies:
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       jest-util: 29.7.0
       merge-stream: 2.0.0
       supports-color: 8.1.1
     dev: true
 
-  /jest@29.7.0(@types/node@20.11.0)(ts-node@10.9.2):
+  /jest@29.7.0(@types/node@20.11.5)(ts-node@10.9.2):
     resolution: {integrity: sha512-NIy3oAFp9shda19hy4HK0HRTWKtPJmGdnvywu01nOqNC2vZg+Z+fvJDxpMQA88eb2I9EcafcdjYgsDthnYTvGw==}
     engines: {node: ^14.15.0 || ^16.10.0 || >=18.0.0}
     hasBin: true
@@ -5980,7 +5980,7 @@ packages:
       '@jest/core': 29.7.0(ts-node@10.9.2)
       '@jest/types': 29.6.3
       import-local: 3.1.0
-      jest-cli: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      jest-cli: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
     transitivePeerDependencies:
       - '@types/node'
       - babel-plugin-macros
@@ -6772,8 +6772,8 @@ packages:
     hasBin: true
     dev: true
 
-  /prettier@3.1.1:
-    resolution: {integrity: sha512-22UbSzg8luF4UuZtzgiUOfcGM8s4tjBv6dJRT7j275NXsy2jb4aJa4NNveul5x4eqlF1wuhuR2RElK71RvmVaw==}
+  /prettier@3.2.4:
+    resolution: {integrity: sha512-FWu1oLHKCrtpO1ypU6J0SbK2d9Ckwysq6bHj/uaCP26DxrPpppCLQRGVuqAxSTvhF00AcvDRyYrLNW7ocBhFFQ==}
     engines: {node: '>=14'}
     hasBin: true
     dev: true
@@ -6946,7 +6946,7 @@ packages:
       glob: 10.3.10
     dev: true
 
-  /rollup-plugin-dts@6.1.0(rollup@4.9.4)(typescript@5.3.3):
+  /rollup-plugin-dts@6.1.0(rollup@4.9.5)(typescript@5.3.3):
     resolution: {integrity: sha512-ijSCPICkRMDKDLBK9torss07+8dl9UpY9z1N/zTeA1cIqdzMlpkV3MOOC7zukyvQfDyxa1s3Dl2+DeiP/G6DOw==}
     engines: {node: '>=16'}
     peerDependencies:
@@ -6954,32 +6954,32 @@ packages:
       typescript: ^4.5 || ^5.0
     dependencies:
       magic-string: 0.30.5
-      rollup: 4.9.4
+      rollup: 4.9.5
       typescript: 5.3.3
     optionalDependencies:
       '@babel/code-frame': 7.22.13
     dev: true
 
-  /rollup@4.9.4:
-    resolution: {integrity: sha512-2ztU7pY/lrQyXSCnnoU4ICjT/tCG9cdH3/G25ERqE3Lst6vl2BCM5hL2Nw+sslAvAf+ccKsAq1SkKQALyqhR7g==}
+  /rollup@4.9.5:
+    resolution: {integrity: sha512-E4vQW0H/mbNMw2yLSqJyjtkHY9dslf/p0zuT1xehNRqUTBOFMqEjguDvqhXr7N7r/4ttb2jr4T41d3dncmIgbQ==}
     engines: {node: '>=18.0.0', npm: '>=8.0.0'}
     hasBin: true
     dependencies:
       '@types/estree': 1.0.5
     optionalDependencies:
-      '@rollup/rollup-android-arm-eabi': 4.9.4
-      '@rollup/rollup-android-arm64': 4.9.4
-      '@rollup/rollup-darwin-arm64': 4.9.4
-      '@rollup/rollup-darwin-x64': 4.9.4
-      '@rollup/rollup-linux-arm-gnueabihf': 4.9.4
-      '@rollup/rollup-linux-arm64-gnu': 4.9.4
-      '@rollup/rollup-linux-arm64-musl': 4.9.4
-      '@rollup/rollup-linux-riscv64-gnu': 4.9.4
-      '@rollup/rollup-linux-x64-gnu': 4.9.4
-      '@rollup/rollup-linux-x64-musl': 4.9.4
-      '@rollup/rollup-win32-arm64-msvc': 4.9.4
-      '@rollup/rollup-win32-ia32-msvc': 4.9.4
-      '@rollup/rollup-win32-x64-msvc': 4.9.4
+      '@rollup/rollup-android-arm-eabi': 4.9.5
+      '@rollup/rollup-android-arm64': 4.9.5
+      '@rollup/rollup-darwin-arm64': 4.9.5
+      '@rollup/rollup-darwin-x64': 4.9.5
+      '@rollup/rollup-linux-arm-gnueabihf': 4.9.5
+      '@rollup/rollup-linux-arm64-gnu': 4.9.5
+      '@rollup/rollup-linux-arm64-musl': 4.9.5
+      '@rollup/rollup-linux-riscv64-gnu': 4.9.5
+      '@rollup/rollup-linux-x64-gnu': 4.9.5
+      '@rollup/rollup-linux-x64-musl': 4.9.5
+      '@rollup/rollup-win32-arm64-msvc': 4.9.5
+      '@rollup/rollup-win32-ia32-msvc': 4.9.5
+      '@rollup/rollup-win32-x64-msvc': 4.9.5
       fsevents: 2.3.3
     dev: true
 
@@ -7231,7 +7231,7 @@ packages:
     resolution: {integrity: sha512-TS6vYoO/9YJZng7oiLOVyuz8V7yLow5Hp4SLYWW71XM3702v+z9f1fvUBKudRfa4dfpta4tRNufApSiBIALxJQ==}
     engines: {node: '>= 10'}
     dependencies:
-      '@solana/web3.js': 1.89.0
+      '@solana/web3.js': 1.89.1
       bs58: 4.0.1
     optionalDependencies:
       solana-bankrun-darwin-arm64: 0.2.0
@@ -7606,7 +7606,7 @@ packages:
       '@babel/core': 7.23.2
       bs-logger: 0.2.6
       fast-json-stable-stringify: 2.1.0
-      jest: 29.7.0(@types/node@20.11.0)(ts-node@10.9.2)
+      jest: 29.7.0(@types/node@20.11.5)(ts-node@10.9.2)
       jest-util: 29.7.0
       json5: 2.2.3
       lodash.memoize: 4.1.2
@@ -7616,7 +7616,7 @@ packages:
       yargs-parser: 21.1.1
     dev: true
 
-  /ts-node@10.9.2(@types/node@20.11.0)(typescript@5.3.3):
+  /ts-node@10.9.2(@types/node@20.11.5)(typescript@5.3.3):
     resolution: {integrity: sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ==}
     hasBin: true
     peerDependencies:
@@ -7635,7 +7635,7 @@ packages:
       '@tsconfig/node12': 1.0.11
       '@tsconfig/node14': 1.0.3
       '@tsconfig/node16': 1.0.4
-      '@types/node': 20.11.0
+      '@types/node': 20.11.5
       acorn: 8.11.2
       acorn-walk: 8.3.0
       arg: 4.1.3
diff --git a/record/program/Cargo.toml b/record/program/Cargo.toml
index 166ddb126..336eac003 100644
--- a/record/program/Cargo.toml
+++ b/record/program/Cargo.toml
@@ -15,13 +15,13 @@ test-sbf = []
 bytemuck = { version = "1.14.0", features = ["derive"] }
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 thiserror = "1.0"
 spl-pod = { version = "0.1", path = "../../libraries/pod" }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/record/program/src/lib.rs b/record/program/src/lib.rs
index 76ff7aca3..72a77a70a 100644
--- a/record/program/src/lib.rs
+++ b/record/program/src/lib.rs
@@ -11,4 +11,4 @@ pub mod state;
 // version
 pub use solana_program;
 
-solana_program::declare_id!("ReciQBw6sQKH9TVVJQDnbnJ5W7FP539tPHjZhRF4E9r");
+solana_program::declare_id!("recr1L3PCGKLbckBqMNcJhuuyU1zgo8nBhfLVsJNwr5");
diff --git a/shared-memory/program/Cargo.toml b/shared-memory/program/Cargo.toml
index d321767e7..dd02f2402 100644
--- a/shared-memory/program/Cargo.toml
+++ b/shared-memory/program/Cargo.toml
@@ -12,11 +12,11 @@ test-sbf = []
 
 [dependencies]
 arrayref = "0.3.7"
-solana-program = "=1.17.6"
+solana-program = "=1.17.13"
 
 [dev-dependencies]
-solana-program-test = "=1.17.6"
-solana-sdk = "=1.17.6"
+solana-program-test = "=1.17.13"
+solana-sdk = "=1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/single-pool/cli/Cargo.toml b/single-pool/cli/Cargo.toml
index 24a554726..d3b0fe854 100644
--- a/single-pool/cli/Cargo.toml
+++ b/single-pool/cli/Cargo.toml
@@ -17,23 +17,23 @@ serde = "1.0.195"
 serde_derive = "1.0.103"
 serde_json = "1.0.111"
 serde_with = "3.4.0"
-solana-account-decoder = "=1.17.6"
-solana-clap-v3-utils = "=1.17.6"
-solana-cli-config = "=1.17.6"
-solana-cli-output = "=1.17.6"
-solana-client = "=1.17.6"
-solana-logger = "=1.17.6"
-solana-remote-wallet = "=1.17.6"
-solana-sdk = "=1.17.6"
-solana-transaction-status = "=1.17.6"
-solana-vote-program = "=1.17.6"
+solana-account-decoder = "=1.17.13"
+solana-clap-v3-utils = "=1.17.13"
+solana-cli-config = "=1.17.13"
+solana-cli-output = "=1.17.13"
+solana-client = "=1.17.13"
+solana-logger = "=1.17.13"
+solana-remote-wallet = "=1.17.13"
+solana-sdk = "=1.17.13"
+solana-transaction-status = "=1.17.13"
+solana-vote-program = "=1.17.13"
 spl-token = { version = "4.0", path="../../token/program", features = [ "no-entrypoint" ] }
 spl-token-client = { version = "0.8", path="../../token/client" }
 spl-associated-token-account = { version = "2.0", path="../../associated-token-account/program", features = [ "no-entrypoint" ] }
 spl-single-pool = { version = "1.0.0", path="../program", features = [ "no-entrypoint" ] }
 
 [dev-dependencies]
-solana-test-validator = "=1.17.6"
+solana-test-validator = "=1.17.13"
 serial_test = "3.0.0"
 test-case = "3.3"
 tempfile = "3.9.0"
diff --git a/single-pool/js/packages/classic/package.json b/single-pool/js/packages/classic/package.json
index 6581d9bed..6581898c5 100644
--- a/single-pool/js/packages/classic/package.json
+++ b/single-pool/js/packages/classic/package.json
@@ -18,9 +18,9 @@
     "test": "sed -i '1s/.*/{ \"type\": \"module\",/' package.json && NODE_OPTIONS='--loader=tsx' ava ; ret=$?; sed -i '1s/.*/{/' package.json && exit $ret"
   },
   "devDependencies": {
-    "@types/node": "^20.11.0",
+    "@types/node": "^20.11.5",
     "@ava/typescript": "^4.1.0",
-    "@typescript-eslint/eslint-plugin": "^6.18.1",
+    "@typescript-eslint/eslint-plugin": "^6.19.0",
     "ava": "^6.0.1",
     "eslint": "^8.56.0",
     "eslint-config-prettier": "^9.1.0",
@@ -30,7 +30,7 @@
     "typescript": "^5.3.3"
   },
   "dependencies": {
-    "@solana/web3.js": "^1.89.0",
+    "@solana/web3.js": "^1.89.1",
     "@solana/spl-single-pool": "1.0.0"
   },
   "ava": {
diff --git a/single-pool/js/packages/modern/package.json b/single-pool/js/packages/modern/package.json
index fc6d4c749..91a30e417 100644
--- a/single-pool/js/packages/modern/package.json
+++ b/single-pool/js/packages/modern/package.json
@@ -16,8 +16,8 @@
     "lint:fix": "eslint . --fix"
   },
   "devDependencies": {
-    "@types/node": "^20.11.0",
-    "@typescript-eslint/eslint-plugin": "^6.18.1",
+    "@types/node": "^20.11.5",
+    "@typescript-eslint/eslint-plugin": "^6.19.0",
     "eslint": "^8.56.0",
     "eslint-config-prettier": "^9.1.0",
     "eslint-plugin-prettier": "^5.1.3",
diff --git a/single-pool/program/Cargo.toml b/single-pool/program/Cargo.toml
index a6e712750..c7042db7b 100644
--- a/single-pool/program/Cargo.toml
+++ b/single-pool/program/Cargo.toml
@@ -17,16 +17,16 @@ borsh = "0.10"
 num-derive = "0.4"
 num-traits = "0.2"
 num_enum = "0.7.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 solana-security-txt = "1.1.1"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 spl-associated-token-account = { version = "2.0", path = "../../associated-token-account/program", features = [ "no-entrypoint" ] }
 thiserror = "1.0"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
-solana-vote-program = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
+solana-vote-program = "1.17.13"
 test-case = "3.3"
 bincode = "1.3.1"
 rand = "0.8.5"
diff --git a/stake-pool/cli/Cargo.toml b/stake-pool/cli/Cargo.toml
index fa1940ea4..74f321c5c 100644
--- a/stake-pool/cli/Cargo.toml
+++ b/stake-pool/cli/Cargo.toml
@@ -14,15 +14,15 @@ clap = "2.33.3"
 serde = "1.0.195"
 serde_derive = "1.0.130"
 serde_json = "1.0.111"
-solana-account-decoder = "=1.17.6"
-solana-clap-utils = "=1.17.6"
-solana-cli-config = "=1.17.6"
-solana-cli-output = "=1.17.6"
-solana-client = "=1.17.6"
-solana-logger = "=1.17.6"
-solana-program = "=1.17.6"
-solana-remote-wallet = "=1.17.6"
-solana-sdk = "=1.17.6"
+solana-account-decoder = "=1.17.13"
+solana-clap-utils = "=1.17.13"
+solana-cli-config = "=1.17.13"
+solana-cli-output = "=1.17.13"
+solana-client = "=1.17.13"
+solana-logger = "=1.17.13"
+solana-program = "=1.17.13"
+solana-remote-wallet = "=1.17.13"
+solana-sdk = "=1.17.13"
 spl-associated-token-account = { version = "=2.3", path="../../associated-token-account/program", features = [ "no-entrypoint" ] }
 spl-stake-pool = { version = "=1.0.0", path="../program", features = [ "no-entrypoint" ] }
 spl-token = { version = "=4.0", path="../../token/program", features = [ "no-entrypoint" ]  }
diff --git a/stake-pool/js/package.json b/stake-pool/js/package.json
index c86a2127c..68a650fa8 100644
--- a/stake-pool/js/package.json
+++ b/stake-pool/js/package.json
@@ -46,7 +46,7 @@
     "@coral-xyz/borsh": "^0.29.0",
     "@solana/buffer-layout": "^4.0.1",
     "@solana/spl-token": "0.3.11",
-    "@solana/web3.js": "^1.89.0",
+    "@solana/web3.js": "^1.89.1",
     "bn.js": "^5.2.0",
     "buffer": "^6.0.3",
     "superstruct": "^1.0.3"
@@ -61,18 +61,18 @@
     "@rollup/plugin-typescript": "^11.1.6",
     "@types/bn.js": "^5.1.0",
     "@types/jest": "^29.5.11",
-    "@types/node": "^20.11.0",
-    "@types/node-fetch": "^2.6.10",
-    "@typescript-eslint/eslint-plugin": "^6.18.1",
-    "@typescript-eslint/parser": "^6.18.1",
+    "@types/node": "^20.11.5",
+    "@types/node-fetch": "^2.6.11",
+    "@typescript-eslint/eslint-plugin": "^6.19.0",
+    "@typescript-eslint/parser": "^6.19.0",
     "cross-env": "^7.0.3",
     "eslint": "^8.56.0",
     "eslint-config-prettier": "^9.1.0",
     "eslint-plugin-prettier": "^5.1.3",
     "jest": "^29.0.0",
-    "prettier": "^3.1.1",
+    "prettier": "^3.2.4",
     "rimraf": "^5.0.0",
-    "rollup": "^4.9.4",
+    "rollup": "^4.9.5",
     "rollup-plugin-dts": "^6.1.0",
     "ts-jest": "^29.0.0",
     "typescript": "^5.3.3"
diff --git a/stake-pool/program/Cargo.toml b/stake-pool/program/Cargo.toml
index 874a55be1..38b53280b 100644
--- a/stake-pool/program/Cargo.toml
+++ b/stake-pool/program/Cargo.toml
@@ -20,7 +20,7 @@ num-traits = "0.2"
 num_enum = "0.7.2"
 serde = "1.0.195"
 serde_derive = "1.0.103"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 solana-security-txt = "1.1.1"
 spl-math = { version = "0.2", path = "../../libraries/math", features = [ "no-entrypoint" ] }
 spl-pod = { version = "0.1", path = "../../libraries/pod", features = ["borsh"] }
@@ -31,9 +31,9 @@ bincode = "1.3.1"
 [dev-dependencies]
 assert_matches = "1.5.0"
 proptest = "1.4"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
-solana-vote-program = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
+solana-vote-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 test-case = "3.3"
 
diff --git a/stateless-asks/program/Cargo.toml b/stateless-asks/program/Cargo.toml
index b8721df30..50c37a201 100644
--- a/stateless-asks/program/Cargo.toml
+++ b/stateless-asks/program/Cargo.toml
@@ -12,14 +12,14 @@ test-sbf = []
 
 [dependencies]
 borsh = "0.10"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-associated-token-account = {version = "2.0", path = "../../associated-token-account/program", features = ["no-entrypoint"]}
 thiserror = "1.0"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/token-collection/program/Cargo.toml b/token-collection/program/Cargo.toml
index 4189007d2..e929c8c7f 100644
--- a/token-collection/program/Cargo.toml
+++ b/token-collection/program/Cargo.toml
@@ -12,7 +12,7 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-pod = { version = "0.1.0", path = "../../libraries/pod" }
 spl-program-error = { version = "0.3.0" , path = "../../libraries/program-error" }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
@@ -22,8 +22,8 @@ spl-token-metadata-interface = { version = "0.2", path = "../../token-metadata/i
 spl-type-length-value = { version = "0.3.0", path = "../../libraries/type-length-value" }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-discriminator = { version = "0.1.0", path = "../../libraries/discriminator" }
 spl-token-client = { version = "0.8", path = "../../token/client" }
 
diff --git a/token-group/example/Cargo.toml b/token-group/example/Cargo.toml
index cdac004be..c3fe78b50 100644
--- a/token-group/example/Cargo.toml
+++ b/token-group/example/Cargo.toml
@@ -12,15 +12,15 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-pod = { version = "0.1.0", path = "../../libraries/pod" }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
 spl-token-group-interface = { version = "0.1.0", path = "../interface" }
 spl-type-length-value = { version = "0.3.0", path = "../../libraries/type-length-value" }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-discriminator = { version = "0.1.0", path = "../../libraries/discriminator" }
 spl-token-client = { version = "0.8", path = "../../token/client" }
 spl-token-metadata-interface = { version = "0.2", path = "../../token-metadata/interface" }
diff --git a/token-group/interface/Cargo.toml b/token-group/interface/Cargo.toml
index 38d184f45..d79395cc3 100644
--- a/token-group/interface/Cargo.toml
+++ b/token-group/interface/Cargo.toml
@@ -9,7 +9,7 @@ edition = "2021"
 
 [dependencies]
 bytemuck = "1.14.0"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-discriminator = { version = "0.1.0" , path = "../../libraries/discriminator" }
 spl-pod = { version = "0.1.0" , path = "../../libraries/pod", features = ["borsh"] }
 spl-program-error = { version = "0.3.0" , path = "../../libraries/program-error" }
diff --git a/token-group/js/package.json b/token-group/js/package.json
index cc694b24b..2001c57ea 100644
--- a/token-group/js/package.json
+++ b/token-group/js/package.json
@@ -44,7 +44,7 @@
         "watch": "tsc --build --verbose --watch tsconfig.all.json"
     },
     "peerDependencies": {
-        "@solana/web3.js": "^1.89.0"
+        "@solana/web3.js": "^1.89.1"
     },
     "dependencies": {
         "@solana/codecs-data-structures": "2.0.0-experimental.9741939",
@@ -54,12 +54,12 @@
         "@solana/spl-type-length-value": "0.1.0"
     },
     "devDependencies": {
-        "@solana/web3.js": "^1.89.0",
+        "@solana/web3.js": "^1.89.1",
         "@types/chai": "^4.3.11",
         "@types/mocha": "^10.0.6",
-        "@types/node": "^20.11.0",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser": "^6.18.1",
+        "@types/node": "^20.11.5",
+        "@typescript-eslint/eslint-plugin": "^6.19.0",
+        "@typescript-eslint/parser": "^6.19.0",
         "chai": "^4.3.6",
         "eslint": "^8.55.0",
         "eslint-config-prettier": "^9.1.0",
@@ -67,7 +67,7 @@
         "eslint-plugin-require-extensions": "^0.1.1",
         "gh-pages": "^6.1.1",
         "mocha": "^10.1.0",
-        "prettier": "^3.1.1",
+        "prettier": "^3.2.4",
         "shx": "^0.3.4",
         "ts-node": "^10.9.2",
         "tslib": "^2.3.1",
diff --git a/token-group/js/tsconfig.json b/token-group/js/tsconfig.json
index 2f9b239bf..faff0d68f 100644
--- a/token-group/js/tsconfig.json
+++ b/token-group/js/tsconfig.json
@@ -3,6 +3,6 @@
     "include": ["src", "test"],
     "compilerOptions": {
         "noEmit": true,
-        "skipLibCheck": true
-    }
+        "skipLibCheck": true,
+    },
 }
diff --git a/token-lending/cli/Cargo.toml b/token-lending/cli/Cargo.toml
index 9457255fe..ad721d98c 100644
--- a/token-lending/cli/Cargo.toml
+++ b/token-lending/cli/Cargo.toml
@@ -10,12 +10,12 @@ version = "0.2.0"
 
 [dependencies]
 clap = "2.33.3"
-solana-clap-utils = "=1.17.6"
-solana-cli-config = "=1.17.6"
-solana-client = "=1.17.6"
-solana-logger = "=1.17.6"
-solana-sdk = "=1.17.6"
-solana-program = "=1.17.6"
+solana-clap-utils = "=1.17.13"
+solana-cli-config = "=1.17.13"
+solana-client = "=1.17.13"
+solana-logger = "=1.17.13"
+solana-sdk = "=1.17.13"
+solana-program = "=1.17.13"
 spl-token-lending = { version = "0.2", path="../program", features = [ "no-entrypoint" ] }
 spl-token = { version = "4.0", path="../../token/program", features = [ "no-entrypoint" ]  }
 
diff --git a/token-lending/flash_loan_receiver/Cargo.toml b/token-lending/flash_loan_receiver/Cargo.toml
index 2a0af2474..e92041078 100644
--- a/token-lending/flash_loan_receiver/Cargo.toml
+++ b/token-lending/flash_loan_receiver/Cargo.toml
@@ -5,7 +5,7 @@ edition = "2021"
 
 [dependencies]
 arrayref = "0.3.7"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features=["no-entrypoint"] }
 
 [lib]
diff --git a/token-lending/js/package.json b/token-lending/js/package.json
index fcf1a0034..551a5f3ac 100644
--- a/token-lending/js/package.json
+++ b/token-lending/js/package.json
@@ -45,18 +45,18 @@
         "@rollup/plugin-node-resolve": "^15.0.2",
         "@rollup/plugin-typescript": "^11.1.6",
         "@solana/spl-token": "0.3.11",
-        "@solana/web3.js": "^1.89.0",
+        "@solana/web3.js": "^1.89.1",
         "@types/eslint": "^8.56.2",
         "@types/eslint-plugin-prettier": "^3.1.0",
-        "@types/node": "^20.11.0",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser": "^6.18.1",
+        "@types/node": "^20.11.5",
+        "@typescript-eslint/eslint-plugin": "^6.19.0",
+        "@typescript-eslint/parser": "^6.19.0",
         "eslint": "^8.56.0",
         "eslint-config-prettier": "^9.1.0",
         "eslint-plugin-prettier": "^5.1.3",
         "gh-pages": "^6.1.1",
-        "prettier": "^3.1.1",
-        "rollup": "^4.9.4",
+        "prettier": "^3.2.4",
+        "rollup": "^4.9.5",
         "ts-node": "^10.9.2",
         "tslib": "^2.3.0",
         "typedoc": "^0.25.7",
diff --git a/token-lending/js/tsconfig.json b/token-lending/js/tsconfig.json
index 9a8ce86d2..166e3bdce 100644
--- a/token-lending/js/tsconfig.json
+++ b/token-lending/js/tsconfig.json
@@ -10,13 +10,13 @@
         "declaration": true,
         "moduleResolution": "node",
         "stripInternal": true,
-        "skipLibCheck": true
+        "skipLibCheck": true,
     },
     "files": ["rollup.config.ts"],
     "include": ["src"],
     "exclude": ["lib", "node_modules"],
     "typedocOptions": {
         "entryPoints": ["src/index.ts"],
-        "out": "docs"
-    }
+        "out": "docs",
+    },
 }
diff --git a/token-lending/program/Cargo.toml b/token-lending/program/Cargo.toml
index c781864e8..151b556a8 100644
--- a/token-lending/program/Cargo.toml
+++ b/token-lending/program/Cargo.toml
@@ -16,7 +16,7 @@ arrayref = "0.3.7"
 bytemuck = "1.14.0"
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 thiserror = "1.0"
 uint = "0.9"
@@ -24,8 +24,8 @@ uint = "0.9"
 [dev-dependencies]
 assert_matches = "1.5.0"
 proptest = "1.4"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/token-metadata/example/Cargo.toml b/token-metadata/example/Cargo.toml
index 1df1a07dc..36660799d 100644
--- a/token-metadata/example/Cargo.toml
+++ b/token-metadata/example/Cargo.toml
@@ -12,15 +12,15 @@ no-entrypoint = []
 test-sbf = []
 
 [dependencies]
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
 spl-token-metadata-interface = { version = "0.2.0", path = "../interface" }
 spl-type-length-value = { version = "0.3.0" , path = "../../libraries/type-length-value" }
 spl-pod = { version = "0.1.0", path = "../../libraries/pod" }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-token-client = { version = "0.8", path = "../../token/client" }
 test-case = "3.3"
 
diff --git a/token-metadata/interface/Cargo.toml b/token-metadata/interface/Cargo.toml
index 648245a39..6c3a695cd 100644
--- a/token-metadata/interface/Cargo.toml
+++ b/token-metadata/interface/Cargo.toml
@@ -13,7 +13,7 @@ serde-traits = ["dep:serde", "spl-pod/serde-traits"]
 [dependencies]
 borsh = "0.10"
 serde = { version = "1.0.195", optional = true }
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-discriminator = { version = "0.1" , path = "../../libraries/discriminator" }
 spl-program-error = { version = "0.3" , path = "../../libraries/program-error" }
 spl-type-length-value = { version = "0.3", path = "../../libraries/type-length-value" }
diff --git a/token-metadata/js/package.json b/token-metadata/js/package.json
index bd106bec5..58ac6c794 100644
--- a/token-metadata/js/package.json
+++ b/token-metadata/js/package.json
@@ -44,7 +44,7 @@
         "watch": "tsc --build --verbose --watch tsconfig.all.json"
     },
     "peerDependencies": {
-        "@solana/web3.js": "^1.89.0"
+        "@solana/web3.js": "^1.89.1"
     },
     "dependencies": {
         "@solana/codecs-core": "2.0.0-experimental.9741939",
@@ -55,12 +55,12 @@
         "@solana/spl-type-length-value": "0.1.0"
     },
     "devDependencies": {
-        "@solana/web3.js": "^1.89.0",
+        "@solana/web3.js": "^1.89.1",
         "@types/chai": "^4.3.11",
         "@types/mocha": "^10.0.6",
-        "@types/node": "^20.11.0",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser": "^6.18.1",
+        "@types/node": "^20.11.5",
+        "@typescript-eslint/eslint-plugin": "^6.19.0",
+        "@typescript-eslint/parser": "^6.19.0",
         "chai": "^4.3.6",
         "eslint": "^8.56.0",
         "eslint-config-prettier": "^9.1.0",
@@ -68,7 +68,7 @@
         "eslint-plugin-require-extensions": "^0.1.1",
         "gh-pages": "^6.1.1",
         "mocha": "^10.1.0",
-        "prettier": "^3.1.1",
+        "prettier": "^3.2.4",
         "shx": "^0.3.4",
         "ts-node": "^10.9.2",
         "tslib": "^2.3.1",
diff --git a/token-metadata/js/tsconfig.json b/token-metadata/js/tsconfig.json
index 2f9b239bf..faff0d68f 100644
--- a/token-metadata/js/tsconfig.json
+++ b/token-metadata/js/tsconfig.json
@@ -3,6 +3,6 @@
     "include": ["src", "test"],
     "compilerOptions": {
         "noEmit": true,
-        "skipLibCheck": true
-    }
+        "skipLibCheck": true,
+    },
 }
diff --git a/token-swap/js/package.json b/token-swap/js/package.json
index 1c561b19d..27e1b65e3 100644
--- a/token-swap/js/package.json
+++ b/token-swap/js/package.json
@@ -49,24 +49,24 @@
     "@solana/buffer-layout-utils": "^0.2.0"
   },
   "peerDependencies": {
-    "@solana/web3.js": "^1.89.0"
+    "@solana/web3.js": "^1.89.1"
   },
   "devDependencies": {
     "@solana/spl-token": "0.3.11",
-    "@solana/web3.js": "^1.89.0",
+    "@solana/web3.js": "^1.89.1",
     "@types/bn.js": "^5.1.0",
     "@types/chai-as-promised": "^7.1.4",
     "@types/chai": "^4.3.11",
     "@types/mocha": "^10.0.6",
-    "@typescript-eslint/eslint-plugin": "^6.18.1",
-    "@typescript-eslint/parser": "^6.18.1",
+    "@typescript-eslint/eslint-plugin": "^6.19.0",
+    "@typescript-eslint/parser": "^6.19.0",
     "eslint": "^8.56.0",
     "eslint-plugin-import": "^2.29.1",
     "eslint-config-prettier": "^9.1.0",
     "eslint-plugin-prettier": "^5.1.3",
     "eslint-plugin-require-extensions": "^0.1.1",
     "mocha": "^10.1.0",
-    "prettier": "^3.1.1",
+    "prettier": "^3.2.4",
     "start-server-and-test": "^2.0.3",
     "ts-node": "^10.9.2",
     "typescript": "^5.3.3"
diff --git a/token-swap/program/Cargo.toml b/token-swap/program/Cargo.toml
index 3a9f40a35..3e2f024c0 100644
--- a/token-swap/program/Cargo.toml
+++ b/token-swap/program/Cargo.toml
@@ -17,7 +17,7 @@ arrayref = "0.3.7"
 enum_dispatch = "0.3.12"
 num-derive = "0.4"
 num-traits = "0.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-math = { version = "0.2", path = "../../libraries/math", features = [ "no-entrypoint" ] }
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = [ "no-entrypoint" ] }
@@ -28,7 +28,7 @@ roots = { version = "0.0.8", optional = true }
 [dev-dependencies]
 proptest = "1.4"
 roots = "0.0.8"
-solana-sdk = "1.17.6"
+solana-sdk = "1.17.13"
 test-case = "3.3"
 
 [lib]
diff --git a/token-swap/program/fuzz/Cargo.toml b/token-swap/program/fuzz/Cargo.toml
index 29ca71ea9..6b5fa93f5 100644
--- a/token-swap/program/fuzz/Cargo.toml
+++ b/token-swap/program/fuzz/Cargo.toml
@@ -11,7 +11,7 @@ publish = false
 [dependencies]
 honggfuzz = { version = "0.5.55" }
 arbitrary = { version = "1.3", features = ["derive"] }
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-math = { version = "0.2", path = "../../../libraries/math", features = [ "no-entrypoint" ] }
 spl-token = { version = "4.0", path = "../../../token/program", features = [ "no-entrypoint" ] }
 spl-token-swap = { path = "..", features = ["fuzz", "no-entrypoint"] }
diff --git a/token-upgrade/cli/Cargo.toml b/token-upgrade/cli/Cargo.toml
index 1ba0ef82e..a4cfa87ce 100644
--- a/token-upgrade/cli/Cargo.toml
+++ b/token-upgrade/cli/Cargo.toml
@@ -13,12 +13,12 @@ walkdir = "2"
 [dependencies]
 clap = { version = "3", features = ["cargo"] }
 futures-util = "0.3.30"
-solana-clap-v3-utils = "1.17.6"
-solana-cli-config = "1.17.6"
-solana-client = "1.17.6"
-solana-logger = "1.17.6"
-solana-remote-wallet = "1.17.6"
-solana-sdk = "1.17.6"
+solana-clap-v3-utils = "1.17.13"
+solana-cli-config = "1.17.13"
+solana-client = "1.17.13"
+solana-logger = "1.17.13"
+solana-remote-wallet = "1.17.13"
+solana-sdk = "1.17.13"
 spl-associated-token-account = { version = "2.0", path = "../../associated-token-account/program", features = ["no-entrypoint"] }
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
@@ -27,7 +27,7 @@ spl-token-upgrade = { version = "0.1", path = "../program", features = ["no-entr
 tokio = { version = "1", features = ["full"] }
 
 [dev-dependencies]
-solana-test-validator = "1.17.6"
+solana-test-validator = "1.17.13"
 
 [[bin]]
 name = "spl-token-upgrade"
diff --git a/token-upgrade/program/Cargo.toml b/token-upgrade/program/Cargo.toml
index b1f238a8a..3763f9a5b 100644
--- a/token-upgrade/program/Cargo.toml
+++ b/token-upgrade/program/Cargo.toml
@@ -15,13 +15,13 @@ test-sbf = []
 num-derive = "0.4"
 num-traits = "0.2"
 num_enum = "0.7.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
 thiserror = "1.0"
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-token-client = { version = "0.8", path = "../../token/client" }
 test-case = "3.3"
diff --git a/token-wrap/program/Cargo.toml b/token-wrap/program/Cargo.toml
index 9f98c297c..dda2bf718 100644
--- a/token-wrap/program/Cargo.toml
+++ b/token-wrap/program/Cargo.toml
@@ -14,7 +14,7 @@ test-sbf = []
 [dependencies]
 bytemuck = { version = "1.14.0", features = ["derive"] }
 num_enum = "0.7"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-associated-token-account = { version = "2.0", path = "../../associated-token-account/program", features = ["no-entrypoint"] }
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
diff --git a/token/cli/Cargo.toml b/token/cli/Cargo.toml
index e163aaa58..0e29f36f7 100644
--- a/token/cli/Cargo.toml
+++ b/token/cli/Cargo.toml
@@ -12,22 +12,22 @@ version = "3.3.0"
 walkdir = "2"
 
 [dependencies]
-base64 = "0.21.6"
+base64 = "0.21.7"
 clap = "2.33.3"
 console = "0.15.8"
 futures = "0.3"
 serde = "1.0.195"
 serde_derive = "1.0.103"
 serde_json = "1.0.111"
-solana-account-decoder = "=1.17.6"
-solana-clap-utils = "=1.17.6"
-solana-cli-config = "=1.17.6"
-solana-cli-output = "=1.17.6"
-solana-client = "=1.17.6"
-solana-logger = "=1.17.6"
-solana-remote-wallet = "=1.17.6"
-solana-sdk = "=1.17.6"
-solana-transaction-status = "=1.17.6"
+solana-account-decoder = "=1.17.13"
+solana-clap-utils = "=1.17.13"
+solana-cli-config = "=1.17.13"
+solana-cli-output = "=1.17.13"
+solana-client = "=1.17.13"
+solana-logger = "=1.17.13"
+solana-remote-wallet = "=1.17.13"
+solana-sdk = "=1.17.13"
+solana-transaction-status = "=1.17.13"
 spl-token = { version = "4.0", path = "../program", features = [
   "no-entrypoint",
 ] }
@@ -47,9 +47,9 @@ strum_macros = "0.25"
 tokio = "1.35"
 
 [dev-dependencies]
-solana-test-validator = "=1.17.6"
-assert_cmd = "2.0.12"
-libtest-mimic = "0.6"
+solana-test-validator = "=1.17.13"
+assert_cmd = "2.0.13"
+libtest-mimic = "0.7"
 serial_test = "3.0.0"
 tempfile = "3.9.0"
 
diff --git a/token/cli/src/clap_app.rs b/token/cli/src/clap_app.rs
index 8a1042c03..59f090a11 100644
--- a/token/cli/src/clap_app.rs
+++ b/token/cli/src/clap_app.rs
@@ -777,8 +777,6 @@ pub fn app<'a, 'b>(
                 .arg(
                     Arg::with_name("enable_member")
                         .long("enable-member")
-                        .conflicts_with("group_address")
-                        .conflicts_with("enable_group")
                         .conflicts_with("member_address")
                         .takes_value(false)
                         .help("Enables group member configurations in the mint. The mint authority must initialize the member."),
diff --git a/token/cli/src/command.rs b/token/cli/src/command.rs
index 09c3e68bf..2f3072403 100644
--- a/token/cli/src/command.rs
+++ b/token/cli/src/command.rs
@@ -2876,7 +2876,11 @@ async fn command_configure_confidential_transfer_account(
     // Reallocation (if needed)
     let mut existing_extensions: Vec<ExtensionType> = state_with_extension.get_extension_types()?;
     if !existing_extensions.contains(&ExtensionType::ConfidentialTransferAccount) {
-        existing_extensions.push(ExtensionType::ConfidentialTransferAccount);
+        let mut extra_extensions = vec![ExtensionType::ConfidentialTransferAccount];
+        if existing_extensions.contains(&ExtensionType::TransferFeeAmount) {
+            extra_extensions.push(ExtensionType::ConfidentialTransferFeeAmount);
+        }
+        existing_extensions.extend_from_slice(&extra_extensions);
         let needed_account_len =
             ExtensionType::try_calculate_account_len::<Account>(&existing_extensions)?;
         if needed_account_len > current_account_len {
@@ -2884,7 +2888,7 @@ async fn command_configure_confidential_transfer_account(
                 .reallocate(
                     &token_account_address,
                     &owner,
-                    &[ExtensionType::ConfidentialTransferAccount],
+                    &extra_extensions,
                     &bulk_signers,
                 )
                 .await?;
diff --git a/token/client/Cargo.toml b/token/client/Cargo.toml
index aed22229b..7b491f63a 100644
--- a/token/client/Cargo.toml
+++ b/token/client/Cargo.toml
@@ -12,12 +12,12 @@ async-trait = "0.1"
 curve25519-dalek = "3.2.1"
 futures = "0.3.30"
 futures-util = "0.3"
-solana-banks-interface = "1.17.6"
-solana-cli-output = { version = "1.17.6", optional = true }
-solana-program-test = "1.17.6"
-solana-rpc-client = "1.17.6"
-solana-rpc-client-api = "1.17.6"
-solana-sdk = "1.17.6"
+solana-banks-interface = "1.17.13"
+solana-cli-output = { version = "1.17.13", optional = true }
+solana-program-test = "1.17.13"
+solana-rpc-client = "1.17.13"
+solana-rpc-client-api = "1.17.13"
+solana-sdk = "1.17.13"
 # We never want the entrypoint for ATA, but we want the entrypoint for token when
 # testing token
 spl-associated-token-account = { version = "2.0", path = "../../associated-token-account/program", features = ["no-entrypoint"] }
diff --git a/token/client/src/token.rs b/token/client/src/token.rs
index 1f41aa31b..c6c815e06 100644
--- a/token/client/src/token.rs
+++ b/token/client/src/token.rs
@@ -508,6 +508,7 @@ where
     async fn construct_tx<S: Signers>(
         &self,
         token_instructions: &[Instruction],
+        additional_compute_budget: Option<u32>,
         signing_keypairs: &S,
     ) -> TokenResult<Transaction> {
         let mut instructions = vec![];
@@ -532,6 +533,14 @@ where
 
         instructions.extend_from_slice(token_instructions);
 
+        if let Some(additional_compute_budget) = additional_compute_budget {
+            instructions.push(
+                solana_sdk::compute_budget::ComputeBudgetInstruction::set_compute_unit_limit(
+                    additional_compute_budget,
+                ),
+            );
+        }
+
         let (message, blockhash) =
             if let (Some(nonce_account), Some(nonce_authority), Some(nonce_blockhash)) = (
                 self.nonce_account,
@@ -581,7 +590,7 @@ where
         signing_keypairs: &S,
     ) -> TokenResult<T::SimulationOutput> {
         let transaction = self
-            .construct_tx(token_instructions, signing_keypairs)
+            .construct_tx(token_instructions, None, signing_keypairs)
             .await?;
 
         self.client
@@ -596,7 +605,27 @@ where
         signing_keypairs: &S,
     ) -> TokenResult<T::Output> {
         let transaction = self
-            .construct_tx(token_instructions, signing_keypairs)
+            .construct_tx(token_instructions, None, signing_keypairs)
+            .await?;
+
+        self.client
+            .send_transaction(&transaction)
+            .await
+            .map_err(TokenError::Client)
+    }
+
+    pub async fn process_ixs_with_additional_compute_budget<S: Signers>(
+        &self,
+        token_instructions: &[Instruction],
+        additional_compute_budget: u32,
+        signing_keypairs: &S,
+    ) -> TokenResult<T::Output> {
+        let transaction = self
+            .construct_tx(
+                token_instructions,
+                Some(additional_compute_budget),
+                signing_keypairs,
+            )
             .await?;
 
         self.client
@@ -979,6 +1008,12 @@ where
         let signing_pubkeys = signing_keypairs.pubkeys();
         let multisig_signers = self.get_multisig_signers(authority, &signing_pubkeys);
 
+        let fetch_account_data_fn = |address| {
+            self.client
+                .get_account(address)
+                .map_ok(|opt| opt.map(|acc| acc.data))
+        };
+
         if *destination != self.get_associated_token_address(destination_owner) {
             return Err(TokenError::AccountInvalidAssociatedAddress);
         }
@@ -1006,16 +1041,36 @@ where
                 fee,
             )?);
         } else if let Some(decimals) = self.decimals {
-            instructions.push(instruction::transfer_checked(
-                &self.program_id,
-                source,
-                &self.pubkey,
-                destination,
-                authority,
-                &multisig_signers,
-                amount,
-                decimals,
-            )?);
+            instructions.push(
+                if let Some(transfer_hook_accounts) = &self.transfer_hook_accounts {
+                    let mut instruction = instruction::transfer_checked(
+                        &self.program_id,
+                        source,
+                        self.get_address(),
+                        destination,
+                        authority,
+                        &multisig_signers,
+                        amount,
+                        decimals,
+                    )?;
+                    instruction.accounts.extend(transfer_hook_accounts.clone());
+                    instruction
+                } else {
+                    offchain::create_transfer_checked_instruction_with_extra_metas(
+                        &self.program_id,
+                        source,
+                        self.get_address(),
+                        destination,
+                        authority,
+                        &multisig_signers,
+                        amount,
+                        decimals,
+                        fetch_account_data_fn,
+                    )
+                    .await
+                    .map_err(|_| TokenError::AccountNotFound)?
+                },
+            );
         } else {
             #[allow(deprecated)]
             instructions.push(instruction::transfer(
@@ -2094,20 +2149,32 @@ where
             .new_decryptable_available_balance(transfer_amount, source_aes_key)
             .map_err(|_| TokenError::AccountDecryption)?;
 
-        self.process_ixs(
-            &confidential_transfer::instruction::transfer(
-                &self.program_id,
-                source_account,
-                &self.pubkey,
-                destination_account,
-                new_decryptable_available_balance,
-                source_authority,
-                &multisig_signers,
-                proof_location,
-            )?,
-            signing_keypairs,
+        let mut instructions = confidential_transfer::instruction::transfer(
+            &self.program_id,
+            source_account,
+            self.get_address(),
+            destination_account,
+            new_decryptable_available_balance,
+            source_authority,
+            &multisig_signers,
+            proof_location,
+        )?;
+        offchain::add_extra_account_metas(
+            &mut instructions[0],
+            source_account,
+            self.get_address(),
+            destination_account,
+            source_authority,
+            u64::MAX,
+            |address| {
+                self.client
+                    .get_account(address)
+                    .map_ok(|opt| opt.map(|acc| acc.data))
+            },
         )
         .await
+        .map_err(|_| TokenError::AccountNotFound)?;
+        self.process_ixs(&instructions, signing_keypairs).await
     }
 
     /// Transfer tokens confidentially using split proofs.
@@ -2140,22 +2207,32 @@ where
             .new_decryptable_available_balance(transfer_amount, source_aes_key)
             .map_err(|_| TokenError::AccountDecryption)?;
 
-        self.process_ixs(
-            &[
-                confidential_transfer::instruction::transfer_with_split_proofs(
-                    &self.program_id,
-                    source_account,
-                    &self.pubkey,
-                    destination_account,
-                    new_decryptable_available_balance.into(),
-                    source_authority,
-                    context_state_accounts,
-                    source_decrypt_handles,
-                )?,
-            ],
-            signing_keypairs,
+        let mut instruction = confidential_transfer::instruction::transfer_with_split_proofs(
+            &self.program_id,
+            source_account,
+            self.get_address(),
+            destination_account,
+            new_decryptable_available_balance.into(),
+            source_authority,
+            context_state_accounts,
+            source_decrypt_handles,
+        )?;
+        offchain::add_extra_account_metas(
+            &mut instruction,
+            source_account,
+            self.get_address(),
+            destination_account,
+            source_authority,
+            u64::MAX,
+            |address| {
+                self.client
+                    .get_account(address)
+                    .map_ok(|opt| opt.map(|acc| acc.data))
+            },
         )
         .await
+        .map_err(|_| TokenError::AccountNotFound)?;
+        self.process_ixs(&[instruction], signing_keypairs).await
     }
 
     /// Transfer tokens confidentially using split proofs in parallel
@@ -2206,16 +2283,32 @@ where
             .new_decryptable_available_balance(transfer_amount, source_aes_key)
             .map_err(|_| TokenError::AccountDecryption)?;
 
-        let transfer_instruction = confidential_transfer::instruction::transfer_with_split_proofs(
-            &self.program_id,
+        let mut transfer_instruction =
+            confidential_transfer::instruction::transfer_with_split_proofs(
+                &self.program_id,
+                source_account,
+                self.get_address(),
+                destination_account,
+                new_decryptable_available_balance.into(),
+                source_authority,
+                context_state_accounts,
+                &source_decrypt_handles,
+            )?;
+        offchain::add_extra_account_metas(
+            &mut transfer_instruction,
             source_account,
-            &self.pubkey,
+            self.get_address(),
             destination_account,
-            new_decryptable_available_balance.into(),
             source_authority,
-            context_state_accounts,
-            &source_decrypt_handles,
-        )?;
+            u64::MAX,
+            |address| {
+                self.client
+                    .get_account(address)
+                    .map_ok(|opt| opt.map(|acc| acc.data))
+            },
+        )
+        .await
+        .map_err(|_| TokenError::AccountNotFound)?;
 
         let transfer_with_equality_and_ciphertext_validity = self
             .create_equality_and_ciphertext_validity_proof_context_states_for_transfer_parallel(
@@ -2627,17 +2720,37 @@ where
             .new_decryptable_available_balance(transfer_amount, source_aes_key)
             .map_err(|_| TokenError::AccountDecryption)?;
 
-        self.process_ixs(
-            &confidential_transfer::instruction::transfer_with_fee(
-                &self.program_id,
-                source_account,
-                destination_account,
-                &self.pubkey,
-                new_decryptable_available_balance,
-                source_authority,
-                &multisig_signers,
-                proof_location,
-            )?,
+        // additional compute budget required for `VerifyTransferWithFee`
+        const TRANSFER_WITH_FEE_COMPUTE_BUDGET: u32 = 500_000;
+
+        let mut instructions = confidential_transfer::instruction::transfer_with_fee(
+            &self.program_id,
+            source_account,
+            destination_account,
+            self.get_address(),
+            new_decryptable_available_balance,
+            source_authority,
+            &multisig_signers,
+            proof_location,
+        )?;
+        offchain::add_extra_account_metas(
+            &mut instructions[0],
+            source_account,
+            self.get_address(),
+            destination_account,
+            source_authority,
+            u64::MAX,
+            |address| {
+                self.client
+                    .get_account(address)
+                    .map_ok(|opt| opt.map(|acc| acc.data))
+            },
+        )
+        .await
+        .map_err(|_| TokenError::AccountNotFound)?;
+        self.process_ixs_with_additional_compute_budget(
+            &instructions,
+            TRANSFER_WITH_FEE_COMPUTE_BUDGET,
             signing_keypairs,
         )
         .await
@@ -2673,22 +2786,33 @@ where
             .new_decryptable_available_balance(transfer_amount, source_aes_key)
             .map_err(|_| TokenError::AccountDecryption)?;
 
-        self.process_ixs(
-            &[
-                confidential_transfer::instruction::transfer_with_fee_and_split_proofs(
-                    &self.program_id,
-                    source_account,
-                    &self.pubkey,
-                    destination_account,
-                    new_decryptable_available_balance.into(),
-                    source_authority,
-                    context_state_accounts,
-                    source_decrypt_handles,
-                )?,
-            ],
-            signing_keypairs,
+        let mut instruction =
+            confidential_transfer::instruction::transfer_with_fee_and_split_proofs(
+                &self.program_id,
+                source_account,
+                self.get_address(),
+                destination_account,
+                new_decryptable_available_balance.into(),
+                source_authority,
+                context_state_accounts,
+                source_decrypt_handles,
+            )?;
+        offchain::add_extra_account_metas(
+            &mut instruction,
+            source_account,
+            self.get_address(),
+            destination_account,
+            source_authority,
+            u64::MAX,
+            |address| {
+                self.client
+                    .get_account(address)
+                    .map_ok(|opt| opt.map(|acc| acc.data))
+            },
         )
         .await
+        .map_err(|_| TokenError::AccountNotFound)?;
+        self.process_ixs(&[instruction], signing_keypairs).await
     }
 
     /// Transfer tokens confidentially using split proofs in parallel
@@ -2764,17 +2888,32 @@ where
             .new_decryptable_available_balance(transfer_amount, source_aes_key)
             .map_err(|_| TokenError::AccountDecryption)?;
 
-        let transfer_instruction =
+        let mut transfer_instruction =
             confidential_transfer::instruction::transfer_with_fee_and_split_proofs(
                 &self.program_id,
                 source_account,
-                &self.pubkey,
+                self.get_address(),
                 destination_account,
                 new_decryptable_available_balance.into(),
                 source_authority,
                 context_state_accounts,
                 &source_decrypt_handles,
             )?;
+        offchain::add_extra_account_metas(
+            &mut transfer_instruction,
+            source_account,
+            self.get_address(),
+            destination_account,
+            source_authority,
+            u64::MAX,
+            |address| {
+                self.client
+                    .get_account(address)
+                    .map_ok(|opt| opt.map(|acc| acc.data))
+            },
+        )
+        .await
+        .map_err(|_| TokenError::AccountNotFound)?;
 
         let transfer_with_equality_and_ciphertext_valdity = self
             .create_equality_and_ciphertext_validity_proof_context_states_for_transfer_with_fee_parallel(
diff --git a/token/js/package.json b/token/js/package.json
index e96c4bb86..ae308512b 100644
--- a/token/js/package.json
+++ b/token/js/package.json
@@ -51,7 +51,7 @@
         "deploy:docs": "npm run docs && gh-pages --dest token/js --dist docs --dotfiles"
     },
     "peerDependencies": {
-        "@solana/web3.js": "^1.89.0"
+        "@solana/web3.js": "^1.89.1"
     },
     "dependencies": {
         "@solana/buffer-layout": "^4.0.0",
@@ -62,14 +62,14 @@
     "devDependencies": {
         "@solana/codecs-strings": "2.0.0-experimental.9741939",
         "@solana/spl-memo": "0.2.3",
-        "@solana/web3.js": "^1.89.0",
+        "@solana/web3.js": "^1.89.1",
         "@types/chai-as-promised": "^7.1.4",
         "@types/chai": "^4.3.11",
         "@types/mocha": "^10.0.6",
-        "@types/node": "^20.11.0",
-        "@types/node-fetch": "^2.6.10",
-        "@typescript-eslint/eslint-plugin": "^6.18.1",
-        "@typescript-eslint/parser": "^6.18.1",
+        "@types/node": "^20.11.5",
+        "@types/node-fetch": "^2.6.11",
+        "@typescript-eslint/eslint-plugin": "^6.19.0",
+        "@typescript-eslint/parser": "^6.19.0",
         "chai": "^4.3.6",
         "chai-as-promised": "^7.1.1",
         "eslint": "^8.56.0",
@@ -78,7 +78,7 @@
         "eslint-plugin-require-extensions": "^0.1.1",
         "gh-pages": "^6.1.1",
         "mocha": "^10.1.0",
-        "prettier": "^3.1.1",
+        "prettier": "^3.2.4",
         "process": "^0.11.10",
         "shx": "^0.3.4",
         "start-server-and-test": "^2.0.3",
diff --git a/token/js/src/extensions/transferHook/instructions.ts b/token/js/src/extensions/transferHook/instructions.ts
index 1a5ffcfb6..8a6f2105c 100644
--- a/token/js/src/extensions/transferHook/instructions.ts
+++ b/token/js/src/extensions/transferHook/instructions.ts
@@ -136,62 +136,6 @@ function deEscalateAccountMeta(accountMeta: AccountMeta, accountMetas: AccountMe
     return accountMeta;
 }
 
-/**
- * @deprecated Deprecated since v0.3.12. Please use {@link addExtraAccountMetasForExecute} instead.
- *
- * Add extra accounts needed for transfer hook to an instruction
- *
- * @param connection      Connection to use
- * @param instruction     The transferChecked instruction to add accounts to
- * @param commitment      Commitment to use
- * @param programId       SPL Token program account
- *
- * @return Instruction to add to a transaction
- */
-export async function addExtraAccountsToInstruction(
-    connection: Connection,
-    instruction: TransactionInstruction,
-    mint: PublicKey,
-    commitment?: Commitment,
-    programId = TOKEN_PROGRAM_ID
-): Promise<TransactionInstruction> {
-    if (!programSupportsExtensions(programId)) {
-        throw new TokenUnsupportedInstructionError();
-    }
-
-    const mintInfo = await getMint(connection, mint, commitment, programId);
-    const transferHook = getTransferHook(mintInfo);
-    if (transferHook == null) {
-        return instruction;
-    }
-
-    const extraAccountsAccount = getExtraAccountMetaAddress(mint, transferHook.programId);
-    const extraAccountsInfo = await connection.getAccountInfo(extraAccountsAccount, commitment);
-    if (extraAccountsInfo == null) {
-        return instruction;
-    }
-
-    const extraAccountMetas = getExtraAccountMetas(extraAccountsInfo);
-
-    const accountMetas = instruction.keys;
-
-    for (const extraAccountMeta of extraAccountMetas) {
-        const accountMetaUnchecked = await resolveExtraAccountMeta(
-            connection,
-            extraAccountMeta,
-            accountMetas,
-            instruction.data,
-            transferHook.programId
-        );
-        const accountMeta = deEscalateAccountMeta(accountMetaUnchecked, accountMetas);
-        accountMetas.push(accountMeta);
-    }
-    accountMetas.push({ pubkey: transferHook.programId, isSigner: false, isWritable: false });
-    accountMetas.push({ pubkey: extraAccountsAccount, isSigner: false, isWritable: false });
-
-    return new TransactionInstruction({ keys: accountMetas, programId, data: instruction.data });
-}
-
 /**
  * Construct an `ExecuteInstruction` for a transfer hook program, without the
  * additional accounts
diff --git a/token/js/tsconfig.json b/token/js/tsconfig.json
index 2f9b239bf..faff0d68f 100644
--- a/token/js/tsconfig.json
+++ b/token/js/tsconfig.json
@@ -3,6 +3,6 @@
     "include": ["src", "test"],
     "compilerOptions": {
         "noEmit": true,
-        "skipLibCheck": true
-    }
+        "skipLibCheck": true,
+    },
 }
diff --git a/token/program-2022/Cargo.toml b/token/program-2022/Cargo.toml
index ac0a8ff8a..e55a16a8c 100644
--- a/token/program-2022/Cargo.toml
+++ b/token/program-2022/Cargo.toml
@@ -12,11 +12,13 @@ exclude = ["js/**"]
 no-entrypoint = []
 test-sbf = []
 serde-traits = ["dep:serde", "dep:serde_with", "dep:base64", "spl-pod/serde-traits"]
-default = ["token-group", "zk-ops"]
+default = ["confidential-hook", "token-group", "zk-ops"]
 # Remove this feature once the underlying syscalls are released on all networks
 zk-ops = []
 # Remove this feature once the token group implementation has been audited
 token-group = []
+# Remove this feature once the confidential transfer hook has been audited
+confidential-hook = []
 
 [dependencies]
 arrayref = "0.3.7"
@@ -24,9 +26,9 @@ bytemuck = { version = "1.14.0", features = ["derive"] }
 num-derive = "0.4"
 num-traits = "0.2"
 num_enum = "0.7.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 solana-security-txt = "1.1.1"
-solana-zk-token-sdk = "1.17.6"
+solana-zk-token-sdk = "1.17.13"
 spl-memo = { version = "4.0.0", path = "../../memo/program", features = [ "no-entrypoint" ] }
 spl-token = { version = "4.0",  path = "../program", features = ["no-entrypoint"] }
 spl-token-group-interface = { version = "0.1.0", path = "../../token-group/interface" }
@@ -37,14 +39,14 @@ spl-pod = { version = "0.1.0", path = "../../libraries/pod" }
 thiserror = "1.0"
 serde = { version = "1.0.195", optional = true }
 serde_with = { version = "3.4.0", optional = true }
-base64 = { version = "0.21.6", optional = true }
+base64 = { version = "0.21.7", optional = true }
 
 [dev-dependencies]
 lazy_static = "1.4.0"
 proptest = "1.4"
 serial_test = "3.0.0"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-tlv-account-resolution = { version = "0.5.0", path = "../../libraries/tlv-account-resolution" }
 serde_json = "1.0.111"
 
diff --git a/token/program-2022/src/extension/confidential_transfer/processor.rs b/token/program-2022/src/extension/confidential_transfer/processor.rs
index 71359673d..13e63bf55 100644
--- a/token/program-2022/src/extension/confidential_transfer/processor.rs
+++ b/token/program-2022/src/extension/confidential_transfer/processor.rs
@@ -1,4 +1,6 @@
 // Remove feature once zk ops syscalls are enabled on all networks
+#[cfg(feature = "confidential-hook")]
+use crate::extension::transfer_hook;
 #[cfg(feature = "zk-ops")]
 use {
     crate::extension::non_transferable::NonTransferable,
@@ -445,11 +447,11 @@ fn process_transfer(
     let account_info_iter = &mut accounts.iter();
     let source_account_info = next_account_info(account_info_iter)?;
     let mint_info = next_account_info(account_info_iter)?;
-    let destination_token_account_info = next_account_info(account_info_iter)?;
+    let destination_account_info = next_account_info(account_info_iter)?;
 
     check_program_account(mint_info.owner)?;
-    let mint_data = &mint_info.data.borrow_mut();
-    let mint = StateWithExtensions::<Mint>::unpack(mint_data)?;
+    let mint_data = mint_info.data.borrow_mut();
+    let mint = StateWithExtensions::<Mint>::unpack(&mint_data)?;
 
     if mint.get_extension::<NonTransferable>().is_ok() {
         return Err(TokenError::NonTransferable.into());
@@ -466,7 +468,7 @@ fn process_transfer(
     //   - If the mint is extended for fees and the instruction is not a
     //     self-transfer, then
     //   transfer fee is required.
-    if mint.get_extension::<TransferFeeConfig>().is_err() {
+    let authority_info = if mint.get_extension::<TransferFeeConfig>().is_err() {
         // Transfer fee is not required. Decode the zero-knowledge proof as
         // `TransferData`.
         //
@@ -521,7 +523,7 @@ fn process_transfer(
         )?;
 
         process_destination_for_transfer(
-            destination_token_account_info,
+            destination_account_info,
             mint_info,
             maybe_proof_context.as_ref(),
         )?;
@@ -532,6 +534,7 @@ fn process_transfer(
             executed"
             );
         }
+        authority_info
     } else {
         // Transfer fee is required.
         let transfer_fee_config = mint.get_extension::<TransferFeeConfig>()?;
@@ -608,9 +611,9 @@ fn process_transfer(
             new_source_decryptable_available_balance,
         )?;
 
-        let is_self_transfer = source_account_info.key == destination_token_account_info.key;
+        let is_self_transfer = source_account_info.key == destination_account_info.key;
         process_destination_for_transfer_with_fee(
-            destination_token_account_info,
+            destination_account_info,
             mint_info,
             maybe_proof_context.as_ref(),
             is_self_transfer,
@@ -621,6 +624,43 @@ fn process_transfer(
                 "Context state not fully initialized: returning with no op; transfer is NOT yet executed"
             );
         }
+        authority_info
+    };
+
+    #[cfg(feature = "confidential-hook")]
+    if let Some(program_id) = transfer_hook::get_program_id(&mint) {
+        // set transferring flags, scope the borrow to avoid double-borrow during CPI
+        {
+            let mut source_account_data = source_account_info.data.borrow_mut();
+            let mut source_account =
+                StateWithExtensionsMut::<Account>::unpack(&mut source_account_data)?;
+            transfer_hook::set_transferring(&mut source_account)?;
+        }
+        {
+            let mut destination_account_data = destination_account_info.data.borrow_mut();
+            let mut destination_account =
+                StateWithExtensionsMut::<Account>::unpack(&mut destination_account_data)?;
+            transfer_hook::set_transferring(&mut destination_account)?;
+        }
+
+        // can't doubly-borrow the mint data either
+        drop(mint_data);
+
+        // Since the amount is unknown during a confidential transfer, pass in
+        // u64::MAX as a convention.
+        spl_transfer_hook_interface::onchain::invoke_execute(
+            &program_id,
+            source_account_info.clone(),
+            mint_info.clone(),
+            destination_account_info.clone(),
+            authority_info.clone(),
+            account_info_iter.as_slice(),
+            u64::MAX,
+        )?;
+
+        // unset transferring flag
+        transfer_hook::unset_transferring(source_account_info)?;
+        transfer_hook::unset_transferring(destination_account_info)?;
     }
 
     Ok(())
@@ -696,12 +736,12 @@ fn process_source_for_transfer(
 
 #[cfg(feature = "zk-ops")]
 fn process_destination_for_transfer(
-    destination_token_account_info: &AccountInfo,
+    destination_account_info: &AccountInfo,
     mint_info: &AccountInfo,
     maybe_transfer_proof_context_info: Option<&TransferProofContextInfo>,
 ) -> ProgramResult {
-    check_program_account(destination_token_account_info.owner)?;
-    let destination_token_account_data = &mut destination_token_account_info.data.borrow_mut();
+    check_program_account(destination_account_info.owner)?;
+    let destination_token_account_data = &mut destination_account_info.data.borrow_mut();
     let mut destination_token_account =
         StateWithExtensionsMut::<Account>::unpack(destination_token_account_data)?;
 
@@ -824,13 +864,13 @@ fn process_source_for_transfer_with_fee(
 
 #[cfg(feature = "zk-ops")]
 fn process_destination_for_transfer_with_fee(
-    destination_token_account_info: &AccountInfo,
+    destination_account_info: &AccountInfo,
     mint_info: &AccountInfo,
     maybe_proof_context: Option<&TransferWithFeeProofContextInfo>,
     is_self_transfer: bool,
 ) -> ProgramResult {
-    check_program_account(destination_token_account_info.owner)?;
-    let destination_token_account_data = &mut destination_token_account_info.data.borrow_mut();
+    check_program_account(destination_account_info.owner)?;
+    let destination_token_account_data = &mut destination_account_info.data.borrow_mut();
     let mut destination_token_account =
         StateWithExtensionsMut::<Account>::unpack(destination_token_account_data)?;
 
diff --git a/token/program-2022/src/offchain.rs b/token/program-2022/src/offchain.rs
index 654517721..ae4edcc6d 100644
--- a/token/program-2022/src/offchain.rs
+++ b/token/program-2022/src/offchain.rs
@@ -11,58 +11,6 @@ use {
     std::future::Future,
 };
 
-/// Offchain helper to get all additional required account metas for a checked
-/// transfer
-///
-/// To be client-agnostic and to avoid pulling in the full solana-sdk, this
-/// simply takes a function that will return its data as `Future<Vec<u8>>` for
-/// the given address. Can be called in the following way:
-///
-/// ```rust,ignore
-/// use futures_util::TryFutureExt;
-/// use solana_client::nonblocking::rpc_client::RpcClient;
-/// use solana_program::pubkey::Pubkey;
-///
-/// let mint = Pubkey::new_unique();
-/// let client = RpcClient::new_mock("succeeds".to_string());
-/// let mut account_metas = vec![];
-///
-/// get_extra_transfer_account_metas(
-///     &mut account_metas,
-///     |address| self.client.get_account(&address).map_ok(|opt| opt.map(|acc| acc.data)),
-///     &mint,
-/// ).await?;
-/// ```
-#[deprecated(
-    since = "1.1.0",
-    note = "Please use `create_transfer_checked_instruction_with_extra_metas` instead"
-)]
-pub async fn resolve_extra_transfer_account_metas<F, Fut>(
-    instruction: &mut Instruction,
-    fetch_account_data_fn: F,
-    mint_address: &Pubkey,
-) -> Result<(), AccountFetchError>
-where
-    F: Fn(Pubkey) -> Fut,
-    Fut: Future<Output = AccountDataResult>,
-{
-    let mint_data = fetch_account_data_fn(*mint_address)
-        .await?
-        .ok_or(ProgramError::InvalidAccountData)?;
-    let mint = StateWithExtensions::<Mint>::unpack(&mint_data)?;
-    if let Some(program_id) = transfer_hook::get_program_id(&mint) {
-        #[allow(deprecated)]
-        spl_transfer_hook_interface::offchain::resolve_extra_account_metas(
-            instruction,
-            fetch_account_data_fn,
-            mint_address,
-            &program_id,
-        )
-        .await?;
-    }
-    Ok(())
-}
-
 /// Offchain helper to create a `TransferChecked` instruction with all
 /// additional required account metas for a transfer, including the ones
 /// required by the transfer hook.
@@ -112,6 +60,61 @@ where
         decimals,
     )?;
 
+    add_extra_account_metas(
+        &mut transfer_instruction,
+        source_pubkey,
+        mint_pubkey,
+        destination_pubkey,
+        authority_pubkey,
+        amount,
+        fetch_account_data_fn,
+    )
+    .await?;
+
+    Ok(transfer_instruction)
+}
+
+/// Offchain helper to add required account metas to an instruction, including
+/// the ones required by the transfer hook.
+///
+/// To be client-agnostic and to avoid pulling in the full solana-sdk, this
+/// simply takes a function that will return its data as `Future<Vec<u8>>` for
+/// the given address. Can be called in the following way:
+///
+/// ```rust,ignore
+/// let mut transfer_instruction = spl_token_2022::instruction::transfer_checked(
+///     &spl_token_2022::id(),
+///     source_pubkey,
+///     mint_pubkey,
+///     destination_pubkey,
+///     authority_pubkey,
+///     signer_pubkeys,
+///     amount,
+///     decimals,
+/// )?;
+/// add_extra_account_metas(
+///     &mut transfer_instruction,
+///     source_pubkey,
+///     mint_pubkey,
+///     destination_pubkey,
+///     authority_pubkey,
+///     amount,
+///     fetch_account_data_fn,
+/// ).await?;
+/// ```
+pub async fn add_extra_account_metas<F, Fut>(
+    instruction: &mut Instruction,
+    source_pubkey: &Pubkey,
+    mint_pubkey: &Pubkey,
+    destination_pubkey: &Pubkey,
+    authority_pubkey: &Pubkey,
+    amount: u64,
+    fetch_account_data_fn: F,
+) -> Result<(), AccountFetchError>
+where
+    F: Fn(Pubkey) -> Fut,
+    Fut: Future<Output = AccountDataResult>,
+{
     let mint_data = fetch_account_data_fn(*mint_pubkey)
         .await?
         .ok_or(ProgramError::InvalidAccountData)?;
@@ -119,7 +122,7 @@ where
 
     if let Some(program_id) = transfer_hook::get_program_id(&mint) {
         add_extra_account_metas_for_execute(
-            &mut transfer_instruction,
+            instruction,
             &program_id,
             source_pubkey,
             mint_pubkey,
@@ -131,7 +134,7 @@ where
         .await?;
     }
 
-    Ok(transfer_instruction)
+    Ok(())
 }
 
 #[cfg(test)]
diff --git a/token/program/Cargo.toml b/token/program/Cargo.toml
index 1131aa292..6aca0f2d6 100644
--- a/token/program/Cargo.toml
+++ b/token/program/Cargo.toml
@@ -18,15 +18,15 @@ bytemuck = "1.14.0"
 num-derive = "0.4"
 num-traits = "0.2"
 num_enum = "0.7.2"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 thiserror = "1.0"
 
 [dev-dependencies]
 lazy_static = "1.4.0"
 proptest = "1.4"
 serial_test = "3.0.0"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/token/transfer-hook/cli/Cargo.toml b/token/transfer-hook/cli/Cargo.toml
index 2f7183461..2db588c5a 100644
--- a/token/transfer-hook/cli/Cargo.toml
+++ b/token/transfer-hook/cli/Cargo.toml
@@ -11,12 +11,12 @@ version = "0.1.0"
 [dependencies]
 clap = { version = "3", features = ["cargo"] }
 futures-util = "0.3.30"
-solana-clap-v3-utils = "=1.17.6"
-solana-cli-config = "=1.17.6"
-solana-client = "=1.17.6"
-solana-logger = "=1.17.6"
-solana-remote-wallet = "=1.17.6"
-solana-sdk = "=1.17.6"
+solana-clap-v3-utils = "=1.17.13"
+solana-cli-config = "=1.17.13"
+solana-client = "=1.17.13"
+solana-logger = "=1.17.13"
+solana-remote-wallet = "=1.17.13"
+solana-sdk = "=1.17.13"
 spl-transfer-hook-interface = { version = "0.4", path = "../interface" }
 spl-tlv-account-resolution = { version = "0.5.1" , path = "../../../libraries/tlv-account-resolution", features = ["serde-traits"] }
 strum = "0.25"
@@ -27,7 +27,7 @@ serde_json = "1.0.108"
 serde_yaml = "0.9.30"
 
 [dev-dependencies]
-solana-test-validator = "=1.17.6"
+solana-test-validator = "=1.17.13"
 spl-token-2022 = { version = "1.0", path = "../../program-2022", features = ["no-entrypoint"] }
 spl-token-client = { version = "0.8", path = "../../client" }
 
diff --git a/token/transfer-hook/example/Cargo.toml b/token/transfer-hook/example/Cargo.toml
index 6fd6523ad..5c450600b 100644
--- a/token/transfer-hook/example/Cargo.toml
+++ b/token/transfer-hook/example/Cargo.toml
@@ -13,15 +13,15 @@ test-sbf = []
 
 [dependencies]
 arrayref = "0.3.7"
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-tlv-account-resolution = { version = "0.5" , path = "../../../libraries/tlv-account-resolution" }
 spl-token-2022 = { version = "1.0",  path = "../../program-2022", features = ["no-entrypoint"] }
 spl-transfer-hook-interface = { version = "0.4" , path = "../interface" }
 spl-type-length-value = { version = "0.3" , path = "../../../libraries/type-length-value" }
 
 [dev-dependencies]
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 
 [lib]
 crate-type = ["cdylib", "lib"]
diff --git a/token/transfer-hook/interface/Cargo.toml b/token/transfer-hook/interface/Cargo.toml
index 79d4a7dfb..96188bec7 100644
--- a/token/transfer-hook/interface/Cargo.toml
+++ b/token/transfer-hook/interface/Cargo.toml
@@ -10,7 +10,7 @@ edition = "2021"
 [dependencies]
 arrayref = "0.3.7"
 bytemuck = { version = "1.14.0", features = ["derive"] }
-solana-program = "1.17.6"
+solana-program = "1.17.13"
 spl-discriminator = { version = "0.1" , path = "../../../libraries/discriminator" }
 spl-program-error = { version = "0.3" , path = "../../../libraries/program-error" }
 spl-tlv-account-resolution = { version = "0.5" , path = "../../../libraries/tlv-account-resolution" }
diff --git a/token/transfer-hook/interface/src/offchain.rs b/token/transfer-hook/interface/src/offchain.rs
index 692f5dd53..2d3b7bbdd 100644
--- a/token/transfer-hook/interface/src/offchain.rs
+++ b/token/transfer-hook/interface/src/offchain.rs
@@ -16,67 +16,6 @@ use {
     std::future::Future,
 };
 
-/// Offchain helper to get all additional required account metas for a mint
-///
-/// To be client-agnostic and to avoid pulling in the full solana-sdk, this
-/// simply takes a function that will return its data as `Future<Vec<u8>>` for
-/// the given address. Can be called in the following way:
-///
-/// ```rust,ignore
-/// use futures_util::TryFutureExt;
-/// use solana_client::nonblocking::rpc_client::RpcClient;
-/// use solana_program::pubkey::Pubkey;
-///
-/// let program_id = Pubkey::new_unique();
-/// let mint = Pubkey::new_unique();
-/// let client = RpcClient::new_mock("succeeds".to_string());
-/// let mut account_metas = vec![];
-///
-/// get_extra_account_metas(
-///     &mut account_metas,
-///     |address| self.client.get_account(&address).map_ok(|opt| opt.map(|acc| acc.data)),
-///     &mint,
-///     &program_id,
-/// ).await?;
-/// ```
-#[deprecated(
-    since = "0.5.0",
-    note = "Please use `add_extra_account_metas_for_execute` instead"
-)]
-pub async fn resolve_extra_account_metas<F, Fut>(
-    instruction: &mut Instruction,
-    fetch_account_data_fn: F,
-    mint: &Pubkey,
-    permissioned_transfer_program_id: &Pubkey,
-) -> Result<(), AccountFetchError>
-where
-    F: Fn(Pubkey) -> Fut,
-    Fut: Future<Output = AccountDataResult>,
-{
-    let validation_address =
-        get_extra_account_metas_address(mint, permissioned_transfer_program_id);
-    let validation_account_data = fetch_account_data_fn(validation_address)
-        .await?
-        .ok_or(ProgramError::InvalidAccountData)?;
-    ExtraAccountMetaList::add_to_instruction::<ExecuteInstruction, _, _>(
-        instruction,
-        fetch_account_data_fn,
-        &validation_account_data,
-    )
-    .await?;
-    // The onchain helpers pull out the required accounts from an opaque
-    // slice by pubkey, so the order doesn't matter here!
-    instruction.accounts.push(AccountMeta::new_readonly(
-        *permissioned_transfer_program_id,
-        false,
-    ));
-    instruction
-        .accounts
-        .push(AccountMeta::new_readonly(validation_address, false));
-
-    Ok(())
-}
-
 /// Offchain helper to get all additional required account metas for an execute
 /// instruction, based on a validation state account.
 ///
diff --git a/token/transfer-hook/interface/src/onchain.rs b/token/transfer-hook/interface/src/onchain.rs
index cca63c4bd..41c2ec1b2 100644
--- a/token/transfer-hook/interface/src/onchain.rs
+++ b/token/transfer-hook/interface/src/onchain.rs
@@ -54,49 +54,6 @@ pub fn invoke_execute<'a>(
     invoke(&cpi_instruction, &cpi_account_infos)
 }
 
-/// Helper to add accounts required for the transfer-hook program on-chain,
-/// looking through the additional account infos to add the proper accounts
-#[deprecated(
-    since = "0.5.0",
-    note = "Please use `add_extra_accounts_for_execute_cpi` instead"
-)]
-pub fn add_cpi_accounts_for_execute<'a>(
-    cpi_instruction: &mut Instruction,
-    cpi_account_infos: &mut Vec<AccountInfo<'a>>,
-    mint_pubkey: &Pubkey,
-    program_id: &Pubkey,
-    additional_accounts: &[AccountInfo<'a>],
-) -> ProgramResult {
-    let validation_pubkey = get_extra_account_metas_address(mint_pubkey, program_id);
-    let validation_info = additional_accounts
-        .iter()
-        .find(|&x| *x.key == validation_pubkey)
-        .ok_or(TransferHookError::IncorrectAccount)?;
-
-    let program_info = additional_accounts
-        .iter()
-        .find(|&x| x.key == program_id)
-        .ok_or(TransferHookError::IncorrectAccount)?;
-
-    ExtraAccountMetaList::add_to_cpi_instruction::<instruction::ExecuteInstruction>(
-        cpi_instruction,
-        cpi_account_infos,
-        &validation_info.try_borrow_data()?,
-        additional_accounts,
-    )?;
-    // The onchain helpers pull out the required accounts from an opaque
-    // slice by pubkey, so the order doesn't matter here!
-    cpi_account_infos.push(validation_info.clone());
-    cpi_account_infos.push(program_info.clone());
-    cpi_instruction
-        .accounts
-        .push(AccountMeta::new_readonly(validation_pubkey, false));
-    cpi_instruction
-        .accounts
-        .push(AccountMeta::new_readonly(*program_id, false));
-    Ok(())
-}
-
 /// Helper to add accounts required for an `ExecuteInstruction` on-chain,
 /// looking through the additional account infos to add the proper accounts.
 ///


Test patch:
diff --git a/account-compression/sdk/tests/utils.ts b/account-compression/sdk/tests/utils.ts
index 784f36266..d57c297ce 100644
--- a/account-compression/sdk/tests/utils.ts
+++ b/account-compression/sdk/tests/utils.ts
@@ -1,5 +1,5 @@
 import { AnchorProvider } from '@project-serum/anchor';
-import { Keypair, Signer, Transaction, TransactionInstruction } from '@solana/web3.js';
+import { Keypair, SendTransactionError, Signer, Transaction, TransactionInstruction } from '@solana/web3.js';
 import * as crypto from 'crypto';
 
 import { createAllocTreeIx, createAppendIx, createInitEmptyMerkleTreeIx, ValidDepthSizePair } from '../src';
@@ -35,8 +35,10 @@ export async function execute(
         txid = await provider.sendAndConfirm!(tx, signers, {
             skipPreflight,
         });
-    } catch (e: any) {
-        console.log('Tx error!', e.logs);
+    } catch (e) {
+        if (e instanceof SendTransactionError) {
+            console.log('Tx error!', e.logs);
+	}
         throw e;
     }
 
diff --git a/associated-token-account/program-test/Cargo.toml b/associated-token-account/program-test/Cargo.toml
index 1400abf9b..48af756a0 100644
--- a/associated-token-account/program-test/Cargo.toml
+++ b/associated-token-account/program-test/Cargo.toml
@@ -11,9 +11,9 @@ version = "0.0.1"
 test-sbf = []
 
 [dev-dependencies]
-solana-program = "1.17.6"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program = "1.17.13"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-associated-token-account = { version = "2", path = "../program", features = ["no-entrypoint"] }
 spl-token = { version = "4.0", path = "../../token/program", features = ["no-entrypoint"] }
 spl-token-2022 = { version = "1.0", path = "../../token/program-2022", features = ["no-entrypoint"] }
diff --git a/governance/test-sdk/Cargo.toml b/governance/test-sdk/Cargo.toml
index 60a8b296a..0aec82828 100644
--- a/governance/test-sdk/Cargo.toml
+++ b/governance/test-sdk/Cargo.toml
@@ -16,8 +16,8 @@ num-derive = "0.4"
 num-traits = "0.2"
 serde = "1.0.195"
 serde_derive = "1.0.103"
-solana-program = "1.17.6"
-solana-program-test = "1.17.6"
-solana-sdk = "1.17.6"
+solana-program = "1.17.13"
+solana-program-test = "1.17.13"
+solana-sdk = "1.17.13"
 spl-token = { version = "4.0", path = "../../token/program", features = [ "no-entrypoint" ] }
 thiserror = "1.0"
diff --git a/token/program-2022-test/Cargo.toml b/token/program-2022-test/Cargo.toml
index 67321d78a..abc5dd6a3 100644
--- a/token/program-2022-test/Cargo.toml
+++ b/token/program-2022-test/Cargo.toml
@@ -19,9 +19,9 @@ walkdir = "2"
 async-trait = "0.1"
 borsh = "0.10"
 futures-util = "0.3"
-solana-program = "=1.17.6"
-solana-program-test = "=1.17.6"
-solana-sdk = "=1.17.6"
+solana-program = "=1.17.13"
+solana-program-test = "=1.17.13"
+solana-sdk = "=1.17.13"
 spl-associated-token-account = { version = "2.0", path = "../../associated-token-account/program" }
 spl-memo = { version = "4.0.0", path = "../../memo/program", features = ["no-entrypoint"] }
 spl-pod = { version = "0.1.0", path = "../../libraries/pod" }
diff --git a/token/program-2022-test/tests/confidential_transfer.rs b/token/program-2022-test/tests/confidential_transfer.rs
index 70658ec92..91a5e7faf 100644
--- a/token/program-2022-test/tests/confidential_transfer.rs
+++ b/token/program-2022-test/tests/confidential_transfer.rs
@@ -2,7 +2,9 @@
 
 mod program_test;
 use {
-    program_test::{TestContext, TokenContext},
+    program_test::{
+        ConfidentialTokenAccountBalances, ConfidentialTokenAccountMeta, TestContext, TokenContext,
+    },
     solana_program_test::tokio,
     solana_sdk::{
         instruction::InstructionError,
@@ -36,9 +38,8 @@ use {
         },
     },
     spl_token_client::{
-        client::{SendTransaction, SimulateTransaction},
         proof_generation::transfer_with_fee_split_proof_data,
-        token::{ExtensionInitializationParams, Token, TokenError as TokenClientError},
+        token::{ExtensionInitializationParams, TokenError as TokenClientError},
     },
     std::{convert::TryInto, mem::size_of},
 };
@@ -48,181 +49,6 @@ const TEST_MAXIMUM_FEE: u64 = 100;
 #[cfg(feature = "zk-ops")]
 const TEST_FEE_BASIS_POINTS: u16 = 250;
 
-struct ConfidentialTokenAccountMeta {
-    token_account: Pubkey,
-    elgamal_keypair: ElGamalKeypair,
-    aes_key: AeKey,
-}
-
-impl ConfidentialTokenAccountMeta {
-    async fn new<T>(
-        token: &Token<T>,
-        owner: &Keypair,
-        maximum_pending_balance_credit_counter: Option<u64>,
-        require_memo: bool,
-        require_fee: bool,
-    ) -> Self
-    where
-        T: SendTransaction + SimulateTransaction,
-    {
-        let token_account_keypair = Keypair::new();
-
-        let mut extensions = vec![ExtensionType::ConfidentialTransferAccount];
-        if require_memo {
-            extensions.push(ExtensionType::MemoTransfer);
-        }
-        if require_fee {
-            extensions.push(ExtensionType::ConfidentialTransferFeeAmount);
-        }
-
-        token
-            .create_auxiliary_token_account_with_extension_space(
-                &token_account_keypair,
-                &owner.pubkey(),
-                extensions,
-            )
-            .await
-            .unwrap();
-        let token_account = token_account_keypair.pubkey();
-
-        let elgamal_keypair =
-            ElGamalKeypair::new_from_signer(owner, &token_account.to_bytes()).unwrap();
-        let aes_key = AeKey::new_from_signer(owner, &token_account.to_bytes()).unwrap();
-
-        token
-            .confidential_transfer_configure_token_account(
-                &token_account,
-                &owner.pubkey(),
-                None,
-                maximum_pending_balance_credit_counter,
-                &elgamal_keypair,
-                &aes_key,
-                &[owner],
-            )
-            .await
-            .unwrap();
-
-        if require_memo {
-            token
-                .enable_required_transfer_memos(&token_account, &owner.pubkey(), &[owner])
-                .await
-                .unwrap();
-        }
-
-        Self {
-            token_account,
-            elgamal_keypair,
-            aes_key,
-        }
-    }
-
-    #[allow(clippy::too_many_arguments)]
-    #[cfg(feature = "zk-ops")]
-    async fn new_with_tokens<T>(
-        token: &Token<T>,
-        owner: &Keypair,
-        maximum_pending_balance_credit_counter: Option<u64>,
-        require_memo: bool,
-        require_fee: bool,
-        mint_authority: &Keypair,
-        amount: u64,
-        decimals: u8,
-    ) -> Self
-    where
-        T: SendTransaction + SimulateTransaction,
-    {
-        let meta = Self::new(
-            token,
-            owner,
-            maximum_pending_balance_credit_counter,
-            require_memo,
-            require_fee,
-        )
-        .await;
-
-        token
-            .mint_to(
-                &meta.token_account,
-                &mint_authority.pubkey(),
-                amount,
-                &[mint_authority],
-            )
-            .await
-            .unwrap();
-
-        token
-            .confidential_transfer_deposit(
-                &meta.token_account,
-                &owner.pubkey(),
-                amount,
-                decimals,
-                &[owner],
-            )
-            .await
-            .unwrap();
-
-        token
-            .confidential_transfer_apply_pending_balance(
-                &meta.token_account,
-                &owner.pubkey(),
-                None,
-                meta.elgamal_keypair.secret(),
-                &meta.aes_key,
-                &[owner],
-            )
-            .await
-            .unwrap();
-        meta
-    }
-
-    #[cfg(feature = "zk-ops")]
-    async fn check_balances<T>(&self, token: &Token<T>, expected: ConfidentialTokenAccountBalances)
-    where
-        T: SendTransaction + SimulateTransaction,
-    {
-        let state = token.get_account_info(&self.token_account).await.unwrap();
-        let extension = state
-            .get_extension::<ConfidentialTransferAccount>()
-            .unwrap();
-
-        assert_eq!(
-            extension
-                .pending_balance_lo
-                .decrypt(self.elgamal_keypair.secret())
-                .unwrap(),
-            expected.pending_balance_lo,
-        );
-        assert_eq!(
-            extension
-                .pending_balance_hi
-                .decrypt(self.elgamal_keypair.secret())
-                .unwrap(),
-            expected.pending_balance_hi,
-        );
-        assert_eq!(
-            extension
-                .available_balance
-                .decrypt(self.elgamal_keypair.secret())
-                .unwrap(),
-            expected.available_balance,
-        );
-        assert_eq!(
-            self.aes_key
-                .decrypt(&extension.decryptable_available_balance.try_into().unwrap())
-                .unwrap(),
-            expected.decryptable_available_balance,
-        );
-    }
-}
-
-#[cfg(feature = "zk-ops")]
-struct ConfidentialTokenAccountBalances {
-    pending_balance_lo: u64,
-    pending_balance_hi: u64,
-    available_balance: u64,
-    decryptable_available_balance: u64,
-}
-
 #[tokio::test]
 async fn confidential_transfer_configure_token_account() {
     let authority = Keypair::new();
@@ -568,12 +394,13 @@ async fn confidential_transfer_enable_disable_non_confidential_credits() {
         .unwrap();
     assert!(bool::from(&extension.allow_non_confidential_credits));
 
+    // transfer a different number to change the signature
     token
         .transfer(
             &alice_meta.token_account,
             &bob_meta.token_account,
             &alice.pubkey(),
-            10,
+            9,
             &[&alice],
         )
         .await
diff --git a/token/program-2022-test/tests/program_test.rs b/token/program-2022-test/tests/program_test.rs
index 1400285a0..ef106aedf 100644
--- a/token/program-2022-test/tests/program_test.rs
+++ b/token/program-2022-test/tests/program_test.rs
@@ -2,10 +2,24 @@
 
 use {
     solana_program_test::{processor, tokio::sync::Mutex, ProgramTest, ProgramTestContext},
-    solana_sdk::signer::{keypair::Keypair, Signer},
-    spl_token_2022::{id, native_mint, processor::Processor},
+    solana_sdk::{
+        pubkey::Pubkey,
+        signer::{keypair::Keypair, Signer},
+    },
+    spl_token_2022::{
+        extension::{
+            confidential_transfer::ConfidentialTransferAccount, BaseStateWithExtensions,
+            ExtensionType,
+        },
+        id, native_mint,
+        processor::Processor,
+        solana_zk_token_sdk::encryption::{auth_encryption::*, elgamal::*},
+    },
     spl_token_client::{
-        client::{ProgramBanksClient, ProgramBanksClientProcessTransaction, ProgramClient},
+        client::{
+            ProgramBanksClient, ProgramBanksClientProcessTransaction, ProgramClient,
+            SendTransaction, SimulateTransaction,
+        },
         token::{ExtensionInitializationParams, Token, TokenResult},
     },
     std::sync::Arc,
@@ -160,3 +174,181 @@ impl TestContext {
 pub(crate) fn keypair_clone(kp: &Keypair) -> Keypair {
     Keypair::from_bytes(&kp.to_bytes()).expect("failed to copy keypair")
 }
+
+pub(crate) struct ConfidentialTokenAccountMeta {
+    pub(crate) token_account: Pubkey,
+    pub(crate) elgamal_keypair: ElGamalKeypair,
+    pub(crate) aes_key: AeKey,
+}
+
+impl ConfidentialTokenAccountMeta {
+    pub(crate) async fn new<T>(
+        token: &Token<T>,
+        owner: &Keypair,
+        maximum_pending_balance_credit_counter: Option<u64>,
+        require_memo: bool,
+        require_fee: bool,
+    ) -> Self
+    where
+        T: SendTransaction + SimulateTransaction,
+    {
+        let token_account_keypair = Keypair::new();
+
+        let mut extensions = vec![ExtensionType::ConfidentialTransferAccount];
+        if require_memo {
+            extensions.push(ExtensionType::MemoTransfer);
+        }
+        if require_fee {
+            extensions.push(ExtensionType::ConfidentialTransferFeeAmount);
+        }
+
+        token
+            .create_auxiliary_token_account_with_extension_space(
+                &token_account_keypair,
+                &owner.pubkey(),
+                extensions,
+            )
+            .await
+            .unwrap();
+        let token_account = token_account_keypair.pubkey();
+
+        let elgamal_keypair =
+            ElGamalKeypair::new_from_signer(owner, &token_account.to_bytes()).unwrap();
+        let aes_key = AeKey::new_from_signer(owner, &token_account.to_bytes()).unwrap();
+
+        token
+            .confidential_transfer_configure_token_account(
+                &token_account,
+                &owner.pubkey(),
+                None,
+                maximum_pending_balance_credit_counter,
+                &elgamal_keypair,
+                &aes_key,
+                &[owner],
+            )
+            .await
+            .unwrap();
+
+        if require_memo {
+            token
+                .enable_required_transfer_memos(&token_account, &owner.pubkey(), &[owner])
+                .await
+                .unwrap();
+        }
+
+        Self {
+            token_account,
+            elgamal_keypair,
+            aes_key,
+        }
+    }
+
+    #[allow(clippy::too_many_arguments)]
+    #[cfg(feature = "zk-ops")]
+    pub(crate) async fn new_with_tokens<T>(
+        token: &Token<T>,
+        owner: &Keypair,
+        maximum_pending_balance_credit_counter: Option<u64>,
+        require_memo: bool,
+        require_fee: bool,
+        mint_authority: &Keypair,
+        amount: u64,
+        decimals: u8,
+    ) -> Self
+    where
+        T: SendTransaction + SimulateTransaction,
+    {
+        let meta = Self::new(
+            token,
+            owner,
+            maximum_pending_balance_credit_counter,
+            require_memo,
+            require_fee,
+        )
+        .await;
+
+        token
+            .mint_to(
+                &meta.token_account,
+                &mint_authority.pubkey(),
+                amount,
+                &[mint_authority],
+            )
+            .await
+            .unwrap();
+
+        token
+            .confidential_transfer_deposit(
+                &meta.token_account,
+                &owner.pubkey(),
+                amount,
+                decimals,
+                &[owner],
+            )
+            .await
+            .unwrap();
+
+        token
+            .confidential_transfer_apply_pending_balance(
+                &meta.token_account,
+                &owner.pubkey(),
+                None,
+                meta.elgamal_keypair.secret(),
+                &meta.aes_key,
+                &[owner],
+            )
+            .await
+            .unwrap();
+        meta
+    }
+
+    #[cfg(feature = "zk-ops")]
+    pub(crate) async fn check_balances<T>(
+        &self,
+        token: &Token<T>,
+        expected: ConfidentialTokenAccountBalances,
+    ) where
+        T: SendTransaction + SimulateTransaction,
+    {
+        let state = token.get_account_info(&self.token_account).await.unwrap();
+        let extension = state
+            .get_extension::<ConfidentialTransferAccount>()
+            .unwrap();
+
+        assert_eq!(
+            extension
+                .pending_balance_lo
+                .decrypt(self.elgamal_keypair.secret())
+                .unwrap(),
+            expected.pending_balance_lo,
+        );
+        assert_eq!(
+            extension
+                .pending_balance_hi
+                .decrypt(self.elgamal_keypair.secret())
+                .unwrap(),
+            expected.pending_balance_hi,
+        );
+        assert_eq!(
+            extension
+                .available_balance
+                .decrypt(self.elgamal_keypair.secret())
+                .unwrap(),
+            expected.available_balance,
+        );
+        assert_eq!(
+            self.aes_key
+                .decrypt(&extension.decryptable_available_balance.try_into().unwrap())
+                .unwrap(),
+            expected.decryptable_available_balance,
+        );
+    }
+}
+
+#[cfg(feature = "zk-ops")]
+pub(crate) struct ConfidentialTokenAccountBalances {
+    pub(crate) pending_balance_lo: u64,
+    pub(crate) pending_balance_hi: u64,
+    pub(crate) available_balance: u64,
+    pub(crate) decryptable_available_balance: u64,
+}
diff --git a/token/program-2022-test/tests/transfer_hook.rs b/token/program-2022-test/tests/transfer_hook.rs
index 7d8175774..5d9f30159 100644
--- a/token/program-2022-test/tests/transfer_hook.rs
+++ b/token/program-2022-test/tests/transfer_hook.rs
@@ -3,7 +3,9 @@
 mod program_test;
 use {
     futures_util::TryFutureExt,
-    program_test::{TestContext, TokenContext},
+    program_test::{
+        ConfidentialTokenAccountBalances, ConfidentialTokenAccountMeta, TestContext, TokenContext,
+    },
     solana_program_test::{processor, tokio, ProgramTest},
     solana_sdk::{
         account::Account,
@@ -250,6 +252,41 @@ async fn setup(mint: Keypair, program_id: &Pubkey, authority: &Pubkey) -> TestCo
     context
 }
 
+async fn setup_with_confidential_transfers(
+    mint: Keypair,
+    program_id: &Pubkey,
+    authority: &Pubkey,
+) -> TestContext {
+    let mut program_test = setup_program_test(program_id);
+    add_validation_account(&mut program_test, &mint.pubkey(), program_id);
+
+    let context = program_test.start_with_context().await;
+    let context = Arc::new(tokio::sync::Mutex::new(context));
+    let mut context = TestContext {
+        context,
+        token_context: None,
+    };
+    context
+        .init_token_with_mint_keypair_and_freeze_authority(
+            mint,
+            vec![
+                ExtensionInitializationParams::TransferHook {
+                    authority: Some(*authority),
+                    program_id: Some(*program_id),
+                },
+                ExtensionInitializationParams::ConfidentialTransferMint {
+                    authority: Some(*authority),
+                    auto_approve_new_accounts: true,
+                    auditor_elgamal_pubkey: None,
+                },
+            ],
+            None,
+        )
+        .await
+        .unwrap();
+    context
+}
+
 #[tokio::test]
 async fn success_init() {
     let authority = Pubkey::new_unique();
@@ -774,3 +811,105 @@ async fn success_transfers_using_onchain_helper() {
         .await
         .unwrap();
 }
+
+#[tokio::test]
+async fn success_confidential_transfer() {
+    let authority = Keypair::new();
+    let program_id = Pubkey::new_unique();
+    let mint_keypair = Keypair::new();
+    let token_context =
+        setup_with_confidential_transfers(mint_keypair, &program_id, &authority.pubkey())
+            .await
+            .token_context
+            .take()
+            .unwrap();
+    let amount = 10;
+
+    let TokenContext {
+        token,
+        alice,
+        bob,
+        mint_authority,
+        decimals,
+        ..
+    } = token_context;
+
+    let alice_meta = ConfidentialTokenAccountMeta::new_with_tokens(
+        &token,
+        &alice,
+        None,
+        false,
+        false,
+        &mint_authority,
+        amount,
+        decimals,
+    )
+    .await;
+
+    let bob_meta = ConfidentialTokenAccountMeta::new(&token, &bob, Some(2), false, false).await;
+
+    token
+        .confidential_transfer_transfer(
+            &alice_meta.token_account,
+            &bob_meta.token_account,
+            &alice.pubkey(),
+            None,
+            amount,
+            None,
+            &alice_meta.elgamal_keypair,
+            &alice_meta.aes_key,
+            bob_meta.elgamal_keypair.pubkey(),
+            None, // auditor
+            &[&alice],
+        )
+        .await
+        .unwrap();
+
+    let destination = token
+        .get_account_info(&bob_meta.token_account)
+        .await
+        .unwrap();
+    alice_meta
+        .check_balances(
+            &token,
+            ConfidentialTokenAccountBalances {
+                pending_balance_lo: 0,
+                pending_balance_hi: 0,
+                available_balance: 0,
+                decryptable_available_balance: 0,
+            },
+        )
+        .await;
+    bob_meta
+        .check_balances(
+            &token,
+            ConfidentialTokenAccountBalances {
+                pending_balance_lo: amount,
+                pending_balance_hi: 0,
+                available_balance: 0,
+                decryptable_available_balance: 0,
+            },
+        )
+        .await;
+
+    // the example program checks that the transferring flag was set to true,
+    // so make sure that it was correctly unset by the token program
+    assert_eq!(
+        destination
+            .get_extension::<TransferHookAccount>()
+            .unwrap()
+            .transferring,
+        false.into()
+    );
+    let source = token
+        .get_account_info(&alice_meta.token_account)
+        .await
+        .unwrap();
+    assert_eq!(
+        source
+            .get_extension::<TransferHookAccount>()
+            .unwrap()
+            .transferring,
+        false.into()
+    );
+}
diff --git a/utils/test-client/Cargo.toml b/utils/test-client/Cargo.toml
index 05b4f7da8..c45236c78 100644
--- a/utils/test-client/Cargo.toml
+++ b/utils/test-client/Cargo.toml
@@ -8,7 +8,7 @@ edition = "2021"
 # Used to ensure that SPL programs are buildable by external clients
 
 [dependencies]
-solana-sdk = "1.17.6"
+solana-sdk = "1.17.13"
 spl-memo = { path = "../../memo/program", features = [ "no-entrypoint" ] }
 spl-token = { path = "../../token/program", features = [ "no-entrypoint" ] }
 spl-token-swap = { path = "../../token-swap/program", features = [ "no-entrypoint" ] }