BitqueryBitqueryData Store
Hyperliquid logoHyperliquidEventsOrders

Hyperliquid Native Perps: BTC, ETH, SOL, HYPE Oracle and Funding

Oracle price, mark price and hourly funding rate history for BTC, ETH, SOL, HYPE, XRP, DOGE and every other validator-operated HyperCore perp, block by block.

Coverage
Latest monthto Nov 5, 2026 · yesterday
Rows
≈3.1Brows · estimate
Size
≈12 GBParquet · estimate
Tables
3Parquet, one prefix each
Columns
50across 3 tables
Coverage ends yesterday, UTC

Overview

Native HyperCore perps are the markets the Hyperliquid validator set operates itself: BTC, ETH, SOL, HYPE, XRP, DOGE, ZEC, XMR, WLD, RUNE, TRUMP, LINK, NEAR, kPEPE and about 220 others (Market_Protocol = hypercore), as opposed to HIP-3 markets deployed by third parties. Their oracle is not published as a HyperCore event stream; it lives in the signed consensus actions that go into each block. This dataset parses those actions. native_price_updates is the SetGlobalAction the engine applies roughly every 40 to 50 blocks: one row per native market per push, with the oracle price and the mark price the engine set, the external perp price, and the block, consensus round and proposer. native_oracle_votes is each validator's validatorL1UpdateReferenceOracle submission: one row per validator, market and vote, so the aggregated oracle can be checked against its inputs. native_perp_fundings is the hourly settlement: one row per account and native market with the rate, signed position and USDC paid or received.

Every row carries Block_Number and Block_Time (epoch nanoseconds, UTC). Price rows also carry Bundle_Index and Action_Index, the position of the action inside the block, so ordering is deterministic down to the action. Prices are decimal strings exactly as the node recorded them; addresses are 0x-prefixed hex. HIP-3 markets are not in this dataset; their oracle and mark prices are in Hyperliquid Order Book.

Use cases

  • Hyperliquid funding rate history for BTC, ETH, SOL, HYPE and XRP perps, reproduced from the oracle price in force at each settlement block
  • Oracle versus mark price divergence on BTC and ETH perps at ~3-second resolution
  • Validator oracle vote dispersion: which validator submitted which BTC or ETH price, block by block
  • Funding paid and received per wallet on native perps, joined on Block_Number with the oracle push that preceded the settlement
  • Carry and basis backtests on DOGE, ZEC, XMR, WLD, TRUMP, LINK and the long tail of native markets

3 tables

50 columns · free sample for each table

native_price_updates

19 columns

One row per native perp market per SetGlobalAction push: the oracle and mark price the engine set, with block, round, proposer and action position.

hyperliquid/native_price_updates<start_block>_<end_block>.parquet1000 blocks per file
Browse columns Sample fileSample updated Nov 6, 2026

native_oracle_votes

17 columns

One row per validator, native market and validatorL1UpdateReferenceOracle submission: the price that validator voted, with block, round and action position.

hyperliquid/native_oracle_votes<start_block>_<end_block>.parquet1000 blocks per file
Browse columns Sample fileSample updated Nov 6, 2026

native_perp_fundings

14 columns

One row per account and native perp market at each hourly funding settlement: rate, signed position and USDC paid or received.

hyperliquid/native_perp_fundings<start_block>_<end_block>.parquet1000 blocks per file; one file per settlement hour
Browse columns Sample fileSample updated Nov 6, 2026

Schema reference

