Files
FrenoCorp/node_modules/viem/utils/signature/serializeErc8010Signature.ts
Michael Freno 7c684a42cc FRE-600: Fix code review blockers
- Consolidated duplicate UndoManagers to single instance
- Fixed connection promise to only resolve on 'connected' status
- Fixed WebSocketProvider import (WebsocketProvider)
- Added proper doc.destroy() cleanup
- Renamed isPresenceInitialized property to avoid conflict

Co-Authored-By: Paperclip <noreply@paperclip.ing>
2026-04-25 00:08:01 -04:00

54 lines
1.9 KiB
TypeScript

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 { ByteArray, Hex } from '../../types/misc.js'
import { hexToBytes } from '../encoding/toBytes.js'
type To = 'bytes' | 'hex'
export type SerializeErc8010SignatureParameters<to extends To = 'hex'> = {
/** 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
to?: to | To | undefined
}
export type SerializeErc8010SignatureReturnType<to extends To = 'hex'> =
| (to extends 'hex' ? Hex : never)
| (to extends 'bytes' ? ByteArray : never)
export type SerializeErc8010SignatureErrorType = ErrorType
/**
* @description Serializes a ERC-8010 flavoured signature into hex format.
*
* @param signature ERC-8010 signature in object format.
* @returns ERC-8010 signature in hex format.
*/
export function serializeErc8010Signature<to extends To = 'hex'>(
parameters: SerializeErc8010SignatureParameters<to>,
): SerializeErc8010SignatureReturnType<to> {
const { address, data, signature, to = 'hex' } = parameters
const signature_ = SignatureErc8010.wrap({
authorization: {
address: parameters.authorization.address,
chainId: parameters.authorization.chainId,
nonce: BigInt(parameters.authorization.nonce),
r: BigInt(parameters.authorization.r),
s: BigInt(parameters.authorization.s),
yParity: parameters.authorization.yParity!,
},
data,
signature,
to: address,
})
if (to === 'hex') return signature_ as SerializeErc8010SignatureReturnType<to>
return hexToBytes(signature_) as SerializeErc8010SignatureReturnType<to>
}