Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
5 changes: 5 additions & 0 deletions .changeset/nasty-jokes-wink.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"wagmi": minor
---

Added `useBlobBaseFee` hook.
5 changes: 5 additions & 0 deletions .changeset/yummy-cups-sit.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,5 @@
---
"@wagmi/core": minor
---

Added `getBlobBaseFee` action.
14 changes: 14 additions & 0 deletions packages/core/src/actions/getBlobBaseFee.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { chain, config } from '@wagmi/test'
import { expect, test } from 'vitest'

import { getBlobBaseFee } from './getBlobBaseFee.js'

test('default', async () => {
await expect(getBlobBaseFee(config)).resolves.toBe(1n)
})

test('parameters: chainId', async () => {
await expect(
getBlobBaseFee(config, { chainId: chain.mainnet2.id }),
).resolves.toBe(1n)
})
32 changes: 32 additions & 0 deletions packages/core/src/actions/getBlobBaseFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import {
type GetBlobBaseFeeErrorType as viem_GetBlobBaseFeeErrorType,
type GetBlobBaseFeeReturnType as viem_GetBlobBaseFeeReturnType,
getBlobBaseFee as viem_getBlobBaseFee,
} from 'viem/actions'
import type { Config } from '../createConfig.js'
import type { ChainIdParameter } from '../types/properties.js'
import { getAction } from '../utils/getAction.js'

export type GetBlobBaseFeeParameters<
config extends Config,
chainId extends
config['chains'][number]['id'] = config['chains'][number]['id'],
> = ChainIdParameter<config, chainId>

export type GetBlobBaseFeeReturnType = viem_GetBlobBaseFeeReturnType

export type GetBlobBaseFeeErrorType = viem_GetBlobBaseFeeErrorType

