# L1ScrollMessenger



> L1ScrollMessenger

The `L1ScrollMessenger` contract can: 1. send messages from layer 1 to layer 2; 2. relay messages from layer 2 layer 1; 3. replay failed message by replacing the gas limit; 4. drop expired message due to sequencer problems.

*All deposited Ether (including `WETH` deposited throng `L1WETHGateway`) will locked in this contract.*

## Methods

### counterpart

```solidity
function counterpart() external view returns (address)
```

The address of counterpart ScrollMessenger contract in L1/L2.




#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |

### dropMessage

```solidity
function dropMessage(address _from, address _to, uint256 _value, uint256 _messageNonce, bytes _message) external nonpayable
```

Drop a skipped message.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _from | address | undefined |
| _to | address | undefined |
| _value | uint256 | undefined |
| _messageNonce | uint256 | undefined |
| _message | bytes | undefined |

### feeVault

```solidity
function feeVault() external view returns (address)
```

The address of fee vault, collecting cross domain messaging fee.




#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |

### initialize

```solidity
function initialize(address _counterpart, address _feeVault, address _rollup, address _messageQueue) external nonpayable
```

Initialize the storage of L1ScrollMessenger.

*The parameters `_counterpart`, `_rollup` and `_messageQueue` are no longer used.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| _counterpart | address | The address of L2ScrollMessenger contract in L2. |
| _feeVault | address | The address of fee vault, which will be used to collect relayer fee. |
| _rollup | address | The address of ScrollChain contract. |
| _messageQueue | address | The address of L1MessageQueue contract. |

### isL1MessageDropped

```solidity
function isL1MessageDropped(bytes32) external view returns (bool)
```

Mapping from L1 message hash to drop status.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |

#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |

### isL2MessageExecuted

```solidity
function isL2MessageExecuted(bytes32) external view returns (bool)
```

Mapping from L2 message hash to a boolean value indicating if the message has been successfully executed.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |

#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |

### maxReplayTimes

```solidity
function maxReplayTimes() external view returns (uint256)
```

The maximum number of times each L1 message can be replayed.




#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |

### messageQueue

```solidity
function messageQueue() external view returns (address)
```

The address of L1MessageQueue contract.




#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |

### messageSendTimestamp

```solidity
function messageSendTimestamp(bytes32) external view returns (uint256)
```

Mapping from L1 message hash to the timestamp when the message is sent.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |

#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |

### owner

```solidity
function owner() external view returns (address)
```



*Returns the address of the current owner.*


#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |

### paused

```solidity
function paused() external view returns (bool)
```



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


#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | bool | undefined |

### prevReplayIndex

```solidity
function prevReplayIndex(uint256) external view returns (uint256)
```

Mapping from queue index to previous replay queue index.

*If a message `x` was replayed 3 times with index `q1`, `q2` and `q3`, the value of `prevReplayIndex` and `replayStates` will be `replayStates[hash(x)].lastIndex = q3`, `replayStates[hash(x)].times = 3`, `prevReplayIndex[q3] = q2`, `prevReplayIndex[q2] = q1`, `prevReplayIndex[q1] = x` and `prevReplayIndex[x]=nil`.The index `x` that `prevReplayIndex[x]=nil` is used as the termination of the list. Usually we use `0` to represent `nil`, but we cannot distinguish it with the first message with index zero. So a nonzero offset `1` is added to the value of `prevReplayIndex[x]` to avoid such situation.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |

#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | uint256 | undefined |

### relayMessageWithProof

```solidity
function relayMessageWithProof(address _from, address _to, uint256 _value, uint256 _nonce, bytes _message, IL1ScrollMessenger.L2MessageProof _proof) external nonpayable
```





#### Parameters

| Name | Type | Description |
|---|---|---|
| _from | address | undefined |
| _to | address | undefined |
| _value | uint256 | undefined |
| _nonce | uint256 | undefined |
| _message | bytes | undefined |
| _proof | IL1ScrollMessenger.L2MessageProof | undefined |

### renounceOwnership

```solidity
function renounceOwnership() external nonpayable
```



*Leaves the contract without owner. It will not be possible to call `onlyOwner` functions. Can only be called by the current owner. NOTE: Renouncing ownership will leave the contract without an owner, thereby disabling any functionality that is only available to the owner.*


### replayMessage

```solidity
function replayMessage(address _from, address _to, uint256 _value, uint256 _messageNonce, bytes _message, uint32 _newGasLimit, address _refundAddress) external payable
```

Replay an existing message.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _from | address | undefined |
| _to | address | undefined |
| _value | uint256 | undefined |
| _messageNonce | uint256 | undefined |
| _message | bytes | undefined |
| _newGasLimit | uint32 | undefined |
| _refundAddress | address | undefined |

### replayStates

```solidity
function replayStates(bytes32) external view returns (uint128 times, uint128 lastIndex)
```

Mapping from L1 message hash to replay state.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _0 | bytes32 | undefined |

#### Returns

