UNPKG

viem

Version:

TypeScript Interface for Ethereum

46 lines (41 loc) 1.24 kB
import type { ErrorType } from '../../errors/utils.js' import type { Hex } from '../../types/misc.js' import { type SizeErrorType, size } from '../../utils/data/size.js' import { type SliceErrorType, slice } from '../../utils/data/slice.js' import { hexToBigInt } from '../../utils/encoding/fromHex.js' export type OpaqueDataToDepositDataParameters = Hex export type OpaqueDataToDepositDataReturnType = { mint: bigint value: bigint gas: bigint isCreation: boolean data: Hex } export type OpaqueDataToDepositDataErrorType = | SliceErrorType | SizeErrorType | ErrorType export function opaqueDataToDepositData( opaqueData: Hex, ): OpaqueDataToDepositDataReturnType { let offset = 0 const mint = slice(opaqueData, offset, offset + 32) offset += 32 const value = slice(opaqueData, offset, offset + 32) offset += 32 const gas = slice(opaqueData, offset, offset + 8) offset += 8 const isCreation = BigInt(slice(opaqueData, offset, offset + 1)) === 1n offset += 1 const data = offset > size(opaqueData) - 1 ? '0x' : slice(opaqueData, offset, opaqueData.length) return { mint: hexToBigInt(mint), value: hexToBigInt(value), gas: hexToBigInt(gas), isCreation, data, } }