/** https://wagmi.sh/core/actions/getBlobBaseFee */
export async function getBlobBaseFee<
config extends Config,
chainId extends config['chains'][number]['id'],
>(
config: config,
parameters: GetBlobBaseFeeParameters<config, chainId> = {},
): Promise<GetBlobBaseFeeReturnType> {
const { chainId } = parameters
const client = config.getClient({ chainId })
const action = getAction(client, viem_getBlobBaseFee, 'getBlobBaseFee')
return action({})
}
1 change: 1 addition & 0 deletions packages/core/src/exports/actions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ test('exports', () => {
"estimateGas",
"estimateMaxPriorityFeePerGas",
"getBalance",
"getBlobBaseFee",
"getBlock",
"getBlockNumber",
"getBlockTransactionCount",
Expand Down
7 changes: 7 additions & 0 deletions packages/core/src/exports/actions.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ export {
getBalance,
} from '../actions/getBalance.js'

export {
type GetBlobBaseFeeErrorType,
type GetBlobBaseFeeParameters,
type GetBlobBaseFeeReturnType,
getBlobBaseFee,
} from '../actions/getBlobBaseFee.js'

export {
type GetBlockErrorType,
type GetBlockParameters,
Expand Down
1 change: 1 addition & 0 deletions packages/core/src/exports/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@ test('exports', () => {
"estimateGas",
"estimateMaxPriorityFeePerGas",
"getBalance",
"getBlobBaseFee",
"getBlock",
"getBlockNumber",
"getBlockTransactionCount",
Expand Down
7 changes: 7 additions & 0 deletions packages/core/src/exports/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -59,6 +59,13 @@ export {
getBalance,
} from '../actions/getBalance.js'

export {
type GetBlobBaseFeeErrorType,
type GetBlobBaseFeeParameters,
type GetBlobBaseFeeReturnType,
getBlobBaseFee,
} from '../actions/getBlobBaseFee.js'

export {
type GetBlockErrorType,
type GetBlockParameters,
Expand Down
2 changes: 2 additions & 0 deletions packages/core/src/exports/query.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ test('exports', () => {
"estimateMaxPriorityFeePerGasQueryOptions",
"getBalanceQueryKey",
"getBalanceQueryOptions",
"getBlobBaseFeeQueryKey",
"getBlobBaseFeeQueryOptions",
"getBlockQueryKey",
"getBlockQueryOptions",
"getBlockNumberQueryKey",
Expand Down
9 changes: 9 additions & 0 deletions packages/core/src/exports/query.ts
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,15 @@ export {
getBalanceQueryOptions,
} from '../query/getBalance.js'

export {
type GetBlobBaseFeeData,
type GetBlobBaseFeeOptions,
type GetBlobBaseFeeQueryFnData,
type GetBlobBaseFeeQueryKey,
getBlobBaseFeeQueryKey,
getBlobBaseFeeQueryOptions,
} from '../query/getBlobBaseFee.js'

export {
type GetBlockData,
type GetBlockOptions,
Expand Down
32 changes: 32 additions & 0 deletions packages/core/src/query/getBlobBaseFee.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { chain, config } from '@wagmi/test'
import { expect, test } from 'vitest'

import { getBlobBaseFeeQueryOptions } from './getBlobBaseFee.js'

test('default', () => {
expect(getBlobBaseFeeQueryOptions(config)).toMatchInlineSnapshot(`
{
"queryFn": [Function],
"queryKey": [
"getBlobBaseFee",
{},
],
}
`)
})

test('parameters: chainId', () => {
expect(
getBlobBaseFeeQueryOptions(config, { chainId: chain.mainnet.id }),
).toMatchInlineSnapshot(`
{
"queryFn": [Function],
"queryKey": [
"getBlobBaseFee",
{
"chainId": 1,
},
],
}
`)
})
53 changes: 53 additions & 0 deletions packages/core/src/query/getBlobBaseFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,53 @@
import type { QueryOptions } from '@tanstack/query-core'
import {
type GetBlobBaseFeeErrorType,
type GetBlobBaseFeeParameters,
type GetBlobBaseFeeReturnType,
getBlobBaseFee,
} from '../actions/getBlobBaseFee.js'
import type { Config } from '../createConfig.js'
import type { ScopeKeyParameter } from '../types/properties.js'
import type { Compute, ExactPartial } from '../types/utils.js'
import { filterQueryOptions } from './utils.js'

export type GetBlobBaseFeeOptions<
config extends Config,
chainId extends config['chains'][number]['id'],
> = Compute<
ExactPartial<GetBlobBaseFeeParameters<config, chainId>> & ScopeKeyParameter
>

export function getBlobBaseFeeQueryOptions<
config extends Config,
chainId extends config['chains'][number]['id'],
>(config: config, options: GetBlobBaseFeeOptions<config, chainId> = {}) {
return {
async queryFn({ queryKey }) {
const { scopeKey: _, ...parameters } = queryKey[1]
const blobBaseFee = await getBlobBaseFee(config, parameters)
return blobBaseFee ?? null
},
queryKey: getBlobBaseFeeQueryKey(options),
} as const satisfies QueryOptions<
GetBlobBaseFeeQueryFnData,
GetBlobBaseFeeErrorType,
GetBlobBaseFeeData,
GetBlobBaseFeeQueryKey<config, chainId>
>
}

export type GetBlobBaseFeeQueryFnData = GetBlobBaseFeeReturnType

export type GetBlobBaseFeeData = GetBlobBaseFeeQueryFnData

export function getBlobBaseFeeQueryKey<
config extends Config,
chainId extends config['chains'][number]['id'],
>(options: GetBlobBaseFeeOptions<config, chainId> = {}) {
return ['getBlobBaseFee', filterQueryOptions(options)] as const
}

export type GetBlobBaseFeeQueryKey<
config extends Config,
chainId extends config['chains'][number]['id'],
> = ReturnType<typeof getBlobBaseFeeQueryKey<config, chainId>>
1 change: 1 addition & 0 deletions packages/react/src/exports/actions.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -14,6 +14,7 @@ test('exports', () => {
"estimateMaxPriorityFeePerGas",
"getAccount",
"getBalance",
"getBlobBaseFee",
"getBlock",
"getBlockNumber",
"getBlockTransactionCount",
Expand Down
1 change: 1 addition & 0 deletions packages/react/src/exports/index.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -37,6 +37,7 @@ test('exports', () => {
"useAccount",
"useAccountEffect",
"useBalance",
"useBlobBaseFee",
"useBlock",
"useBlockNumber",
"useBlockTransactionCount",
Expand Down
6 changes: 6 additions & 0 deletions packages/react/src/exports/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -30,6 +30,12 @@ export {
useBalance,
} from '../hooks/useBalance.js'

export {
type UseBlobBaseFeeParameters,
type UseBlobBaseFeeReturnType,
useBlobBaseFee,
} from '../hooks/useBlobBaseFee.js'

export {
type UseBlockParameters,
type UseBlockReturnType,
Expand Down
2 changes: 2 additions & 0 deletions packages/react/src/exports/query.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,8 @@ test('exports', () => {
"estimateMaxPriorityFeePerGasQueryOptions",
"getBalanceQueryKey",
"getBalanceQueryOptions",
"getBlobBaseFeeQueryKey",
"getBlobBaseFeeQueryOptions",
"getBlockNumberQueryKey",
"getBlockNumberQueryOptions",
"getBlockQueryKey",
Expand Down
14 changes: 14 additions & 0 deletions packages/react/src/hooks/useBlobBaseFee.test-d.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
import { expectTypeOf, test } from 'vitest'

import { useBlobBaseFee } from './useBlobBaseFee.js'

test('select data', () => {
const result = useBlobBaseFee({
query: {
select(data) {
return data?.toString()
},
},
})
expectTypeOf(result.data).toEqualTypeOf<string | undefined>()
})
45 changes: 45 additions & 0 deletions packages/react/src/hooks/useBlobBaseFee.test.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,45 @@
import { renderHook } from '@wagmi/test/react'
import { expect, test, vi } from 'vitest'

import { useBlobBaseFee } from './useBlobBaseFee.js'

test('default', async () => {
const { result } = await renderHook(() => useBlobBaseFee())

await vi.waitUntil(() => result.current.isSuccess, { timeout: 5_000 })

expect(result.current).toMatchInlineSnapshot(`
{
"data": 1n,
"dataUpdatedAt": 1675209600000,
"error": null,
"errorUpdateCount": 0,
"errorUpdatedAt": 0,
"failureCount": 0,
"failureReason": null,
"fetchStatus": "idle",
"isError": false,
"isFetched": true,
"isFetchedAfterMount": true,
"isFetching": false,
"isInitialLoading": false,
"isLoading": false,
"isLoadingError": false,
"isPaused": false,
"isPending": false,
"isPlaceholderData": false,
"isRefetchError": false,
"isRefetching": false,
"isStale": true,
"isSuccess": true,
"queryKey": [
"getBlobBaseFee",
{
"chainId": 1,
},
],
"refetch": [Function],
"status": "success",
}
`)
})
61 changes: 61 additions & 0 deletions packages/react/src/hooks/useBlobBaseFee.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
'use client'

import type {
Config,
GetBlobBaseFeeErrorType,
ResolvedRegister,
} from '@wagmi/core'
import type { Compute } from '@wagmi/core/internal'
import {
type GetBlobBaseFeeData,
type GetBlobBaseFeeOptions,
type GetBlobBaseFeeQueryFnData,
type GetBlobBaseFeeQueryKey,
getBlobBaseFeeQueryOptions,
} from '@wagmi/core/query'
import type { ConfigParameter, QueryParameter } from '../types/properties.js'
import { type UseQueryReturnType, useQuery } from '../utils/query.js'
import { useChainId } from './useChainId.js'
import { useConfig } from './useConfig.js'

export type UseBlobBaseFeeParameters<
config extends Config = Config,
chainId extends
config['chains'][number]['id'] = config['chains'][number]['id'],
selectData = GetBlobBaseFeeData,
> = Compute<
GetBlobBaseFeeOptions<config, chainId> &
ConfigParameter<config> &
QueryParameter<
GetBlobBaseFeeQueryFnData,
GetBlobBaseFeeErrorType,
selectData,
GetBlobBaseFeeQueryKey<config, chainId>
>
>

export type UseBlobBaseFeeReturnType<selectData = GetBlobBaseFeeData> =
UseQueryReturnType<selectData, GetBlobBaseFeeErrorType>

/** https://wagmi.sh/react/api/hooks/useBlobBaseFee */
export function useBlobBaseFee<
config extends Config = ResolvedRegister['config'],
chainId extends
config['chains'][number]['id'] = config['chains'][number]['id'],
selectData = GetBlobBaseFeeData,
>(
parameters: UseBlobBaseFeeParameters<config, chainId, selectData> = {},
): UseBlobBaseFeeReturnType<selectData> {
const { query = {} } = parameters

const config = useConfig(parameters)
const configChainId = useChainId({ config })
const chainId = parameters.chainId ?? configChainId

const options = getBlobBaseFeeQueryOptions(config, {
...parameters,
chainId,
})

return useQuery({ ...query, ...options })
}
2 changes: 2 additions & 0 deletions site/.vitepress/sidebar.ts
Original file line number Diff line number Diff line change
Expand Up @@ -151,6 +151,7 @@ export function getSidebar() {
link: '/react/api/hooks',
items: [
{ text: 'useBalance', link: '/react/api/hooks/useBalance' },
{ text: 'useBlobBaseFee', link: '/react/api/hooks/useBlobBaseFee' },
{
text: 'useBlockNumber',
link: '/react/api/hooks/useBlockNumber',
Expand Down Expand Up @@ -788,6 +789,7 @@ export function getSidebar() {
link: '/core/api/actions/estimateMaxPriorityFeePerGas',
},
{ text: 'getBalance', link: '/core/api/actions/getBalance' },
{ text: 'getBlobBaseFee', link: '/core/api/actions/getBlobBaseFee' },
{
text: 'getBlock',
link: '/core/api/actions/getBlock',
Expand Down
Loading
Loading