message-encoding.ts 1.14 KB
Newer Older
1 2
import { getContractInterface } from '@eth-optimism/contracts'
import { ethers } from 'ethers'
3

4
import { CoreCrossChainMessage } from '../interfaces'
5 6 7

/**
 * Returns the canonical encoding of a cross chain message. This encoding is used in various
8
 * locations within the Optimism smart contracts.
9 10 11 12 13
 *
 * @param message Cross chain message to encode.
 * @returns Canonical encoding of the message.
 */
export const encodeCrossChainMessage = (
14
  message: CoreCrossChainMessage
15 16 17 18 19 20 21 22 23
): string => {
  return getContractInterface('L2CrossDomainMessenger').encodeFunctionData(
    'relayMessage',
    [message.target, message.sender, message.message, message.messageNonce]
  )
}

/**
 * Returns the canonical hash of a cross chain message. This hash is used in various locations
24
 * within the Optimism smart contracts and is the keccak256 hash of the result of
25 26 27 28 29 30
 * encodeCrossChainMessage.
 *
 * @param message Cross chain message to hash.
 * @returns Canonical hash of the message.
 */
export const hashCrossChainMessage = (
31
  message: CoreCrossChainMessage
32 33 34 35 36 37
): string => {
  return ethers.utils.solidityKeccak256(
    ['bytes'],
    [encodeCrossChainMessage(message)]
  )
}