| Name | Type | Description |
|---|---|---|
| times | uint128 | undefined |
| lastIndex | uint128 | undefined |

### rollup

```solidity
function rollup() external view returns (address)
```

The address of Rollup contract.




#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |

### sendMessage

```solidity
function sendMessage(address _to, uint256 _value, bytes _message, uint256 _gasLimit, address _refundAddress) external payable
```

Send cross chain message from L1 to L2 or L2 to L1.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _to | address | undefined |
| _value | uint256 | undefined |
| _message | bytes | undefined |
| _gasLimit | uint256 | undefined |
| _refundAddress | address | undefined |

### sendMessage

```solidity
function sendMessage(address _to, uint256 _value, bytes _message, uint256 _gasLimit) external payable
```

Send cross chain message from L1 to L2 or L2 to L1.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _to | address | undefined |
| _value | uint256 | undefined |
| _message | bytes | undefined |
| _gasLimit | uint256 | undefined |

### setPause

```solidity
function setPause(bool _status) external nonpayable
```

Pause the contract

*This function can only called by contract owner.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| _status | bool | The pause status to update. |

### transferOwnership

```solidity
function transferOwnership(address newOwner) external nonpayable
```



*Transfers ownership of the contract to a new account (`newOwner`). Can only be called by the current owner.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| newOwner | address | undefined |

### updateFeeVault

```solidity
function updateFeeVault(address _newFeeVault) external nonpayable
```

Update fee vault contract.

*This function can only called by contract owner.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| _newFeeVault | address | The address of new fee vault contract. |

### updateMaxReplayTimes

```solidity
function updateMaxReplayTimes(uint256 _newMaxReplayTimes) external nonpayable
```

Update max replay times.

*This function can only called by contract owner.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| _newMaxReplayTimes | uint256 | The new max replay times. |

### xDomainMessageSender

```solidity
function xDomainMessageSender() external view returns (address)
```

See {IScrollMessenger-xDomainMessageSender}




#### Returns

| Name | Type | Description |
|---|---|---|
| _0 | address | undefined |



## Events

### FailedRelayedMessage

```solidity
event FailedRelayedMessage(bytes32 indexed messageHash)
```

Emitted when a cross domain message is failed to relay.



#### Parameters

| Name | Type | Description |
|---|---|---|
| messageHash `indexed` | bytes32 | The hash of the message. |

### Initialized

```solidity
event Initialized(uint8 version)
```



*Triggered when the contract has been initialized or reinitialized.*

#### Parameters

| Name | Type | Description |
|---|---|---|
| version  | uint8 | undefined |

### OwnershipTransferred

```solidity
event OwnershipTransferred(address indexed previousOwner, address indexed newOwner)
```





#### Parameters

| Name | Type | Description |
|---|---|---|
| previousOwner `indexed` | address | undefined |
| newOwner `indexed` | address | undefined |

### Paused

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



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

#### Parameters

| Name | Type | Description |
|---|---|---|
| account  | address | undefined |

### RelayedMessage

```solidity
event RelayedMessage(bytes32 indexed messageHash)
```

Emitted when a cross domain message is relayed successfully.



#### Parameters

| Name | Type | Description |
|---|---|---|
| messageHash `indexed` | bytes32 | The hash of the message. |

### SentMessage

```solidity
event SentMessage(address indexed sender, address indexed target, uint256 value, uint256 messageNonce, uint256 gasLimit, bytes message)
```

Emitted when a cross domain message is sent.



#### Parameters

| Name | Type | Description |
|---|---|---|
| sender `indexed` | address | The address of the sender who initiates the message. |
| target `indexed` | address | The address of target contract to call. |
| value  | uint256 | The amount of value passed to the target contract. |
| messageNonce  | uint256 | The nonce of the message. |
| gasLimit  | uint256 | The optional gas limit passed to L1 or L2. |
| message  | bytes | The calldata passed to the target contract. |

### Unpaused

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



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

#### Parameters

| Name | Type | Description |
|---|---|---|
| account  | address | undefined |

### UpdateFeeVault

```solidity
event UpdateFeeVault(address _oldFeeVault, address _newFeeVault)
```

Emitted when owner updates fee vault contract.



#### Parameters

| Name | Type | Description |
|---|---|---|
| _oldFeeVault  | address | The address of old fee vault contract. |
| _newFeeVault  | address | The address of new fee vault contract. |

### UpdateMaxReplayTimes

```solidity
event UpdateMaxReplayTimes(uint256 oldMaxReplayTimes, uint256 newMaxReplayTimes)
```

Emitted when the maximum number of times each message can be replayed is updated.



#### Parameters

| Name | Type | Description |
|---|---|---|
| oldMaxReplayTimes  | uint256 | The old maximum number of times each message can be replayed. |
| newMaxReplayTimes  | uint256 | The new maximum number of times each message can be replayed. |



## Errors

### ErrorZeroAddress

```solidity
error ErrorZeroAddress()
```



*Thrown when the given address is `address(0)`.*



