Bitcoin Topology Report Explained: Part 1
The purpose of this article is to take a look at Bitcoin’s topology and metrics and relay that information.
In this piece, various facets of the Bitcoin network will be analyzed to assess its overall ‘health’ and status.
Any and all metrics that can be conveniently viewed via various explorers/data analysis sites will be aggregated and cited appropriately in the compilation of this report. Information compiled May 20th, 2019
Understanding the Picture Above
Upon viewing the picture above, you may have noticed that there are two scales on the y-axis. On the left side, we can see percentages and on the right, we can see data sizes.
The reason why ‘Bitcoinvisuals’ is a preferred source for analyzing a hefty number of Bitcoin metrics is because they run their own node using default settings. So when their findings are analyzed, we can get a better sense for the ‘load’ that certain Bitcoin conditions impose upon individuals running full node setups on the network.
Specifically, ‘Bitcoinvisuals’ states:
“Our node’s memory usage for unserialized mempool data. We run default Bitcoin Core settings.”
Notably, ‘BitcoinVisuals’ is running a ‘bitcoind’ setup, which is optimized for RPC (remote procedure call) usage.
What is ‘Bitcoind’?
When ‘BitcoinVisuals’ refers to ‘bitcoind’, they are referring to a version of the node software that allows for querying the chain using JSON.
Bitcoin, in its initial iteration, could not be queried for information (i.e., wallet balances, addresses, transactions, etc.) without implementations such as ‘bitcoind’ being created to facilitate such calls.
Examples of API Calls That Can Be Made
The list above is not exhaustive, by any means — but it does shed greater light on how several of the most popular blockchain explorers are able to extract information and deliver it to users in a ‘readable’ format.
Explain the Y-Axis Percentages
The percentages on the left side of the y-axis, represent the nodes set capacity for pulling transactions from the mempool.
Setting a limit on the number of transactions that are pulled from the mempool is critical to ensure the security of the protocol. Otherwise, without a limit, nodes would endlessly pull in transactions into their mempool.
This, of course, would create a significant vulnerability on the network because spam attacks would eventually force nodes (with insufficient memory) to crash.
Fortunately, as stated above, there are measures in place on the protocol that are designed to prevent this from happening. The specific code in question can be found below:
In the picture above, we can see that the default max MB that nodes will pull running this implementation is 300 MB.
Accordingly, the percentages on the left side of the y-axis for ‘BitcoinVisuals’ shows how ‘full’ the node’s mempool allowance is at a given time.
Why This is Important
It is ultimately up to nodes to relay information to the network and it is up to nodes to accept certain information as well. While 300 MB is the default capacity for nodes, there is no guarantee that nodes will be able to continuously function at this capacity in the long-term without running into some issues.
In such an instance where the mempool is filled (under the default settings), full nodes running bitcoind can exercise their option to elevate the ‘minrelaytxfee’ which simply stipulates that:
“Fees (in BTC/kB) smaller than this are considered zero fee for relaying, mining and transaction creation (default: 0.00001).”
If this is confusing, take a look at the stackexchange answer a user gave below, which eloquently explains the ‘minrelaytxfee’ setting in greater detail:
If, for whatever reason, a full node does have its mempool filled, then new transactions will replace older transactions as long as the newer ones have a higher TX than that of the pre-existing transactions with the lowest fee.
Recent Spike in Transactions
For those that have been paying attention to current events in the Bitcoin space as of late, they may have noticed that Bitcoin’s mempool has seen a noticeable spike.
However, this spike has not coincided with the increase in price (i.e., greater usage from increased interest), but rather as a result of a ‘spam attack’ on the network.
It Appears This Recent Spike May Be Related to the Bitcoin Cash Spike in Transactions
Recently, the Bitcoin Cash network was attacked during its hard fork upgrade. This was covered in full by the author in a series of tweets posted below:
In what may have been retaliation, it appears the Bitcoin mempool also started getting spammed that same day (May 15th, 2019):
At one point, there was approximately 150 MB worth of transactions in the mempool at one time.
Since then, however, it appears that the mempool has sorted itself out — dropping from a high of 70k+ unconfirmed transactions to just 500 at its lowest.
How Do Spam Attacks Work?
In order to understand this, we need to go back to why Bitcoin Core has a ‘fee market’ set in place.
There is some insight provided for this in Bitcoin’s whitepaper. Specifically under the ‘Incentive’ heading, it states:
This is elaborated upon further in the Bitcointalk forums when a user questions how Bitcoin intends to prevent itself from being rendered vulnerable to a DoS attack on the protocol: https://bitcointalk.org/index.php?topic=287.msg8810#msg8810
In this thread, Satoshi Nakamoto explains that the fee structure was not only established in Bitcoin to provide an incentive for miners to mine, but also to protect the protocol from spam costs.
The logic behind Satoshi’s reasoning was simple. If a mandatory minimum is attached to TXs of a certain size, then this would disincentivize bad actors from spamming the transaction with constant 1 satoshi sends.
This theory worked well for the time being (circa 2010), but in latter days, we have come to see that Bitcoin has continued to be plagued by spam attacks due to bad actors seeking to harm the protocol’s efficacy.
This results in an elevation of the mean fee that must be paid in order to get a transaction into a block because Bitcoin transactions are accepted on a priority basis (remember the economic incentive we discussed above).
Due to the basic nature of humans, Satoshi was able to accurately use this to Bitcoin’s advantage by allowing miners to choose transactions with the highest fees. Thus, those seeking to get their transactions confirmed “immediately” must simply pay a fee that is higher than the bulk of users.
This break down by user, ‘AndrewBuck’ in the thread, explains the system perfectly:
As more transactions are spammed onto the network, the fee rate increases. This is also true with usage of Bitcoin.
Notably, this led to a situation in 2017 where, when the mempool was at its largest size (consistently, day over day), the necessary median fee to ensure that a transaction was confirmed in a reasonable amount of time was approximately $28.
In some cases, the fees for sending Bitcoin in a convenient time frame (within 1 or so transactions) was even greater than the amount that some individuals were looking to transact or the fee would take a greater portion of the ‘send’ than the remainder of the transaction after the fee had been extracted.
Thus, since we have already seen what many claim to be increased activity on the blockchain, we’re going to go ahead and take a look at Bitcoin’s median and mean fees over times.
Bitcoin Median Fee
As expected, the median transaction fee (fee/tx) increased substantially during the time that the market had been spammed.
As can be seen in the chart above, on May 12th, 2019, the average fee/tx was $0.39 (USD value derived from averaged market price of Bitcoin at the time). Soon after, however, the average fee/tx rose to $4.79:
The good news is that the average fee/tx here is lower than what it was previously when mempools were filled up to a comparable height before SegWit implementation became more widespread (2017).
However, it is still worth noting that the average transaction fee did spike to $4.79. Those in the upper 90th percentile were paying as much as $6.37 to have their transactions confirmed.
Even now, at the time of writing, the transaction average fee/tx stands at $2.56:
Comparing the Fees to Other Protocols
Bitcoin Cash Fee
At the time of writing (May 20th/21st, 2019), the median Bitcoin Cash fee/tx (USD) was $0.0011.
At the time of writing, Litecoin’s median fee/tx is $0.015 (USD). In order to put these metrics into perspective, however, mining profitability must be taken into account:
The fact that Bitcoin is a more expensive protocol (in terms of sending fees) is not an issue. However, when this issue is juxtaposed with the fact that Bitcoin Cash is slightly more profitable to mine on currently, these statistics become a bit worrisome for any Bitcoin maximalist.
While Bitcoin does still possess the advantage of the network effect, large disparities between Bitcoin Cash’s financial metrics and Bitcoin could pose a problem in the short-term.
Evaluating Bitcoin’s Fees / (Conclusion)
As mentioned above, one of Bitcoin’s primary issues in 2017 was the exorbitant fees that users had to pay in order to have their transactions confirmed in a reasonable time frame.
As noted earlier in this report, transaction fees had climbed to well over $20 at one point in time.
Part of this was due to the activity on the network, but this was also partially attributable to ‘mempool spamming’, which is yet another phenomenon that was covered earlier in this report.
Specifically, however, in the next installment of this research, we’re going to go ahead and look at the current fee rate (in Satoshis and USD) and analyze whether Segregated Witness has been helpful in lowering the overall fee rate for Bitcoin.
Stay tuned for Part 2 of my report.