Repository: MystenLabs/sui (language: rust)

Issue:
SDK -> VerifyTransactionSignature can fail for ZkLogin in specific cases
When the transaction seems too big, verifying from the sdk fails.

## Expected

Trying through the testnet playground, everything works
https://sui-testnet.mystenlabs.com/graphql

```gql
{
  verifyZkloginSignature(
    bytes: "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",
    signature: "BQNMMTUzMzk0Mzc1MTg2ODk4MjY4MDQwMTg0NjkxODI4NzM0NjM3MTk2MDYyMzQ1ODk4OTE1MTY1NzY5ODY2MjY1MTAwOTI5ODg1Nzc1OU0xMjY2MDA3ODIyNTQxNTcwNzQyMTQxOTQwMDM4MjgyODQ2NTU5MDY4NjE4MzA1NzEwNzg4NTQwMjc0OTMyMDE2NjIxODc1NTg3Mjg1MQExAwJNMTM5MDA1OTgyNTcwMTQ0OTY2NTQ4NTM5OTI0NDI3MTU1NjIyOTA3MDQ3MDk2NzY5OTA3NjAzODk0MDgxNTQyMDI2ODA0MzgwMzc1MDVMMzYzMjE5MjM4MzIwMDExMTMwMTE5NDk4MDQ2NTEwMTA3MzA4NTE5MDI4NjkwNDc0OTg4OTQxMTQ5NjM0MjUxMTkwMjc1MTc0OTE1MQJLNzYxOTEyMjI5MjI2NzM0Nzc5MDkyOTc5MDMxNTQ5NjI5ODYwNjczMjA5MzI3ODI0OTgwNzQxNzQ0OTg2MTU3NzcwNzcwMjg2ODM4TDk3NjQ5NjIyNDcwNTk5Mjc1OTUxMTg3NjQ4OTc5MDExMTg2NjMwNDc5MDAwMjMwNTk4NDgzMTYyMzM1NjIzOTYxNjIyNTMyMzk5ODgCATEBMANNMTkxNjEzNDI4MDE3Njc0NDE1MzE1MDUwNDI1NzEzNjgxMjEzODY3MDMyNzMwODM1Mzk2MTkwNjcxNzA5ODQ0NDg2Nzk4MTA5NDkwNjhNMTIxMzI5NzQ0NzI3NTc2NDI5Mzc4NDEwNTg1NjExMTUwODg2NTMyMTc2MTIyNzg4MDcyMTQ2Mjk2NjUxOTEwMzM3MzgxMjE5NTY0NjYBMTF5SnBjM01pT2lKb2RIUndjem92TDJGalkyOTFiblJ6TG1kdmIyZHNaUzVqYjIwaUxDAWZleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2SWpVMk5HWmxZV05sWXpObFltUm1ZV0UzTXpFeFlqbGtPR1UzTTJNME1qZ3hPR1l5T1RFeU5qUWlMQ0owZVhBaU9pSktWMVFpZlFMMjUzNjY1MDc4MDMxNTM1MTY5MzUwNTA2NDE1MTQyMTk4ODE4MjE4NDY4NjQ2ODk0NTA3ODU2MTg4OTg5NzA0MTczNDA2NTMzMjU4MUoCAAAAAAAAYQAmNZ3Bxwr01jlFRhXP/lkJfUm2tcvkuxpTXFPS4qEl7eZpP+6QqKdp8xeDnzWZaUXR7OvkZkHLIcFCMuE9CK0EXqzLx3rGZeEDqDMyWDF4eWtTJUrjtMCU/61xFu/xJoQ=",
    intentScope: TRANSACTION_DATA,
    author: "0x3d1342fb7de99c69ce821183bcfc5b6374d81453bf5ca9bf7e383e75b3722983"
  ) {
    success
  }
}
```

```
{
  "data": {
    "verifyZkloginSignature": {
      "success": true
    }
  }
}
```

## Reproduce

now try the same thing with the sdk, it will fail

