DATA/CHAIN INTELLIGENCE
L4+ · Enterprise · Desk add-on

Follow the same trader across every venue.

L4 tells you who placed an order on one venue. L4+ links that participant to activity elsewhere: on-chain wallets, deposits and withdrawals, and trades on other exchanges. Every link carries a calibrated confidence score, and every entity is an anonymous id.

Three steps from a wallet to cross-venue flow.

01Entity clusteringAddresses that behave as one owner are grouped into an entity with an anonymous id such as E-4417.
02Venue attributionDeposits and withdrawals are matched to the exchange that owns the receiving or sending address, and to the order flow that follows on that venue.
03Cross-venue trade trackingThe entity's trades on one venue are linked to activity on others, matched on timing and size, each link scored from 0 to 1.

The trace on the right follows one entity through five hops in a little over three minutes: a perp position on Hyperliquid, a spot hedge on a second venue, a bridge withdrawal and a sale on a third.

ENTITY TRACE · E-4417SYNTHETIC PREVIEW
match confidencetracing hop 1 / 5

How attribution works.

Each step uses public data only and records which method produced a link, so you can filter on the methods you trust.

CLUSTERINGchain_entities

Entity clustering

Addresses are grouped when on-chain evidence shows a common owner. The method behind each address is stored in cluster_method.

  • common_input: on Bitcoin, inputs spent together in one transaction share an owner.
  • deposit_reuse: addresses that send to the same exchange deposit address belong to that deposit's owner.
  • gas_funding: on EVM chains, a fresh address whose first gas comes from another address, followed by matching activity.
  • venue_native: on Hyperliquid, the trading account is the on-chain address, so bridge deposits and trades link directly.
ATTRIBUTIONchain_flows

Venue attribution

Exchange-owned addresses are identified from public data, then flows to and from them are labeled with the venue.

  • Hot and cold wallets from addresses exchanges publish themselves, such as proof-of-reserves lists.
  • Deposit addresses found by their sweep pattern: many senders in, a periodic forward to a known hot wallet.
  • Withdrawals as transfers out of a known hot wallet to an address outside the exchange.
TRACKINGlink_type

Cross-venue trade tracking

Where our coverage of a venue includes participant ids (L4), an entity's trades there are linked exactly, with link_type = "address_native". Elsewhere, trades are linked to a matched deposit or to the entity's activity on another venue by timing and size, with link_type = "timing_size". Each candidate match is scored against every competing explanation on the public tape in the same window.

SCORING0–1

Confidence scoring

Every link gets a confidence between 0 and 1. Inputs include the time gap, the size ratio, how unusual the amount is, how many other candidates fit, and the method used. Links scoring below 0.50 are not published.

A score of 0.9 should be right nine times in ten.

Scores are calibrated, so they can be read as probabilities. The raw model output is mapped to a probability with isotonic regression, fitted on a labeled set of links whose truth is known, and checked on a held-out part of that set.

AOn-chain ground truthHyperliquid links where the deposit, the account and the trades are all public, which makes the true answer verifiable.
BControlled transfersDeposits, withdrawals and trades we make ourselves between our own accounts on covered venues, with known timing and size.
CPublished exchange addressesAddresses venues disclose themselves, used to test venue attribution.

Calibration is refit monthly and the current reliability table is published in the chain intelligence docs. Each row records model_version, so results stay reproducible after a refit.

RELIABILITY · HELD-OUT LINKSSYNTHETIC PREVIEW
0.51 0.51 predicted confidence
dashed: perfect calibrationpoints: observed share correct

Entities, never identities.

Chain intelligence describes trading behaviour. It is built from public data, keyed by anonymous ids, and the data license forbids using it to identify individuals.

WE USE

Public data only

Public blockchain data, and market data we hold under the terms agreed with each exchange. No KYC records, no leaked or purchased databases.

WE DO NOT

Identify individuals

No names, emails, IP addresses or social accounts are collected or joined. We do not attempt to link an entity to a natural person, and we do not offer lookups of people.

ENTITY IDS

Anonymous by design

