viem
Version:
71 lines (64 loc) • 2.15 kB
text/typescript
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<TransactionRequest>,
) {
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,
)