You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
53 lines
1.4 KiB
53 lines
1.4 KiB
// Adapted from https://github.com/ethereum-optimism/optimism/blob/develop/packages/core-utils/src/optimism/deposit-transaction.ts#L117
|
|
|
|
import type { ErrorType } from '../../errors/utils.js'
|
|
import type { Log } from '../../types/log.js'
|
|
import type { Hex } from '../../types/misc.js'
|
|
import { keccak256 } from '../../utils/hash/keccak256.js'
|
|
import type { portalAbi } from '../abis.js'
|
|
import { serializeTransaction } from '../serializers.js'
|
|
import { getSourceHash } from './getSourceHash.js'
|
|
import { opaqueDataToDepositData } from './opaqueDataToDepositData.js'
|
|
|
|
export type GetL2TransactionHashParameters = {
|
|
/** The "TransactionDeposited" log to compute the L2 hash from. */
|
|
log: Log<
|
|
bigint,
|
|
number,
|
|
false,
|
|
undefined,
|
|
true,
|
|
typeof portalAbi,
|
|
'TransactionDeposited'
|
|
>
|
|
}
|
|
|
|
export type GetL2TransactionHashReturnType = Hex
|
|
|
|
export type GetL2TransactionHashErrorType = ErrorType
|
|
|
|
export function getL2TransactionHash({ log }: GetL2TransactionHashParameters) {
|
|
const sourceHash = getSourceHash({
|
|
domain: 'userDeposit',
|
|
l1BlockHash: log.blockHash,
|
|
l1LogIndex: log.logIndex,
|
|
})
|
|
const { data, gas, isCreation, mint, value } = opaqueDataToDepositData(
|
|
log.args.opaqueData,
|
|
)
|
|
|
|
return keccak256(
|
|
serializeTransaction({
|
|
from: log.args.from,
|
|
to: isCreation ? undefined : log.args.to,
|
|
sourceHash,
|
|
data,
|
|
gas,
|
|
isSystemTx: false,
|
|
mint,
|
|
type: 'deposit',
|
|
value,
|
|
}),
|
|
)
|
|
}
|