```js
const bytes = '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'
const signature = 'BQNMMTUzMzk0Mzc1MTg2ODk4MjY4MDQwMTg0NjkxODI4NzM0NjM3MTk2MDYyMzQ1ODk4OTE1MTY1NzY5ODY2MjY1MTAwOTI5ODg1Nzc1OU0xMjY2MDA3ODIyNTQxNTcwNzQyMTQxOTQwMDM4MjgyODQ2NTU5MDY4NjE4MzA1NzEwNzg4NTQwMjc0OTMyMDE2NjIxODc1NTg3Mjg1MQExAwJNMTM5MDA1OTgyNTcwMTQ0OTY2NTQ4NTM5OTI0NDI3MTU1NjIyOTA3MDQ3MDk2NzY5OTA3NjAzODk0MDgxNTQyMDI2ODA0MzgwMzc1MDVMMzYzMjE5MjM4MzIwMDExMTMwMTE5NDk4MDQ2NTEwMTA3MzA4NTE5MDI4NjkwNDc0OTg4OTQxMTQ5NjM0MjUxMTkwMjc1MTc0OTE1MQJLNzYxOTEyMjI5MjI2NzM0Nzc5MDkyOTc5MDMxNTQ5NjI5ODYwNjczMjA5MzI3ODI0OTgwNzQxNzQ0OTg2MTU3NzcwNzcwMjg2ODM4TDk3NjQ5NjIyNDcwNTk5Mjc1OTUxMTg3NjQ4OTc5MDExMTg2NjMwNDc5MDAwMjMwNTk4NDgzMTYyMzM1NjIzOTYxNjIyNTMyMzk5ODgCATEBMANNMTkxNjEzNDI4MDE3Njc0NDE1MzE1MDUwNDI1NzEzNjgxMjEzODY3MDMyNzMwODM1Mzk2MTkwNjcxNzA5ODQ0NDg2Nzk4MTA5NDkwNjhNMTIxMzI5NzQ0NzI3NTc2NDI5Mzc4NDEwNTg1NjExMTUwODg2NTMyMTc2MTIyNzg4MDcyMTQ2Mjk2NjUxOTEwMzM3MzgxMjE5NTY0NjYBMTF5SnBjM01pT2lKb2RIUndjem92TDJGalkyOTFiblJ6TG1kdmIyZHNaUzVqYjIwaUxDAWZleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2SWpVMk5HWmxZV05sWXpObFltUm1ZV0UzTXpFeFlqbGtPR1UzTTJNME1qZ3hPR1l5T1RFeU5qUWlMQ0owZVhBaU9pSktWMVFpZlFMMjUzNjY1MDc4MDMxNTM1MTY5MzUwNTA2NDE1MTQyMTk4ODE4MjE4NDY4NjQ2ODk0NTA3ODU2MTg4OTg5NzA0MTczNDA2NTMzMjU4MUoCAAAAAAAAYQAmNZ3Bxwr01jlFRhXP/lkJfUm2tcvkuxpTXFPS4qEl7eZpP+6QqKdp8xeDnzWZaUXR7OvkZkHLIcFCMuE9CK0EXqzLx3rGZeEDqDMyWDF4eWtTJUrjtMCU/61xFu/xJoQ='

await verifyTransactionSignature(fromBase64(bytes), signature, { client: graphql_client })
// Error: Signature is not valid for the provided Transaction
```


Discussion / hints:
This looks like a GraphQL limitation.  The query above works because it is just under the current limit.  The query the SDK uses is slightly large and will fail when run directly in the playground:

