Files
FrenoCorp/node_modules/ox/core/TransactionEnvelope.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

206 lines
6.5 KiB
TypeScript
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
import type * as Address from './Address.js'
import * as Errors from './Errors.js'
import type * as Hex from './Hex.js'
import * as Value from './Value.js'
import type { Compute } from './internal/types.js'
/** Base type for a Transaction Envelope. Transaction Envelopes inherit this type. */
export type Base<
type extends string = string,
signed extends boolean = boolean,
bigintType = bigint,
numberType = number,
> = Compute<
{
/** EIP-155 Chain ID. */
chainId: numberType
/** Contract code or a hashed method call with encoded args */
data?: Hex.Hex | undefined
/** @alias `data` added for TransactionEnvelope - Transaction compatibility. */
input?: Hex.Hex | undefined
/** Sender of the transaction. */
from?: Address.Address | undefined
/** Gas provided for transaction execution */
gas?: bigintType | undefined
/** Unique number identifying this transaction */
nonce?: bigintType | undefined
/** Transaction recipient */
to?: Address.Address | null | undefined
/** Transaction type */
type: type
/** Value in wei sent with this transaction */
value?: bigintType | undefined
/** ECDSA signature r. */
r?: bigintType | undefined
/** ECDSA signature s. */
s?: bigintType | undefined
/** ECDSA signature yParity. */
yParity?: numberType | undefined
/** @deprecated ECDSA signature v (for backwards compatibility). */
v?: numberType | undefined
} & (signed extends true ? { r: bigintType; s: bigintType } : {})
>
/** RPC representation of a {@link ox#(TransactionEnvelope:namespace).Base}. */
export type BaseRpc<
type extends string = string,
signed extends boolean = boolean,
> = Base<type, signed, Hex.Hex, Hex.Hex>
/** Signed representation of a {@link ox#(TransactionEnvelope:namespace).Base}. */
export type BaseSigned<type extends string = string> = Base<type, true>
/**
* Thrown when a fee cap is too high.
*
* @example
* ```ts twoslash
* import { TransactionEnvelopeEip1559 } from 'ox'
*
* TransactionEnvelopeEip1559.assert({
* maxFeePerGas: 2n ** 256n - 1n + 1n,
* chainId: 1,
* })
* // @error: TransactionEnvelope.FeeCapTooHighError: The fee cap (`maxFeePerGas`/`maxPriorityFeePerGas` = 115792089237316195423570985008687907853269984665640564039457584007913.129639936 gwei) cannot be higher than the maximum allowed value (2^256-1).
* ```
*/
export class FeeCapTooHighError extends Errors.BaseError {
override readonly name = 'TransactionEnvelope.FeeCapTooHighError'
constructor({
feeCap,
}: {
feeCap?: bigint | undefined
} = {}) {
super(
`The fee cap (\`maxFeePerGas\`/\`maxPriorityFeePerGas\`${
feeCap ? ` = ${Value.formatGwei(feeCap)} gwei` : ''
}) cannot be higher than the maximum allowed value (2^256-1).`,
)
}
}
/**
* Thrown when a gas price is too high.
*
* @example
* ```ts twoslash
* import { TransactionEnvelopeLegacy } from 'ox'
*
* TransactionEnvelopeLegacy.assert({
* gasPrice: 2n ** 256n - 1n + 1n,
* chainId: 1,
* })
* // @error: TransactionEnvelope.GasPriceTooHighError: The gas price (`gasPrice` = 115792089237316195423570985008687907853269984665640564039457584007913.129639936 gwei) cannot be higher than the maximum allowed value (2^256-1).
* ```
*/
export class GasPriceTooHighError extends Errors.BaseError {
override readonly name = 'TransactionEnvelope.GasPriceTooHighError'
constructor({
gasPrice,
}: {
gasPrice?: bigint | undefined
} = {}) {
super(
`The gas price (\`gasPrice\`${
gasPrice ? ` = ${Value.formatGwei(gasPrice)} gwei` : ''
}) cannot be higher than the maximum allowed value (2^256-1).`,
)
}
}
/**
* Thrown when a chain ID is invalid.
*
* @example
* ```ts twoslash
* import { TransactionEnvelopeEip1559 } from 'ox'
*
* TransactionEnvelopeEip1559.assert({ chainId: 0 })
* // @error: TransactionEnvelope.InvalidChainIdError: Chain ID "0" is invalid.
* ```
*/
export class InvalidChainIdError extends Errors.BaseError {
override readonly name = 'TransactionEnvelope.InvalidChainIdError'
constructor({ chainId }: { chainId?: number | undefined }) {
super(
typeof chainId !== 'undefined'
? `Chain ID "${chainId}" is invalid.`
: 'Chain ID is invalid.',
)
}
}
/**
* Thrown when a serialized transaction is invalid.
*
* @example
* ```ts twoslash
* import { TransactionEnvelopeEip1559 } from 'ox'
*
* TransactionEnvelopeEip1559.deserialize('0x02c0')
* // @error: TransactionEnvelope.InvalidSerializedError: Invalid serialized transaction of type "eip1559" was provided.
* // @error: Serialized Transaction: "0x02c0"
* // @error: Missing Attributes: chainId, nonce, maxPriorityFeePerGas, maxFeePerGas, gas, to, value, data, accessList
* ```
*/
export class InvalidSerializedError extends Errors.BaseError {
override readonly name = 'TransactionEnvelope.InvalidSerializedError'
constructor({
attributes,
serialized,
type,
}: {
attributes: Record<string, unknown>
serialized: Hex.Hex
type: string
}) {
const missing = Object.entries(attributes)
.map(([key, value]) => (typeof value === 'undefined' ? key : undefined))
.filter(Boolean)
super(`Invalid serialized transaction of type "${type}" was provided.`, {
metaMessages: [
`Serialized Transaction: "${serialized}"`,
missing.length > 0 ? `Missing Attributes: ${missing.join(', ')}` : '',
].filter(Boolean),
})
}
}
/**
* Thrown when a tip is higher than a fee cap.
*
* @example
* ```ts twoslash
* import { TransactionEnvelopeEip1559 } from 'ox'
*
* TransactionEnvelopeEip1559.assert({
* chainId: 1,
* maxFeePerGas: 10n,
* maxPriorityFeePerGas: 11n,
* })
* // @error: TransactionEnvelope.TipAboveFeeCapError: The provided tip (`maxPriorityFeePerGas` = 11 gwei) cannot be higher than the fee cap (`maxFeePerGas` = 10 gwei).
* ```
*/
export class TipAboveFeeCapError extends Errors.BaseError {
override readonly name = 'TransactionEnvelope.TipAboveFeeCapError'
constructor({
maxPriorityFeePerGas,
maxFeePerGas,
}: {
maxPriorityFeePerGas?: bigint | undefined
maxFeePerGas?: bigint | undefined
} = {}) {
super(
[
`The provided tip (\`maxPriorityFeePerGas\`${
maxPriorityFeePerGas
? ` = ${Value.formatGwei(maxPriorityFeePerGas)} gwei`
: ''
}) cannot be higher than the fee cap (\`maxFeePerGas\`${
maxFeePerGas ? ` = ${Value.formatGwei(maxFeePerGas)} gwei` : ''
}).`,
].join('\n'),
)
}
}