import type { ErrorType } from '../../errors/utils.js' import type { Chain, ExtractChainFormatterParameters, } from '../../types/chain.js' import type { RpcTransactionRequest } from '../../types/rpc.js' import type { TransactionRequest } from '../../types/transaction.js' import { numberToHex } from '../encoding/toHex.js' import { type DefineFormatterErrorType, defineFormatter } from './formatter.js' export type FormattedTransactionRequest< TChain extends Chain | undefined = Chain | undefined, > = ExtractChainFormatterParameters< TChain, 'transactionRequest', TransactionRequest > export const rpcTransactionType = { legacy: '0x0', eip2930: '0x1', eip1559: '0x2', } as const export type FormatTransactionRequestErrorType = ErrorType export function formatTransactionRequest( transactionRequest: Partial, ) { return { ...transactionRequest, gas: typeof transactionRequest.gas !== 'undefined' ? numberToHex(transactionRequest.gas) : undefined, gasPrice: typeof transactionRequest.gasPrice !== 'undefined' ? numberToHex(transactionRequest.gasPrice) : undefined, maxFeePerGas: typeof transactionRequest.maxFeePerGas !== 'undefined' ? numberToHex(transactionRequest.maxFeePerGas) : undefined, maxPriorityFeePerGas: typeof transactionRequest.maxPriorityFeePerGas !== 'undefined' ? numberToHex(transactionRequest.maxPriorityFeePerGas) : undefined, nonce: typeof transactionRequest.nonce !== 'undefined' ? numberToHex(transactionRequest.nonce) : undefined, type: typeof transactionRequest.type !== 'undefined' ? rpcTransactionType[transactionRequest.type] : undefined, value: typeof transactionRequest.value !== 'undefined' ? numberToHex(transactionRequest.value) : undefined, } as RpcTransactionRequest } export type DefineTransactionRequestErrorType = | DefineFormatterErrorType | ErrorType export const defineTransactionRequest = /*#__PURE__*/ defineFormatter( 'transactionRequest', formatTransactionRequest, )