```graphql
query Zklogin(
		$bytes: Base64!
		$signature: Base64!
		$intentScope: ZkLoginIntentScope!
		$author: SuiAddress!
	) {
		verifyZkloginSignature(
			bytes: $bytes
			signature: $signature
			intentScope: $intentScope
			author: $author
		) {
			success
			errors
		}
	}
```
with the variables set to 
```json
{
  "bytes": "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",
  "signature": "BQNMMTUzMzk0Mzc1MTg2ODk4MjY4MDQwMTg0NjkxODI4NzM0NjM3MTk2MDYyMzQ1ODk4OTE1MTY1NzY5ODY2MjY1MTAwOTI5ODg1Nzc1OU0xMjY2MDA3ODIyNTQxNTcwNzQyMTQxOTQwMDM4MjgyODQ2NTU5MDY4NjE4MzA1NzEwNzg4NTQwMjc0OTMyMDE2NjIxODc1NTg3Mjg1MQExAwJNMTM5MDA1OTgyNTcwMTQ0OTY2NTQ4NTM5OTI0NDI3MTU1NjIyOTA3MDQ3MDk2NzY5OTA3NjAzODk0MDgxNTQyMDI2ODA0MzgwMzc1MDVMMzYzMjE5MjM4MzIwMDExMTMwMTE5NDk4MDQ2NTEwMTA3MzA4NTE5MDI4NjkwNDc0OTg4OTQxMTQ5NjM0MjUxMTkwMjc1MTc0OTE1MQJLNzYxOTEyMjI5MjI2NzM0Nzc5MDkyOTc5MDMxNTQ5NjI5ODYwNjczMjA5MzI3ODI0OTgwNzQxNzQ0OTg2MTU3NzcwNzcwMjg2ODM4TDk3NjQ5NjIyNDcwNTk5Mjc1OTUxMTg3NjQ4OTc5MDExMTg2NjMwNDc5MDAwMjMwNTk4NDgzMTYyMzM1NjIzOTYxNjIyNTMyMzk5ODgCATEBMANNMTkxNjEzNDI4MDE3Njc0NDE1MzE1MDUwNDI1NzEzNjgxMjEzODY3MDMyNzMwODM1Mzk2MTkwNjcxNzA5ODQ0NDg2Nzk4MTA5NDkwNjhNMTIxMzI5NzQ0NzI3NTc2NDI5Mzc4NDEwNTg1NjExMTUwODg2NTMyMTc2MTIyNzg4MDcyMTQ2Mjk2NjUxOTEwMzM3MzgxMjE5NTY0NjYBMTF5SnBjM01pT2lKb2RIUndjem92TDJGalkyOTFiblJ6TG1kdmIyZHNaUzVqYjIwaUxDAWZleUpoYkdjaU9pSlNVekkxTmlJc0ltdHBaQ0k2SWpVMk5HWmxZV05sWXpObFltUm1ZV0UzTXpFeFlqbGtPR1UzTTJNME1qZ3hPR1l5T1RFeU5qUWlMQ0owZVhBaU9pSktWMVFpZlFMMjUzNjY1MDc4MDMxNTM1MTY5MzUwNTA2NDE1MTQyMTk4ODE4MjE4NDY4NjQ2ODk0NTA3ODU2MTg4OTg5NzA0MTczNDA2NTMzMjU4MUoCAAAAAAAAYQAmNZ3Bxwr01jlFRhXP/lkJfUm2tcvkuxpTXFPS4qEl7eZpP+6QqKdp8xeDnzWZaUXR7OvkZkHLIcFCMuE9CK0EXqzLx3rGZeEDqDMyWDF4eWtTJUrjtMCU/61xFu/xJoQ=",
  "author": "0x3d1342fb7de99c69ce821183bcfc5b6374d81453bf5ca9bf7e383e75b3722983"
}
```

Fix patch:
diff --git a/crates/sui-graphql-rpc/src/extensions/query_limits_checker.rs b/crates/sui-graphql-rpc/src/extensions/query_limits_checker.rs
index 243baa6af4569..458a513a8046f 100644
--- a/crates/sui-graphql-rpc/src/extensions/query_limits_checker.rs
+++ b/crates/sui-graphql-rpc/src/extensions/query_limits_checker.rs
@@ -29,6 +29,7 @@ use uuid::Uuid;
 pub(crate) const CONNECTION_FIELDS: [&str; 2] = ["edges", "nodes"];
 const DRY_RUN_TX_BLOCK: &str = "dryRunTransactionBlock";
 const EXECUTE_TX_BLOCK: &str = "executeTransactionBlock";
+const VERIFY_ZKLOGIN: &str = "verifyZkloginSignature";
 
 /// The size of the query payload in bytes, as it comes from the request header: `Content-Length`.
 #[derive(Clone, Copy, Debug)]
@@ -231,6 +232,14 @@ impl<'a> LimitsTraversal<'a> {
                     for (_name, value) in &f.node.arguments {
                         self.check_tx_arg(value)?;
                     }
+                } else if name == VERIFY_ZKLOGIN {
+                    if let Some(value) = f.node.get_argument("bytes") {
+                        self.check_tx_arg(value)?;
+                    }
+
+                    if let Some(value) = f.node.get_argument("signature") {
+                        self.check_tx_arg(value)?;
+                    }
                 }
             }
 
@@ -607,9 +616,9 @@ impl<'a> Reporter<'a> {
         self.graphql_error(
             code::BAD_USER_INPUT,
             format!(
-                "{message}. Requests are limited to {max_tx_payload} bytes or fewer on \
-                 transaction payloads (all inputs to executeTransactionBlock or \
-                 dryRunTransactionBlock) and the rest of the request (the query part) must be \
+                "{message}. Requests are limited to {max_tx_payload} bytes or fewer on transaction \
+                 payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, or \
+                 verifyZkloginSignature) and the rest of the request (the query part) must be \
                  {max_query_payload} bytes or fewer.",
                 max_tx_payload = self.limits.max_tx_payload_size,
                 max_query_payload = self.limits.max_query_payload_size,
diff --git a/crates/sui-graphql-rpc/src/server/builder.rs b/crates/sui-graphql-rpc/src/server/builder.rs
index 2de8aab2eed7d..d674ddc38f490 100644
--- a/crates/sui-graphql-rpc/src/server/builder.rs
+++ b/crates/sui-graphql-rpc/src/server/builder.rs
@@ -1217,8 +1217,8 @@ pub mod tests {
             )
             .await,
             "Query part too large: 354 bytes. Requests are limited to 400 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 10 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
              bytes or fewer."
         );
     }
