> ## Documentation Index
> Fetch the complete documentation index at: https://docs.relay.link/llms.txt
> Use this file to discover all available pages before exploring further.

# RelayPoolNativeGateway

# Solidity API

## RelayPoolNativeGateway

Gateway contract for depositing and withdrawing native ETH to/from WETH-based RelayPools

*Handles wrapping/unwrapping of ETH and provides slippage protection for all operations*

### EthTransferFailed

```solidity theme={null}
error EthTransferFailed()
```

Error when ETH transfer fails

### OnlyWethCanSendEth

```solidity theme={null}
error OnlyWethCanSendEth()
```

Error when contract receives ETH from non-WETH address

### RemainingEth

```solidity theme={null}
error RemainingEth()
```

Error when ETH remains in contract after operation

### SlippageExceeded

```solidity theme={null}
error SlippageExceeded()
```

Error when slippage protection is triggered

### WETH

```solidity theme={null}
contract IWETH WETH
```

The Wrapped ETH (WETH) contract

*Used to wrap/unwrap native ETH for pool operations*

### constructor

```solidity theme={null}
constructor(address wethAddress) public
```

Initializes the gateway with the WETH contract address

#### Parameters

| Name        | Type    | Description                                  |
| ----------- | ------- | -------------------------------------------- |
| wethAddress | address | Address of the Wrapped Native token contract |

### deposit

```solidity theme={null}
function deposit(address pool, address receiver, uint256 minSharesOut) external payable returns (uint256 shares)
```

Deposits native ETH into a WETH-based pool

*Wraps ETH to WETH, then deposits to the pool with slippage protection*

#### Parameters

| Name         | Type    | Description                                               |
| ------------ | ------- | --------------------------------------------------------- |
| pool         | address | The address of the ERC4626 pool to deposit into           |
| receiver     | address | The address that will receive the pool shares             |
| minSharesOut | uint256 | Minimum amount of shares to receive (slippage protection) |

#### Return Values

| Name   | Type    | Description                                      |
| ------ | ------- | ------------------------------------------------ |
| shares | uint256 | The amount of pool shares minted to the receiver |

### mint

```solidity theme={null}
function mint(address pool, address receiver, uint256 minSharesOut) external payable returns (uint256 shares)
```

Mints pool shares by depositing native ETH

*Wraps ETH, calculates shares, then mints with slippage protection*

#### Parameters

| Name         | Type    | Description                                               |
| ------------ | ------- | --------------------------------------------------------- |
| pool         | address | The address of the ERC4626 pool to mint shares from       |
| receiver     | address | The address that will receive the pool shares             |
| minSharesOut | uint256 | Minimum amount of shares to receive (slippage protection) |

#### Return Values

| Name   | Type    | Description                                      |
| ------ | ------- | ------------------------------------------------ |
| shares | uint256 | The amount of pool shares minted to the receiver |

### withdraw

```solidity theme={null}
function withdraw(address pool, uint256 assets, address receiver, uint256 maxSharesIn) external virtual returns (uint256 shares)
```

Withdraws a specific amount of native ETH from a WETH-based pool

*Withdraws WETH from pool, unwraps to ETH, with slippage protection*

#### Parameters

| Name        | Type    | Description                                            |
| ----------- | ------- | ------------------------------------------------------ |
| pool        | address | The address of the ERC4626 pool to withdraw from       |
| assets      | uint256 | Amount of native ETH to withdraw                       |
| receiver    | address | The address that will receive the native ETH           |
| maxSharesIn | uint256 | Maximum amount of shares to burn (slippage protection) |

#### Return Values

| Name   | Type    | Description                      |
| ------ | ------- | -------------------------------- |
| shares | uint256 | The amount of pool shares burned |

### redeem

```solidity theme={null}
function redeem(address pool, uint256 shares, address receiver, uint256 minAssetsOut) external virtual returns (uint256 assets)
```

Redeems pool shares for native ETH

*Redeems shares for WETH, unwraps to ETH, with slippage protection*

#### Parameters

| Name         | Type    | Description                                            |
| ------------ | ------- | ------------------------------------------------------ |
| pool         | address | The address of the ERC4626 pool to redeem from         |
| shares       | uint256 | Amount of pool shares to redeem                        |
| receiver     | address | The address that will receive the native ETH           |
| minAssetsOut | uint256 | Minimum amount of ETH to receive (slippage protection) |

#### Return Values

| Name   | Type    | Description                               |
| ------ | ------- | ----------------------------------------- |
| assets | uint256 | The amount of native ETH sent to receiver |

### safeTransferETH

```solidity theme={null}
function safeTransferETH(address to, uint256 value) internal
```

Safely transfers ETH to an address

*Reverts if the ETH transfer fails*

#### Parameters

| Name  | Type    | Description                   |
| ----- | ------- | ----------------------------- |
| to    | address | Recipient of the ETH transfer |
| value | uint256 | Amount of ETH to transfer     |

### receive

```solidity theme={null}
receive() external payable
```

Receives ETH only from WETH contract

*Required for WETH unwrapping operations*