copies a column name
50 columns
native_price_updates19 columnsOne row per native perp market per SetGlobalAction push: the oracle and mark price the engine set, with block, round, proposer and action position.
ColumnTypeDescription
Block_NumberInt64HyperCore block number; the join key across the Hyperliquid datasets
Block_TimeInt64Consensus block time, epoch nanoseconds, UTC
Block_DateDateBlock date, UTC
Consensus_RoundInt64Consensus round that produced the block; runs ahead of Block_Number because empty rounds produce no block
Consensus_ProposerStringValidator that proposed the block, 0x-prefixed hex
Bundle_IndexInt64Position of the action bundle inside the block, from 0
Action_IndexInt64Position of the action inside its bundle, from 0; with Block_Number and Bundle_Index gives a total order
Action_SignerStringAccount the engine resolved as the actor of the SetGlobalAction, 0x-prefixed hex
Action_NonceInt64Action nonce, epoch milliseconds by convention
Action_StatusStringEngine verdict on the action: ok or err
Asset_IndexInt64Position of the market in the HyperCore perp universe (0 = BTC, 1 = ETH); the raw key the action uses
Market_CoinStringMarket name resolved from Asset_Index, such as BTC or ETH
Market_KindStringAlways perp
Market_ProtocolStringAlways hypercore (validator-operated market)
Oracle_PxDecimalOracle price the engine set for the market in this push, decimal string
Mark_PxDecimalMark price the engine set for the market in this push, decimal string
ExternalPerp_PxDecimalExternal perp reference price carried in the same action, decimal string; empty when none
UsdtUsdc_PxDecimalUSDT/USDC price carried in the same action, decimal string
Native_PxDecimalHYPE price carried in the same action, decimal string
Sample file
native_oracle_votes17 columnsOne row per validator, native market and validatorL1UpdateReferenceOracle submission: the price that validator voted, with block, round and action position.
ColumnTypeDescription
Block_NumberInt64HyperCore block number; the join key across the Hyperliquid datasets
Block_TimeInt64Consensus block time, epoch nanoseconds, UTC
Block_DateDateBlock date, UTC
Consensus_RoundInt64Consensus round that produced the block
Consensus_ProposerStringValidator that proposed the block, 0x-prefixed hex
Bundle_IndexInt64Position of the action bundle inside the block, from 0
Action_IndexInt64Position of the action inside its bundle, from 0
ValidatorStringValidator account that submitted the vote, 0x-prefixed hex
Action_NonceInt64Action nonce, epoch milliseconds by convention
Action_StatusStringEngine verdict on the action: ok or err
Market_CoinStringMarket name as the validator named it, such as BTC or ETH
Market_KindStringAlways perp
Market_ProtocolStringAlways hypercore
Oracle_PxDecimalOracle price this validator submitted for the market, decimal string
ExternalPerp_PxDecimalExternal perp price this validator submitted, decimal string; empty when none
UsdtUsdc_PxDecimalUSDT/USDC price in the vote's scalar updates, decimal string
Native_PxDecimalHYPE price in the vote's scalar updates, decimal string
Sample file
native_perp_fundings14 columnsOne row per account and native perp market at each hourly funding settlement: rate, signed position and USDC paid or received.
ColumnTypeDescription
ChainIdStringChain identifier, always hyperliquid-core
Block_NumberUInt64Settlement block number; the join key to the price tables
Block_TimeInt64Block time, epoch nanoseconds, UTC
Block_DateDateBlock date, UTC
Funding_Trader_AddressStringAccount address, 0x-prefixed hex
Funding_Market_SymbolStringReadable market name, such as BTC
Funding_Market_KindStringAlways perp
Funding_Market_ProtocolStringAlways hypercore
Funding_Market_CoinRawStringMarket as the node names it; equals Market_Coin in the price tables
Funding_Market_IsPerpBoolAlways 1
Funding_Market_MaxLeverageUInt32Maximum leverage on the market (40 means 40x); 0 when unknown
Funding_AmountDecimalUSDC received by the account, negative when it paid, decimal string
Funding_RateDecimalSigned hourly funding rate applied, decimal string
Funding_SizeDecimalSigned position size the rate applied to, negative for a short, decimal string
Sample file

Ask an AI about this data

Send this dataset’s full schema to an assistant and ask it anything. It reads the plain-text brief first, so the answer comes from the real column list rather than a guess.

Start with

Opens a new chat with the question filled in. Nothing about you is sent to Bitquery, and the assistant sees only the public brief.

Delivery

Parquet files in a Requester Pays S3 bucket or a Cloudflare R2 bucket, chosen at checkout. On S3 you download with your own AWS account and AWS bills the transfer; on R2 you download with a read-only API key and pay no egress. Layout:

# native_price_updates: 1000 blocks per file
hyperliquid/native_price_updates<start_block>_<end_block>.parquet

# native_oracle_votes: 1000 blocks per file
hyperliquid/native_oracle_votes<start_block>_<end_block>.parquet

# native_perp_fundings: 1000 blocks per file; one file per settlement hour
hyperliquid/native_perp_fundings<start_block>_<end_block>.parquet
  1. Download a free sampleNo email needed.
  2. Pay nowName, work email and licence check.
  3. Pay the invoiceBy card or bank transfer.
  4. Download from S3 or R2The team prepares the export and emails the bucket path, plus a read-only API key for R2 orders.

