More useful NASs
Last updated
Last updated
Choosing a width of 2016 produces a usable area, however it is currently flat, which isn’t too useful.
To fix this, we need to use some non-arbitrary input to determine the elevation of each block.
As we’re trying to make elevation changes larger in scale than individual blocks, transaction count is a good choice. This number is defined per block, however it is typically consistent across many blocks, changing with slower moving variables such as network adoption and market sentiment.
To define elevation, we can use data on the blockchain as an input. This should be chosen to create some realistic terrain. We could use the number of transaction in a block to determine the elevation of that block. This results in the following NAS:.
Already, this has some semblance of a landscape, however the data is noisy and the colors are generic.
This can be fixed by averaging the data and applying a more natural color gradient. The figure below uses the same data from Figure 3, while adding a 5x5 block linear average, and a color gradient determined by elevation.
The average function is behaves as follows:
The average function uses on previously mined blocks as inputs, ensure the function can be used with a newly mined block.
It wraps around in the "Block Since Retarget" axis, allowing this NAS to be wrapped to a cylinder or sphere seamlessly.
For the first four retarget periods, where there are no blocks to pull data from, so the function is padded with blocks of transaction count 1 (since the minimum transaction count is 1, the block reward transaction).
This still could be improved though; the land is quite consistent in the y direction, and ends abruptly on each side at the retarget blocks. As the blockchain continues to be formed, it will print a long rectangle of fairly homogenous land which is going to get monotonous.
We can add variations in each direction by weighting the transaction count of each block according to it's location in the space.
To continue with the non-arbitrary theme, we can use blocks since retarget and blocks since halving as the weighting references. To create a more organic world, a Bell curve (as shown in Figure 4 below) can be used so that if a block is further from these two events, transaction count will be weighted more, resulting in a higher elevation.
Applying this curves in to both axes results in the following NAS:
The effect is that an island is formed for each halving period. Assuming a 100 x 100m area for each block, the largest island forms a landmass over 200 km long.