# CallModule

### Overview

Abstract contract extending `VerifierModule`, implementing low-level contract calls with verification via a pluggable verifier.

### `call`

```solidity
function call(
    address where,
    uint256 value,
    bytes calldata data,
    IVerifier.VerificationPayload calldata payload
) external nonReentrant returns (bytes memory response)
```

### Description

Executes a low-level call to a target contract after validating the call parameters through an external `Verifier` contract. The verification logic is determined by the verification type specified in the `Verifier` contract.

For details on available verification types, refer to the [Verifier specification](https://www.notion.so/Verifier-23002ad8627680cfbab5e96defcdbe31?pvs=21).

### Parameters

* `where`: The address of the target contract.
* `value`: The ETH value to send along with the call.
* `data`: Calldata to pass to the target contract.
* `payload`: Encoded verification payload used to authorize the call.

### Returns

* `response`: The raw returned data from the target contract call.

### Requirements

* All the provided parameters must be externally verified via `verifier().verifyCall`.
* Reentrancy is prevented via `nonReentrant` modifier.


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://metavaults.mellow.finance/architecture/modules/callmodule.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