Entities get random ids such as E-4417 that encode nothing about their addresses. Only institutional wallets (exchanges, protocols, bridges) carry a name in label.

CUSTOMERS MAY NOT

Re-identify

The data license prohibits using chain intelligence to identify or target individuals. Questions go to chris@financedatacloud.com; see also our privacy policy.

chain_entities and chain_flows.

Chain tables use chain where market tables use venue, and add the block timestamp ts_block next to ts_capture. Amounts are decimal128(38,18).

CHAIN_ENTITIES

ColumnTypeMeaning
entity_idstringAnonymous id, e.g. E-4417.
chainstringbitcoin, ethereum, arbitrum, solana, hyperliquid; tron from Phase 2.
addressstringOne address per row.
entity_typestringexchange, protocol, bridge or unlabeled.
labelstringInstitutional label, e.g. bridge:arbitrum. Always null for unlabeled.
cluster_methodstringEvidence that put the address in the entity.
confidencedecimalCalibrated 0–1 score for the address belonging to the entity.
first_seen last_seenint64First and last on-chain activity, ns.
valid_from valid_toint64Version window; clusters are versioned hourly.
merged_intostringSurviving entity_id if two entities were merged.
model_versionstringClustering and calibration version.

CHAIN_FLOWS

ColumnTypeMeaning
flow_idstringStable id for the flow.
entity_idstringEntity the flow belongs to.
chain tx_hashstringChain and transaction.
ts_blockint64Block timestamp, ns.
directionstringdeposit, withdrawal, transfer or bridge.
from_address to_addressstringCounterparty addresses.
asset amount amount_usdstring, decimalAsset moved, in units and USD at the block time.
venuestringAttributed exchange, as a venue id, or null.
link_venue link_symbol link_trade_idstringLinked trade, where one was matched.
link_typestringaddress_native or timing_size.
confidencedecimalCalibrated 0–1 score for the link.
model_versionstringAttribution and calibration version.

Chains and venues.

Phase 1 covers five chains: Hyperliquid, Arbitrum, Ethereum, Bitcoin and Solana. Tron is planned for Phase 2. Chain history is computed back to January 2019, or to the chain's launch if later. Venue attribution and trade links start with Hyperliquid in Phase 1. Other venues are planned, subject to a data agreement with each exchange, and are added on the terms of that agreement.

Roadmap and phases
VenuePhaseStatus
HyperliquidP1address_native links
BinanceP2Planned, subject to agreement
BybitP2Planned, subject to agreement
OKXP2Planned, subject to agreement
CoinbaseP3Planned, subject to agreement
DeribitP3Planned, subject to agreement
KrakenP3Planned, subject to agreement
BitgetP3Planned, subject to agreement
KuCoinP4Planned, subject to agreement
BitfinexP4Planned, subject to agreement
BitstampP4Planned, subject to agreement
dYdXP4Planned, subject to agreement

From an order to an entity's flows.

With the add-on, book_l4 rows carry entity_id. Use it to pull everything else that entity did.

import polars as pl
from fdc import Client

fdc = Client(api_key="fdc_live_...")
window = dict(start="2027-02-03T13:00:00Z", end="2027-02-03T14:00:00Z")

# largest attributed taker on Hyperliquid BTC-PERP in the hour
l4 = fdc.book(venue="hyperliquid", symbol="BTC-PERP", depth="L4", **window).to_polars()
top = (l4.filter(pl.col("event") == "fill")
         .group_by("entity_id").agg(pl.col("fill_size").sum())
         .sort("fill_size", descending=True)[0, "entity_id"])

# everything else that entity did, high-confidence links only
flows = pl.read_parquet(fdc.download(dataset="chain_flows", **window))
trail = flows.filter((pl.col("entity_id") == top) & (pl.col("confidence") >= 0.8))

See flow that crosses venues.

Chain intelligence is part of Enterprise and available to Desk as an add-on. Pre-register to discuss access and pre-sale terms.

EARLY ACCESS · PRE-SALE PRICINGPre-register for early access → DANIEL GARCIA · CEO & FOUNDERdaniel@financedatacloud.com →