@@ -1248,8 +1248,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 400 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 400 \
              bytes or fewer."
         );
     }
@@ -1280,12 +1280,47 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 400 bytes \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 400 bytes \
              or fewer."
         );
     }
 
+    #[tokio::test]
+    async fn test_payload_zklogin_exceeded() {
+        let cluster = prep_executor_cluster().await;
+        let db_url = cluster.graphql_connection_config.db_url.clone();
+        assert_eq!(
+            execute_for_error(
+                &db_url,
+                Limits {
+                    max_tx_payload_size: 10,
+                    max_query_payload_size: 600,
+                    ..Default::default()
+                },
+                r#"
+                    query {
+                        verifyZkloginSignature(
+                            bytes: "AAABBBCCC",
+                            signature: "DDD",
+                            intentScope: TRANSACTION_DATA,
+                            author: "0xeee",
+                        ) {
+                            success
+                            errors
+                        }
+                    }
+                "#
+                .into(),
+            )
+            .await,
+            "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 600 \
+             bytes or fewer."
+        );
+    }
+
     #[tokio::test]
     async fn test_payload_total_exceeded_impl() {
         let cluster = prep_executor_cluster().await;
@@ -1312,8 +1347,9 @@ pub mod tests {
             )
             .await,
             "Overall request too large: 380 bytes. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or dryRunTransactionBlock) \
-             and the rest of the request (the query part) must be 10 bytes or fewer."
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
+             bytes or fewer."
         );
     }
 
@@ -1347,8 +1383,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1383,9 +1419,9 @@ pub mod tests {
             )
             .await,
             "Query part too large: 409 bytes. Requests are limited to 500 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 10 bytes \
-             or fewer."
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
+             bytes or fewer."
         );
     }
 
@@ -1419,8 +1455,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 400 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 400 \
              bytes or fewer."
         );
     }
@@ -1455,9 +1491,9 @@ pub mod tests {
             )
             .await,
             "Query part too large: 398 bytes. Requests are limited to 400 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 10 bytes \
-             or fewer."
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
+             bytes or fewer."
         );
     }
 
@@ -1514,8 +1550,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 30 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 800 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 800 \
              bytes or fewer."
         );
     }
@@ -1576,8 +1612,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 20 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 800 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 800 \
              bytes or fewer."
         );
     }
@@ -1634,8 +1670,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 30 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer.",
         )
     }
@@ -1672,8 +1708,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1923,8 +1959,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1956,8 +1992,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1992,8 +2028,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -2026,8 +2062,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
diff --git a/crates/sui-mvr-graphql-rpc/src/extensions/query_limits_checker.rs b/crates/sui-mvr-graphql-rpc/src/extensions/query_limits_checker.rs
index 243baa6af4569..458a513a8046f 100644
--- a/crates/sui-mvr-graphql-rpc/src/extensions/query_limits_checker.rs
+++ b/crates/sui-mvr-graphql-rpc/src/extensions/query_limits_checker.rs
@@ -29,6 +29,7 @@ use uuid::Uuid;
 pub(crate) const CONNECTION_FIELDS: [&str; 2] = ["edges", "nodes"];
 const DRY_RUN_TX_BLOCK: &str = "dryRunTransactionBlock";
 const EXECUTE_TX_BLOCK: &str = "executeTransactionBlock";
+const VERIFY_ZKLOGIN: &str = "verifyZkloginSignature";
 
 /// The size of the query payload in bytes, as it comes from the request header: `Content-Length`.
 #[derive(Clone, Copy, Debug)]
@@ -231,6 +232,14 @@ impl<'a> LimitsTraversal<'a> {
                     for (_name, value) in &f.node.arguments {
                         self.check_tx_arg(value)?;
                     }
+                } else if name == VERIFY_ZKLOGIN {
+                    if let Some(value) = f.node.get_argument("bytes") {
+                        self.check_tx_arg(value)?;
+                    }
+
+                    if let Some(value) = f.node.get_argument("signature") {
+                        self.check_tx_arg(value)?;
+                    }
                 }
             }
 