Need new data after your purchase?

Kafka Streams sends new Hyperliquid data in real time, so your copy can stay current after the files end. It is sold on an Enterprise plan.

Read the Kafka docs

Price

Latest month
Oct 5, 2026 → Nov 5, 2026
$400one-time, USD
  • All 3 tables, 50 columns
  • Parquet files in the layout under Delivery
  • S3 or R2 download, chosen at checkout
  • Licensed under the Data License
Pay now

FAQ

11 questions
What is included?

Three Parquet tables from HyperCore consensus data: native_price_updates (19 columns), native_oracle_votes (17 columns) and native_perp_fundings (14 columns). All native perp markets, every block in the window. Each row carries Block_Number, so the tables join with each other and with the Hyperliquid Trades and Order Book datasets.

Which markets are covered?

Every validator-operated HyperCore perp, about 235 markets in November 2026. By fills on 5 November 2026 the busiest were RUNE, ZEC, HYPE, WLD, BTC, LIT, ETH, SOL, TRUMP, INIT, XMR, NEAR, kPEPE, ICP, INJ and XRP; by notional BTC and ETH lead. Delisted markets such as MATIC carry no price and are omitted. HIP-3 markets (xyz:, io:, para: and the other deployer prefixes) are not included.

Which oracle price does funding use?

HyperCore settles funding once an hour at the first block after the hour. The oracle price in force at that block is the last native_price_updates row for that market with Block_Number at or below the settlement Block_Number in native_perp_fundings. Join on Market_Coin = Funding_Market_CoinRaw. The validator votes behind that push are in native_oracle_votes at the same blocks.

Where does the price come from?

From the signed actions in the consensus stream (replica_cmds), not from the event streams, API snapshots or inferred from payments. SetGlobalAction is the engine's own oracle and mark price write; validatorL1UpdateReferenceOracle is each validator's submitted vote. The raw action is parsed verbatim; Consensus_Round, Consensus_Proposer, Bundle_Index and Action_Index say exactly where in the block it sat.

What are the known gaps?

Our raw block archive has short holes. For the 30 days to 5 November 2026 they are: about 70 minutes on 8 to 9 October (blocks 1176454000 to 1176512999), and single 1,000-block holes (about 70 seconds each) on 7, 10 and 25 October plus five consecutive ones on 14 October. Blocks inside a hole are absent from all three tables; a hole never lands on a funding settlement block in that window. Gaps cannot be recovered after the fact, so the delivery manifest lists them explicitly.

How is Asset_Index mapped to a coin?

SetGlobalAction lists prices by position in the HyperCore perp universe (0 = BTC, 1 = ETH, 2 = ATOM and so on). We resolve the position to Market_Coin using the universe as published by the node, and keep Asset_Index so the mapping can be checked. Delisted positions carry no price and are omitted.

How big is it?

For a measured 1,000-block pack on 5 November 2026: 3,938 price rows (22 pushes), 72,336 vote rows (411 votes) and, at a settlement block the same morning, 310,226 funding rows across 179 native markets. Scaled to 30 days that is roughly 150 million price rows, 2.7 billion vote rows and 220 million funding rows, around 12 GB of ZSTD Parquet in total. These are estimates; exact counts and sizes come with the delivery manifest.

How far back does it go?

30 days up to the day before we prepare the files. HyperCore history is kept as a rolling window, and there is no longer window to buy. For a continuous feed beyond that, ask about the live stream.

How do I load a file?

With DuckDB: SELECT * FROM read_parquet('native_price_updates/*.parquet'). With pandas: pd.read_parquet('native_price_updates/'). Parse Oracle_Px, Mark_Px, Funding_Amount, Funding_Rate and Funding_Size with Decimal rather than float; they are stored as decimal strings on purpose.

How is it delivered?

As flat Parquet files, one folder per table, one file per 1,000-block pack, with a JSON manifest listing every file, its sha256 and the block holes. We prepare the files within 7 business days of purchase. You choose at checkout where to collect them: a Requester Pays S3 bucket, downloaded with your own AWS account, or a Cloudflare R2 bucket with a read-only API key and no egress fees. Files stay available for 7 days from delivery.

What is not included?

HIP-3 markets (their oracle and mark prices are in Hyperliquid Order Book), fills, order and book data, spot and outcome markets, and ledger events.