# EeseeExpress

## EeseeExpress

*Squid Router extension that adds permit support and the ability to use ERC20 tokens from contract's balance.*

### AddressWithChain

```solidity
struct AddressWithChain {
  string chain;
  address _address;
}
```

### TokenData

```solidity
struct TokenData {
  contract IERC20 token;
  uint256 amount;
  bytes permit;
}
```

### squid

```solidity
contract ISquidRouter squid
```

*Contract address for Squid Router.*

### InvalidConstructor

```solidity
error InvalidConstructor()
```

### InvalidRecipient

```solidity
error InvalidRecipient()
```

### callBridgeCall

```solidity
function callBridgeCall(struct EeseeExpress.AddressWithChain squidRouter, string tokenToSymbol, struct EeseeExpress.TokenData tokenFrom, struct ISquidMulticall.Call[] sourceCalls, struct ISquidMulticall.Call[] destinationCalls, address refundRecipient, bool isExpress) external payable
```

*Send tokens to another chain with Squid and call multicall on both chains. Note: The caller must either own those tokens, or have them transfered to this contract beforehand. !WARNING! Never send any tokens to this contract from an EOA, or by contract in a separate transaction or they will be lost. Only send funds to this contract if you spend them by calling callBridgeCall function in the same transaction.*

#### Parameters

| Name             | Type                                 | Description                                                                                                                                                                   |
| ---------------- | ------------------------------------ | ----------------------------------------------------------------------------------------------------------------------------------------------------------------------------- |
| squidRouter      | struct EeseeExpress.AddressWithChain | - Struct with destination chain and the address of SquidRouter on that chain.                                                                                                 |
| tokenToSymbol    | string                               | - Token symbol to transfer to {squidRouter.chain}.                                                                                                                            |
| tokenFrom        | struct EeseeExpress.TokenData        | - Token to collect from sender or use from this contract's balance with abi-encoded permit containing approveAmount, deadline, v, r and s. Set to empty bytes to skip permit. |
| sourceCalls      | struct ISquidMulticall.Call\[]       | - Calls to make on this chain.                                                                                                                                                |
| destinationCalls | struct ISquidMulticall.Call\[]       | - Calls to make on {squidRouter.chain}.                                                                                                                                       |
| refundRecipient  | address                              | - In case calls on destination chain fail, this is the address that will receive the tokens instead.                                                                          |
| isExpress        | bool                                 | - Set to true for GMP express calls.                                                                                                                                          |

## Inherited from EeseePausable

### pause

```solidity
function pause() external virtual
```

*Called by the PAUSER\_ROLE to pause, triggers stopped state.*

### unpause

```solidity
function unpause() external virtual
```

*Called by the PAUSER\_ROLE to unpause, returns to normal state.*

## Inherited from EeseeRoleHandler

## Inherited from Pausable

### paused

```solidity
function paused() public view virtual returns (bool)
```

*Returns true if the contract is paused, and false otherwise.*

### Paused

```solidity
event Paused(address account)
```

*Emitted when the pause is triggered by `account`.*

### Unpaused

```solidity
event Unpaused(address account)
```

*Emitted when the pause is lifted by `account`.*

## Inherited from ERC2771Context

### isTrustedForwarder

```solidity
function isTrustedForwarder(address forwarder) public view virtual returns (bool)
```


---

# 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://docs.eesee.io/contracts/smart-contracts/contracts/periphery/crosschain/eeseeexpress.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.
