@xuxinlai2002/pns-js
Version:
A NPM package in Typescript for .Play Name Service
75 lines (73 loc) • 2.69 kB
text/typescript
import { type ChainFormatters } from '../../types/chain.js'
import type { Hash } from '../../types/misc.js'
import { type RpcTransaction } from '../../types/rpc.js'
import { hexToBigInt } from '../../utils/encoding/fromHex.js'
import { defineBlock } from '../../utils/formatters/block.js'
import {
defineTransaction,
formatTransaction,
} from '../../utils/formatters/transaction.js'
import { defineTransactionReceipt } from '../../utils/formatters/transactionReceipt.js'
import type {
OptimismBlockOverrides,
OptimismRpcBlockOverrides,
OptimismRpcTransaction,
OptimismRpcTransactionReceiptOverrides,
OptimismTransaction,
OptimismTransactionReceiptOverrides,
} from './types.js'
export const formattersOptimism = {
block: /*#__PURE__*/ defineBlock({
format(
args: OptimismRpcBlockOverrides & {
transactions: Hash[] | OptimismRpcTransaction[]
},
): OptimismBlockOverrides & {
transactions: Hash[] | OptimismTransaction[]
} {
const transactions = args.transactions?.map((transaction) => {
if (typeof transaction === 'string') return transaction
const formatted = formatTransaction(
transaction as RpcTransaction,
) as OptimismTransaction
if (formatted.typeHex === '0x7e') {
formatted.isSystemTx = transaction.isSystemTx
formatted.mint = transaction.mint
? hexToBigInt(transaction.mint)
: undefined
formatted.sourceHash = transaction.sourceHash
formatted.type = 'deposit'
}
return formatted
}) as Hash[] | OptimismTransaction[]
return {
transactions,
stateRoot: args.stateRoot,
}
},
}),
transaction: /*#__PURE__*/ defineTransaction({
format(args: OptimismRpcTransaction): OptimismTransaction {
const transaction = {} as OptimismTransaction
if (args.type === '0x7e') {
transaction.isSystemTx = args.isSystemTx
transaction.mint = args.mint ? hexToBigInt(args.mint) : undefined
transaction.sourceHash = args.sourceHash
transaction.type = 'deposit'
}
return transaction
},
}),
transactionReceipt: /*#__PURE__*/ defineTransactionReceipt({
format(
args: OptimismRpcTransactionReceiptOverrides,
): OptimismTransactionReceiptOverrides {
return {
l1GasPrice: args.l1GasPrice ? hexToBigInt(args.l1GasPrice) : null,
l1GasUsed: args.l1GasUsed ? hexToBigInt(args.l1GasUsed) : null,
l1Fee: args.l1Fee ? hexToBigInt(args.l1Fee) : null,
l1FeeScalar: args.l1FeeScalar ? Number(args.l1FeeScalar) : null,
}
},
}),
} as const satisfies ChainFormatters