Analyzing ipv4 trades with gnuplot.

Table of Contents

This demo is created with two purposes in mind:

  1. Show some features of gnuplot.
  2. Analyse and predict the behaviour of supply and demand of ipv4 addresses as the Internet transitions to ipv6.

The data in this demo is taken from the ipv4.global auction.

The data file looks the following:

Date, nIPs, TotalPrice, OnePrice
2014-02-06T11:00:00, 512, 8025, 15
2014-02-26T11:00:00, 256, 6225, 24
2014-02-26T11:00:00, 4096, 29983, 7
2014-03-25T11:00:00, 4096, 29684, 7
2014-06-18T10:00:00, 16384, 131072, 8
2014-06-19T10:00:00, 256, 1725, 6

1. TODO Remaining tasks [0/2]

  1. [ ] SVG to all plots. (?)
  2. [ ] Predictions

2. Real-time analysis

2.1. Fetch in an org script.

Number of ids: 4460
Number of dates: 4460
Number of dates: 4460
Number of nIPs: 4460
Number of prices: 4460
Number of IPprices: 4460
DONE
Last bids:
2025-06-04T18:06:25, 8192, 196608, 24
2025-06-04T19:57:32, 256, 10240, 40
2025-06-04T20:10:27, 8192, 221184, 27
2025-06-04T21:22:44, 256, 7936, 31
2025-06-05T07:57:33, 256, 7424, 29
2025-06-05T07:58:06, 256, 7424, 29
2025-06-05T15:53:01, 16384, 393216, 24
2025-06-05T18:28:56, 512, 14848, 29
2025-06-06T08:52:36, 256, 9472, 37
2025-06-06T14:57:17, 256, 7168, 28

2.2. Plot price, size, and volume

realtime-analysis.png

3. Analysis from 2024-07

3.1. Single Price from time

Let us first plot the price of the IPs from time:

ips-from-time.png

3.2. Price inconsistency

Well, those prices are a bit off, because they are not weighted by volume. That is, even though the prices are correct, some of the IPs were sold in larger quantities, so the price per day should really be a weighted average.

We should take this into account when reading on.

What we need to do is to create daily prices, or maybe even weekly, because we need a trend, not immediate volatility. But this is later.

This will be solved later.

3.3. Single Price smoothed

Let us try to smooth the price in different ways.

price-from-time-bezier.png

3.4. Average Single Price Summing by time

price-from-time-deduplicated.png

Here I am doing two tricks: abusing time format for plotting by month, not minute, and using smooth unique to find an average of those prices. This should really be done in a script, and fed to gnuplot separately, but so far I have not explored gnuplot sufficiently.

Interestingly (and expectedly), the bezier interpolation is matching the improvised one very well, except the very beginning.

3.5. Price distribution

The price depends on time (and, I guess, supply and demand), but suppose you just had to buy some IP addresses between 2014 and 2025. What was the chance that you would buy it cheaply or expensively?

price-distribution.png

Four (but really three) modal distribution. Most orders seem to be made around the 20 USD threshold.

price-distribution-weighted.png

Wow, this is impressive. We see that even though a lot of orders were made within a 20 USD range, most IPs actually cost about 50 USD.

3.6. Batch size distribution

batch-size-distribution.png

Okay, most batches are small, but the distribution is not monotone.

3.7. How batch size changes with time

Batch size per second definitely makes no sense, but batch size per month probably does. We will use the previously employed trick date recognition and plot IP demand per month.

The IP price is here for reference only, the values are on the right hand side of the plot.

batch-from-time-deduplicated.png

There seems to be a large surge in demand between 2020-2024. The price is multiplied by an aesthetic constant of 5000, and seems to match the growth in demand quite consistently.

3.8. Market Volume by time

volume-from-time-deduplicated.png

The volume is not that different from batch size really.

3.9. Let us see how many batches are expensive.

batch-to-price.png

We sort of new this already, but most of the expensive batches are from 2021-2023. The banding in orders, which was visible on previous plots, is very prominent here and is due to IP block sizes being multiples of 2.

Let us do the same thing more beautifully.

batch-to-price-beautiful.png

3.10. Finding an actual average price per month

Here we need to master some set table and $heredoc.

Let us recall that “average price per month” is “all money” divided by “all IPs”. So we need two series: volume of money, volume of IPs, save into a table.

The dirty trick here is dividing one table by another, which requires querying a heredoc by using the word($0) constuct. It is crude and slow, but should work now.

Another dirty trick you can see here is how to apply stats to a time series.

real-mean-price.png

This plot is much more smooth than the “incorrect” average price. I don’t know why.

So, the last part of it, the “fitting” of the right part, is a crutch of titanical proportions, but it clearly lets us see that the price of IPv4 will drop to 0 (because of no demand and total transition to IPv6) by the end of 2026.

3.11. Processed data

price-errorbars.png

3.12. Trade volume

price-errorbars.png

Author: lockywolf

Created: 2025-06-06 Fri 19:05

Validate