PHP WebShell

Текущая директория: /usr/lib/node_modules/bitgo/node_modules/viem/utils/signature

Просмотр файла: parseErc8010Signature.ts

import type { Address } from 'abitype'
import { SignatureErc8010 } from 'ox/erc8010'
import type { ErrorType } from '../../errors/utils.js'
import type { SignedAuthorization } from '../../types/authorization.js'
import type { Hex } from '../../types/misc.js'
import type { OneOf, Prettify } from '../../types/utils.js'
import { numberToHex } from '../encoding/toHex.js'
import {
  type IsErc8010SignatureErrorType,
  isErc8010Signature,
} from './isErc8010Signature.js'

export type ParseErc8010SignatureParameters = Hex

export type ParseErc8010SignatureReturnType = Prettify<
  OneOf<
    | {
        /** Address of the initializer. */
        address?: Address | undefined
        /** Authorization signed by the delegatee. */
        authorization: SignedAuthorization
        /** Data to initialize the delegation. */
        data?: Hex | undefined
        /** The original signature. */
        signature: Hex
      }
    | {
        /** The original signature. */
        signature: Hex
      }
  >
>

export type ParseErc8010SignatureErrorType =
  | IsErc8010SignatureErrorType
  | ErrorType

/**
 * @description Parses a hex-formatted ERC-8010 flavoured signature.
 * If the signature is not in ERC-8010 format, then the underlying (original) signature is returned.
 *
 * @param signature ERC-8010 signature in hex format.
 * @returns The parsed ERC-8010 signature.
 */
export function parseErc8010Signature(
  signature: ParseErc8010SignatureParameters,
): ParseErc8010SignatureReturnType {
  if (!isErc8010Signature(signature)) return { signature }

  const {
    authorization: authorization_ox,
    to,
    ...rest
  } = SignatureErc8010.unwrap(signature)
  return {
    authorization: {
      address: authorization_ox.address,
      chainId: authorization_ox.chainId,
      nonce: Number(authorization_ox.nonce),
      r: numberToHex(authorization_ox.r, { size: 32 }),
      s: numberToHex(authorization_ox.s, { size: 32 }),
      yParity: authorization_ox.yParity,
    },
    ...(to ? { address: to } : {}),
    ...rest,
  }
}

Выполнить команду


Для локальной разработки. Не используйте в интернете!