- 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>
140 lines
4.4 KiB
TypeScript
140 lines
4.4 KiB
TypeScript
import type * as Address from '../core/Address.js'
|
|
import * as Hex from '../core/Hex.js'
|
|
import * as Log from '../core/Log.js'
|
|
import * as TransactionReceipt from '../core/TransactionReceipt.js'
|
|
import type * as EntryPoint from './EntryPoint.js'
|
|
|
|
/**
|
|
* User Operation Receipt type.
|
|
*
|
|
* @see https://eips.ethereum.org/EIPS/eip-4337#-eth_getuseroperationreceipt
|
|
*/
|
|
export type UserOperationReceipt<
|
|
_entryPointVersion extends EntryPoint.Version = EntryPoint.Version,
|
|
bigIntType = bigint,
|
|
intType = number,
|
|
receipt = TransactionReceipt.TransactionReceipt<
|
|
TransactionReceipt.Status,
|
|
TransactionReceipt.Type,
|
|
bigIntType,
|
|
intType
|
|
>,
|
|
> = {
|
|
/** Actual gas cost. */
|
|
actualGasCost: bigIntType
|
|
/** Actual gas used. */
|
|
actualGasUsed: bigIntType
|
|
/** Entrypoint address. */
|
|
entryPoint: Address.Address
|
|
/** Logs emitted during execution. */
|
|
logs: Log.Log<false, bigIntType, intType>[]
|
|
/** Anti-replay parameter. */
|
|
nonce: bigIntType
|
|
/** Paymaster for the user operation. */
|
|
paymaster?: Address.Address | undefined
|
|
/** Revert reason, if unsuccessful. */
|
|
reason?: string | undefined
|
|
/** Transaction receipt of the user operation execution. */
|
|
receipt: receipt
|
|
/** The account sending the user operation. */
|
|
sender: Address.Address
|
|
/** If the user operation execution was successful. */
|
|
success: boolean
|
|
/** Hash of the user operation. */
|
|
userOpHash: Hex.Hex
|
|
}
|
|
|
|
/** RPC User Operation Receipt on EntryPoint 0.6 */
|
|
export type Rpc<
|
|
entryPointVersion extends EntryPoint.Version = EntryPoint.Version,
|
|
> = UserOperationReceipt<
|
|
entryPointVersion,
|
|
Hex.Hex,
|
|
Hex.Hex,
|
|
TransactionReceipt.TransactionReceipt<
|
|
TransactionReceipt.RpcStatus,
|
|
TransactionReceipt.RpcType,
|
|
Hex.Hex,
|
|
Hex.Hex
|
|
>
|
|
>
|
|
|
|
/**
|
|
* Converts an {@link ox#UserOperationReceipt.Rpc} to an {@link ox#UserOperationReceipt.UserOperationReceipt}.
|
|
*
|
|
* @example
|
|
* ```ts twoslash
|
|
* // @noErrors
|
|
* import { UserOperationReceipt } from 'ox/erc4337'
|
|
*
|
|
* const userOperationReceipt = UserOperationReceipt.fromRpc({
|
|
* actualGasCost: '0x1',
|
|
* actualGasUsed: '0x2',
|
|
* entryPoint: '0x0000000071727de22e5e9d8baf0edac6f37da032',
|
|
* logs: [],
|
|
* nonce: '0x1',
|
|
* receipt: { ... },
|
|
* sender: '0xE911628bF8428C23f179a07b081325cAe376DE1f',
|
|
* success: true,
|
|
* userOpHash: '0x5ab163e9b2f30549274c7c567ca0696edf9ef1aa476d9784d22974468fdb24d8',
|
|
* })
|
|
* ```
|
|
*
|
|
* @param rpc - The RPC user operation receipt to convert.
|
|
* @returns An instantiated {@link ox#UserOperationReceipt.UserOperationReceipt}.
|
|
*/
|
|
export function fromRpc(rpc: Rpc): UserOperationReceipt {
|
|
return {
|
|
...rpc,
|
|
actualGasCost: BigInt(rpc.actualGasCost),
|
|
actualGasUsed: BigInt(rpc.actualGasUsed),
|
|
logs: rpc.logs.map((log) => Log.fromRpc(log)),
|
|
nonce: BigInt(rpc.nonce),
|
|
receipt: TransactionReceipt.fromRpc(rpc.receipt),
|
|
} as UserOperationReceipt
|
|
}
|
|
|
|
/**
|
|
* Converts a {@link ox#UserOperationReceipt.UserOperationReceipt} to a {@link ox#UserOperationReceipt.Rpc}.
|
|
*
|
|
* @example
|
|
* ```ts twoslash
|
|
* // @noErrors
|
|
* import { UserOperationReceipt } from 'ox/erc4337'
|
|
*
|
|
* const userOperationReceipt = UserOperationReceipt.toRpc({
|
|
* actualGasCost: 1n,
|
|
* actualGasUsed: 2n,
|
|
* entryPoint: '0x0000000071727de22e5e9d8baf0edac6f37da032',
|
|
* logs: [],
|
|
* nonce: 1n,
|
|
* receipt: { ... },
|
|
* sender: '0xE911628bF8428C23f179a07b081325cAe376DE1f',
|
|
* success: true,
|
|
* userOpHash: '0x5ab163e9b2f30549274c7c567ca0696edf9ef1aa476d9784d22974468fdb24d8',
|
|
* })
|
|
* ```
|
|
*
|
|
* @param userOperationReceipt - The user operation receipt to convert.
|
|
* @returns An RPC-formatted user operation receipt.
|
|
*/
|
|
export function toRpc(userOperationReceipt: UserOperationReceipt): Rpc {
|
|
const rpc = {} as Rpc
|
|
|
|
rpc.actualGasCost = Hex.fromNumber(userOperationReceipt.actualGasCost)
|
|
rpc.actualGasUsed = Hex.fromNumber(userOperationReceipt.actualGasUsed)
|
|
rpc.entryPoint = userOperationReceipt.entryPoint
|
|
rpc.logs = userOperationReceipt.logs.map((log) => Log.toRpc(log))
|
|
rpc.nonce = Hex.fromNumber(userOperationReceipt.nonce)
|
|
rpc.receipt = TransactionReceipt.toRpc(userOperationReceipt.receipt)
|
|
rpc.sender = userOperationReceipt.sender
|
|
rpc.success = userOperationReceipt.success
|
|
rpc.userOpHash = userOperationReceipt.userOpHash
|
|
|
|
if (userOperationReceipt.paymaster)
|
|
rpc.paymaster = userOperationReceipt.paymaster
|
|
if (userOperationReceipt.reason) rpc.reason = userOperationReceipt.reason
|
|
|
|
return rpc
|
|
}
|