# TransactionForwarder\_v1

[Git Source](https://github.com/InverterNetwork/inverter-contracts/blob/2a8a4c80ff4f24a59546d4e6126b81bc51228c94/src/external/forwarder/TransactionForwarder_v1.sol)

**Inherits:** [ITransactionForwarder\_v1](https://docs.inverter.network/contracts/technical-reference/external/forwarder/interfaces/itransactionforwarder_v1.sol), [ERC2771ForwarderUpgradeable](https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/22489db15621b9a42ebddb1facade6962034e9b9/contracts/metatx/ERC2771ForwarderUpgradeable.sol), [ContextUpgradeable](https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/22489db15621b9a42ebddb1facade6962034e9b9/contracts/utils/ContextUpgradeable.sol)

**Author:** Inverter Network

This contract enables users to interact with smart contracts indirectly through a trusted forwarder. It supports meta transactions, allowing transactions to be sent by one party but signed and paid for by another. It also handles batch transactions (multi-call), facilitating complex, multi-step interactions within a single transaction.

*Integrates* [*{ERC2771ForwarderUpgradeable}* ](https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/22489db15621b9a42ebddb1facade6962034e9b9/contracts/metatx/ERC2771ForwarderUpgradeable.sol)*and* [*{ContextUpgradeable}* ](https://github.com/OpenZeppelin/openzeppelin-contracts-upgradeable/blob/22489db15621b9a42ebddb1facade6962034e9b9/contracts/utils/ContextUpgradeable.sol)*to manage and relay meta transactions. It handles nonce management, signature verification, and ensures only trusted calls are forwarded.*

### State Variables

#### \_\_gap

*Storage gap for future upgrades.*

```solidity
uint[50] private __gap;
```

### Functions

#### constructor

```solidity
constructor();
```

#### init

```solidity
function init() external initializer;
```

#### createDigest

Creates a digest for the given `ForwardRequestData`.

*The signature field of the given `ForwardRequestData` can be empty.*

```solidity
function createDigest(ForwardRequestData memory req)
    external
    view
    returns (bytes32 digest);
```

**Parameters**

| Name  | Type                 | Description                                         |
| ----- | -------------------- | --------------------------------------------------- |
| `req` | `ForwardRequestData` | The ForwardRequest you want to get the digest from. |

**Returns**

| Name     | Type      | Description                                              |
| -------- | --------- | -------------------------------------------------------- |
| `digest` | `bytes32` | The digest needed to create a signature for the request. |

#### executeMulticall

Enables the execution of multiple calls in a single transaction.

```solidity
function executeMulticall(SingleCall[] calldata calls)
    external
    returns (Result[] memory results);
```

**Parameters**

| Name    | Type           | Description                                                     |
| ------- | -------------- | --------------------------------------------------------------- |
| `calls` | `SingleCall[]` | Array of call structs that should be executed in the multicall. |

**Returns**

| Name      | Type       | Description                                                 |
| --------- | ---------- | ----------------------------------------------------------- |
| `results` | `Result[]` | returnData The return data of the calls that were executed. |

#### \_getStructHash

Returns the digest for the given `ForwardRequestData`.

```solidity
function _getStructHash(
    ERC2771ForwarderUpgradeable.ForwardRequestData memory req
) internal view returns (bytes32);
```

**Parameters**

| Name  | Type                                             | Description                                         |
| ----- | ------------------------------------------------ | --------------------------------------------------- |
| `req` | `ERC2771ForwarderUpgradeable.ForwardRequestData` | The ForwardRequest you want to get the digest from. |

**Returns**

| Name     | Type      | Description                                                     |
| -------- | --------- | --------------------------------------------------------------- |
| `<none>` | `bytes32` | digest The digest needed to create a signature for the request. |

#### \_\_isTrustedByTarget

```solidity
function __isTrustedByTarget(address target) private view returns (bool);
```