@@ -607,9 +616,9 @@ impl<'a> Reporter<'a> {
         self.graphql_error(
             code::BAD_USER_INPUT,
             format!(
-                "{message}. Requests are limited to {max_tx_payload} bytes or fewer on \
-                 transaction payloads (all inputs to executeTransactionBlock or \
-                 dryRunTransactionBlock) and the rest of the request (the query part) must be \
+                "{message}. Requests are limited to {max_tx_payload} bytes or fewer on transaction \
+                 payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, or \
+                 verifyZkloginSignature) and the rest of the request (the query part) must be \
                  {max_query_payload} bytes or fewer.",
                 max_tx_payload = self.limits.max_tx_payload_size,
                 max_query_payload = self.limits.max_query_payload_size,
diff --git a/crates/sui-mvr-graphql-rpc/src/server/builder.rs b/crates/sui-mvr-graphql-rpc/src/server/builder.rs
index aab4a0ddb4c0c..592a4a364520a 100644
--- a/crates/sui-mvr-graphql-rpc/src/server/builder.rs
+++ b/crates/sui-mvr-graphql-rpc/src/server/builder.rs
@@ -1215,8 +1215,8 @@ pub mod tests {
             )
             .await,
             "Query part too large: 354 bytes. Requests are limited to 400 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 10 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
              bytes or fewer."
         );
     }
@@ -1246,8 +1246,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 400 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 400 \
              bytes or fewer."
         );
     }
@@ -1278,12 +1278,47 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 400 bytes \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 400 bytes \
              or fewer."
         );
     }
 
+    #[tokio::test]
+    async fn test_payload_zklogin_exceeded() {
+        let cluster = prep_executor_cluster().await;
+        let db_url = cluster.graphql_connection_config.db_url.clone();
+        assert_eq!(
+            execute_for_error(
+                &db_url,
+                Limits {
+                    max_tx_payload_size: 10,
+                    max_query_payload_size: 600,
+                    ..Default::default()
+                },
+                r#"
+                    query {
+                        verifyZkloginSignature(
+                            bytes: "AAABBBCCC",
+                            signature: "DDD",
+                            intentScope: TRANSACTION_DATA,
+                            author: "0xeee",
+                        ) {
+                            success
+                            errors
+                        }
+                    }
+                "#
+                .into(),
+            )
+            .await,
+            "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 600 \
+             bytes or fewer."
+        );
+    }
+
     #[tokio::test]
     async fn test_payload_total_exceeded_impl() {
         let cluster = prep_executor_cluster().await;
@@ -1310,8 +1345,9 @@ pub mod tests {
             )
             .await,
             "Overall request too large: 380 bytes. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or dryRunTransactionBlock) \
-             and the rest of the request (the query part) must be 10 bytes or fewer."
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
+             bytes or fewer."
         );
     }
 
@@ -1345,8 +1381,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1381,9 +1417,9 @@ pub mod tests {
             )
             .await,
             "Query part too large: 409 bytes. Requests are limited to 500 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 10 bytes \
-             or fewer."
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
+             bytes or fewer."
         );
     }
 
@@ -1417,8 +1453,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 400 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 400 \
              bytes or fewer."
         );
     }
@@ -1453,9 +1489,9 @@ pub mod tests {
             )
             .await,
             "Query part too large: 398 bytes. Requests are limited to 400 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 10 bytes \
-             or fewer."
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 10 \
+             bytes or fewer."
         );
     }
 
@@ -1512,8 +1548,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 30 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 800 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 800 \
              bytes or fewer."
         );
     }
@@ -1574,8 +1610,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 20 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 800 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 800 \
              bytes or fewer."
         );
     }
@@ -1632,8 +1668,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 30 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer.",
         )
     }
@@ -1670,8 +1706,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1921,8 +1957,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1954,8 +1990,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -1990,8 +2026,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }
@@ -2024,8 +2060,8 @@ pub mod tests {
             )
             .await,
             "Transaction payload too large. Requests are limited to 10 bytes or fewer on \
-             transaction payloads (all inputs to executeTransactionBlock or \
-             dryRunTransactionBlock) and the rest of the request (the query part) must be 500 \
+             transaction payloads (all inputs to executeTransactionBlock, dryRunTransactionBlock, \
+             or verifyZkloginSignature) and the rest of the request (the query part) must be 500 \
              bytes or fewer."
         );
     }


Test patch: