Split the swaps by maker. See what the sum destroyed.
One address sold $25.5M in 12 swaps — 62.0% of the sell side — into 212 different buying wallets.
Marcus checks flow on Monday, reads "balanced", and holds — through a week of being distributed into. Nothing recovers a split from a sum.
/v1/dex/tokens/transactions, keyless. Per swap: side tp, USD value v, maker ma.
Buys in one bucket, sells in the other. Net flow is computed too — only so it can be shown losing.
Per side, Σ v grouped by ma. The largest wallet's share of its side is the number.
# scripts/split_tape.py — split(), the whole product by_maker[side][swap.ma] += swap.v # per side, per wallet top_share[side] = max(by_maker[side].values()) / Σ side.v net_flow = (Σ buys.v − Σ sells.v) / (Σ buys.v + Σ sells.v) # shown beside it, losing
The bar is $83,873,656 of swaps, drawn to volume: sell 48.9%, buy 51.1%. The halves are equal; the populations are not.the largest single wallet on that sideevery other wallet on it
{
"symbol": "AUSD",
"platform": "ethereum",
"swaps": 800,
"net_flow_pct": 2.1148175505180515,
"sells": 333,
"sell_wallets": 111,
"sell_vol": 41049940.75883942,
"sell_top_maker": "0x9f681e397f51137215b8240b8bf4e523d898661b",
"sell_top_swaps": 12,
"sell_top_vol": 25459823.583279844,
"sell_top_share": 0.6202158422798087,
"buys": 467,
"buy_wallets": 212,
"buy_top_share": 0.11673241056880844,
"confidence": "ok"
}
| # | time UTC | tx | venue | v (USD) | running |
|---|---|---|---|---|---|
| 1 | 08-31 15:35:35 | 0xf324…7547 | Uniswap v3 | $5,000,016.38 | $5,000,016.38 |
| 2 | 08-31 15:45:11 | 0xc4e0…cb84 | Uniswap v3 | $333,324.58 | $5,333,340.97 |
| 3 | 08-31 15:57:47 | 0xc8ea…34a2 | Uniswap v3 | $847,105.36 | $6,180,446.33 |
| 4 | 08-31 16:44:59 | 0xca5b…0568 | Uniswap v3 | $3,291,115.23 | $9,471,561.56 |
| 5 | 08-31 16:57:35 | 0x5cc5…9023 | Uniswap v3 | $527,666.60 | $9,999,228.15 |
| 6 | 09-01 17:01:23 | 0xc029…475d | Uniswap v3 | $5,000,006.77 | $14,999,234.92 |
| 7 | 09-01 17:44:47 | 0xe972…a77e | Uniswap v3 | $2,652,498.67 | $17,651,733.59 |
| 8 | 09-01 18:57:47 | 0x253c…3c89 | Uniswap v3 | $347,138.65 | $17,998,872.24 |
| 9 | 09-02 17:57:35 | 0x4e17…d86c | Uniswap v3 | $992,842.73 | $18,991,714.97 |
| 10 | 09-02 20:25:59 | 0x114d…3957 | Uniswap v3 | $4,344,882.05 | $23,336,597.02 |
| 11 | 09-03 07:28:59 | 0xd688…aebd | Uniswap v3 | $1,428,198.57 | $24,764,795.58 |
| 12 | 09-03 08:51:59 | 0x2ea3…ddea | Uniswap v3 | $695,028.00 | $25,459,823.58 |
| Σ v = sell_top_vol | $25,459,823.58 | ||||
Every swap in the window with ma = the top seller and tp = sell. v values as returned by the API; full file in docs/proof/ausd.json.
| endpoint | role | key |
|---|---|---|
/v1/dex/tokens/transactions | Per-swap tp, v, ma · cursor on data.lastId | none |
/v4/dex/spot-pairs/latest | Universe enumeration for the sweep | none |
/v4/dex/pairs/quotes/latest | Liquidity context — its 24h buy/sell volumes deliberately unused | none |
/v1/dex/holders/count | Offline holder-count collector, not on the judged path | Startup |
The cursor is data.lastId on the envelope, not on the last swap. Fixing that turned a 100-swap window into 800 in eight calls.
Distinct tx / lgid / swaps on one page. Neither is a key alone; the pair is. Dedup on tx dropped 11%.
24h_buy + 24h_sell reconciled with volume_24h on six pairs of 200. So: individual swaps, never the aggregate.
$ python3 scripts/split_tape.py --address 0x0000…012a --symbol AUSD --pages 8 splitting the tape — keyless, 8 page(s) x 100 swaps per token token swaps buy w sell w top buy top sell net flow AUSD 800 212 111 11.7% 62.0% 2.1% HERO — rule: max top-maker share of either side among |net flow| < 5.0% AUSD: one wallet is 62.0% of the sell side while net flow reads +2.1% sell: $25,459,824 in 12 swaps from 0x9f68…661b buy: 467 swaps from 212 distinct wallets wrote ausd.json (29.4s wall clock, 0 credits — keyless)
CMC sends no Access-Control-Allow-Origin, so the site is a dated snapshot with receipts. The live thing is the CLI.
One entity can span wallets — the share is a floor. A router can pool many users into one maker — it inflates. We claim the address-level number, nothing more.
The most recent 800 swaps at capture — days for a stablecoin, minutes for a meme coin. Rows failing the published floors are shown with the reason, never hidden.
At flat net flow the ticket ratio equals the count ratio — one quantity measured twice, best real value 5.2×. It stays as a column, not the headline.
$ git clone https://github.com/edycutjong/elephant.git $ cd elephant $ python3 scripts/split_tape.py \ --address 0x00000000efe302beaa2b3e6e1b18d08d69a9012a \ --symbol AUSD --pages 8
Net flow is one number.
The split is four.