#fee #fees #bitcoin #rate #estimation #calculations #process

bitcoin-fees

provides tools for working with and estimating bitcoin fees

2 releases

0.1.16-alpha.0 Apr 1, 2023
0.1.12-alpha.0 Jan 19, 2023

#7 in #fees

Download history 87/week @ 2024-07-22 98/week @ 2024-07-29 130/week @ 2024-08-05 86/week @ 2024-08-12 85/week @ 2024-08-19 118/week @ 2024-08-26 84/week @ 2024-09-02 57/week @ 2024-09-09 100/week @ 2024-09-16 110/week @ 2024-09-23 65/week @ 2024-09-30 91/week @ 2024-10-14 53/week @ 2024-10-21 49/week @ 2024-10-28 78/week @ 2024-11-04

271 downloads per month
Used in 54 crates (19 directly)

MIT license

610KB
2K SLoC

bitcoin-fees

A Rust crate providing fee estimation and fee rate calculation functionality for the Bitcoin system. This crate is a direct translation of the corresponding C++ codebase to Rust, and some of the function bodies may still be in the process of translation.

FeeFilterRounder

A struct representing a filter to round fee rates according to a specified round unit. This is used to avoid excessive precision in fee rate calculations.

FeeRate

A struct representing a fee rate, which is a fee per unit of transaction size. Implements comparison and arithmetic operations.

EstimationResult

A struct representing the result of a fee estimation calculation. Contains the estimated fee rate and its confidence interval.

EstimatorBucket

A struct representing a bucket of observed transactions for use in fee rate estimation.

EncodedDoubleFormatter

A struct for formatting double-precision floating-point numbers in a compact binary format.

FeeCalculation

A struct representing a fee calculation, which includes the fee rate and the size of the transaction being charged.

FeeReason

An enum representing the reason for a particular fee calculation, such as transaction confirmation time or priority.

FeeEstimateHorizon

An enum representing the time horizon for a fee estimate, such as the next block or a longer time period.

TxConfirmStats

A struct representing the statistics of transaction confirmation times used for fee estimation.

FeeEstimateMode

An enum representing the fee estimation mode, such as economic or conservative.

This crate provides functionality for fee estimation and fee rate calculation in various fee modes and estimation horizons, based on observed transaction data. It also provides utilities for formatting and serialization of fee-related data structures.

131> let's talk about fees in the context of the bitcoin system. what are they? how do they work?

In the Bitcoin system, fees are payments made by users to miners in exchange for including their transactions in the blockchain. When a user sends a Bitcoin transaction, they can choose to include a fee to incentivize miners to prioritize their transaction and include it in the next block.

The fee is calculated based on the size of the transaction in bytes and the current demand for block space on the Bitcoin network. Transactions with higher fees are more likely to be included in the next block, while transactions with lower fees may be delayed or not included at all.

Miners can choose which transactions to include in the blocks they mine, and they generally prioritize transactions with higher fees because they can earn more money by including them.

The fee system in Bitcoin is designed to be market-based, with fees fluctuating based on supply and demand. When the network is congested with a high number of transactions, fees tend to increase. Conversely, when the network is less congested, fees tend to decrease.

Overall, the fee system is crucial for ensuring the security and reliability of the Bitcoin network, as it incentivizes miners to include transactions in the blockchain and process them efficiently.

132> so, if we don't have fees, the miners will be spammed?

Yes, that's correct. In the absence of fees, there would be no incentive for miners to include a transaction in a block. This means that transactions would be stuck in the mempool, waiting for a miner to pick them up. Without fees, a malicious user could spam the network with a large number of low-priority transactions, effectively clogging the network and making it difficult for other transactions to be confirmed.

Fees help to ensure that only transactions with a higher priority (i.e., those with a higher fee) are included in blocks, as miners are incentivized to include transactions with higher fees to maximize their profits. This helps to prevent spam attacks and keep the network functioning efficiently.

133> so fees go directly to the miners?

Yes, that's correct. Fees are collected by the miner who successfully mines a block and adds it to the blockchain. The miner includes transactions with the highest fees in the block they are trying to mine, as they have a financial incentive to prioritize those transactions. This is because the fees they collect are paid in Bitcoin, which has real-world value and can be exchanged for other currencies or goods and services.

134> is there a required fee?

There is no required fee in Bitcoin, but including a fee with a transaction can incentivize miners to include that transaction in a block more quickly. Transactions with higher fees are typically prioritized by miners because they can earn more money by including those transactions in a block. So while it's possible to send a transaction without a fee, it may take longer to be confirmed and added to the blockchain. The required fee may also depend on the transaction volume and network congestion at any given time.

135> is it possible for a transaction with a low fee to remain unincluded in the network?

Yes, it is possible for a transaction with a low fee to remain unconfirmed in the network. Miners prioritize transactions with higher fees since including them in a block results in a higher payout for the miner. Transactions with low fees may remain in the mempool for an extended period of time, waiting for a miner to pick them up and include them in a block. If the transaction remains unconfirmed for an extended period, it may eventually be dropped from the mempool and the bitcoin network.

136> so, it is important to set the proper fee when sending a transaction to the network. is that correct?

Yes, it is important to set an appropriate fee for a transaction when sending it to the network. A low fee may result in a delayed confirmation or even the transaction being rejected by the network, while a high fee may be unnecessary and result in a waste of funds. Setting an appropriate fee can help ensure that the transaction is processed in a timely and efficient manner.

137> how does someone know what the proper fee is to attach?

Determining the proper fee to attach to a transaction can be a bit tricky as it depends on a number of factors such as the current level of network congestion, the size of the transaction, and the desired speed of confirmation.

One way to estimate the appropriate fee is to use a fee estimator tool or service that provides real-time data on the current state of the network and recommended fee rates for different confirmation times. Many popular Bitcoin wallets and exchanges have built-in fee estimation tools.

Another option is to use a fee market monitor to track the fee market and get an idea of what fee levels are currently being accepted by miners. These tools provide information on the fees of recently confirmed transactions and can help users adjust their fees accordingly.

It's important to note that setting too low of a fee may result in the transaction being delayed or not confirmed at all, while setting too high of a fee may result in unnecessary costs. It's a balance between speed and cost that each user needs to decide based on their specific needs and circumstances.

138> this reminds me of "postage stamps"

Yes, you can think of Bitcoin fees as being similar to postage stamps. Just like you need to attach the right amount of postage to mail a letter, you need to attach the right amount of fees to a Bitcoin transaction to ensure that it gets processed in a timely manner.

The amount of fees required for a transaction depends on several factors, including the size of the transaction in bytes, the current demand for block space on the network, and the urgency of the transaction. If the demand for block space is high, then miners will prioritize transactions with higher fees, which means that transactions with lower fees may take longer to confirm.

It's important to note that fees are not a fixed amount and can vary widely depending on network conditions. As such, it's a good idea to use a fee estimation tool to help you determine the appropriate fee for your transaction.

139> so if the transaction is urgent, the poster could put a high fee on it so that it gets bumped right to the top of the queue

Yes, that's correct. If a transaction is urgent and needs to be confirmed quickly, the sender can choose to attach a higher fee to incentivize miners to include it in the next block. Transactions with higher fees are usually given priority by miners as they are more profitable to include in a block.

140> is there anything else a user should to to prioritize the transaction?

Yes, users can also increase the fee rate (satoshis per byte) of their transaction to incentivize miners to include it faster. Additionally, users can use transaction accelerators or replace-by-fee (RBF) to bump their transaction up in the mempool. RBF allows users to increase the fee of their transaction after it has been broadcast to the network, giving them more control over the transaction's priority. However, not all wallets support RBF, and some nodes may choose to reject RBF transactions for security reasons.

141> so in the future, once all of the bitcoin itself is mined, the network will run on transaction fees?

Yes, that is correct. Currently, the mining reward for each block is 6.25 bitcoins, but this amount is halved every 210,000 blocks. Eventually, all 21 million bitcoins will be mined and the mining reward will become zero. At that point, the only incentive for miners to continue mining will be transaction fees. Therefore, transaction fees will become increasingly important for the sustainability and security of the Bitcoin network.

142> so, the fees may increase as time goes on. is that correct?

Yes, that is correct. As the block reward decreases over time and eventually becomes zero, the miners will rely solely on transaction fees as their source of income. This could potentially lead to an increase in transaction fees as the competition for block space becomes more intense. However, it's also possible that improvements in technology and the development of new fee estimation algorithms could help mitigate this issue.

143> interesting. what sort of considerations do we as engineers have to make along these lines?

As fees may increase over time, it is important to build systems that can accommodate these changes. For example, if you are building a wallet application, it is important to make sure that the fee estimation algorithm is able to adapt to changing fee conditions and provide accurate fee recommendations to users. It may also be necessary to build in functionality that allows users to adjust the fee of a transaction after it has been created, in case the initial fee estimate turns out to be inaccurate.

In addition, it may be necessary to consider the impact of high fees on the usability of the system. If fees become prohibitively high, it may discourage users from making transactions on the network, leading to a decrease in overall usage and potentially impacting the security of the system. As such, it is important to strike a balance between providing sufficient incentives for miners to include transactions in blocks, and keeping fees at a reasonable level for users.

144> what are transaction accelerators and replace-by-fee ?

Transaction accelerators are services offered by some mining pools that allow users to pay an additional fee to prioritize their transaction for inclusion in the next block. These services can be particularly useful in times of high network congestion, where transaction fees may be high and confirmations may take a long time.

Replace-by-fee (RBF) is a feature in the Bitcoin protocol that allows users to increase the fee of a transaction after it has been broadcast to the network. This can be useful in cases where a user has attached too low of a fee to a transaction and wants to increase it to ensure timely confirmation. The RBF feature essentially creates a new version of the original transaction with a higher fee, replacing the original transaction in the mempool. However, not all nodes and wallets support RBF, so it is important to check before relying on this feature.

145> interesting. thanks -- what interface do mining pools offer to the outside world? they are RPC based, are they not?

Yes, that's correct. Mining pools typically offer an RPC (Remote Procedure Call) interface to the outside world, which allows clients to communicate with the mining pool's servers and submit mining jobs.

The specific details of the RPC interface can vary depending on the mining pool software being used, but typically the interface will expose functions for submitting work, checking the status of submitted work, and managing the miner's account with the pool (such as retrieving account balances or changing payout settings). The RPC interface may use various protocols, such as JSON-RPC or HTTP.

In addition to the RPC interface, some mining pools may also offer web-based interfaces or mobile apps for users to monitor their mining activity and manage their accounts. These interfaces may provide additional features beyond what is available through the RPC interface, such as real-time mining statistics, hashrate monitoring, and payout tracking.

146> so, the mining pool software is separate from the bitcoin core. is that correct?

Yes, that's correct. Mining pools are typically separate software that connects to the Bitcoin network via the Bitcoin Core software, but they operate independently from it. Mining pools are responsible for creating new blocks on the Bitcoin network and they do this by solving a cryptographic puzzle known as the Proof of Work algorithm. The mining pool software coordinates the efforts of all the miners in the pool, and then sends the completed blocks back to the Bitcoin network for validation and inclusion in the blockchain.

147> so these miners wait for transactions to arrive, and then they group them into blocks of a fixed size, submitting them along with the proof of work to the rest of the network. is that correct?

Yes, that's correct. Miners wait for new transactions to arrive and then group them into a block. Once a block is created, the miner must perform a proof-of-work calculation, which is a computational task that requires significant computing power. The goal of the proof-of-work calculation is to find a hash that meets a certain difficulty requirement. This process is repeated until a miner finds a valid block hash that meets the difficulty requirement, at which point they can submit the block to the network along with the proof-of-work. Once the block is verified by the network, the miner is rewarded with a certain number of newly minted bitcoins and any transaction fees included in the block.

148> how does a user know where the miners are?

Users typically do not interact with miners directly. Instead, they submit transactions to the Bitcoin network, and miners, who are connected to the network, will see and potentially include those transactions in the blocks they are attempting to mine.

In terms of finding mining pools, there are various websites and resources that list active mining pools and their associated addresses, which can be used to configure mining software to connect to those pools. Additionally, some mining pools may advertise their services or offer APIs to programmatically access their pool addresses.

149> so the miner, in order to optimize and maximize its profits, will pull as many transactions as it can (with the highest fees) into the block. if the miner solves the puzzle, it can post its solution along with the transactions it wishes to verify?

That's right. The miner will try to maximize its profits by including transactions with the highest fees that fit within the block size limit. Once the miner finds a solution to the proof-of-work puzzle, it will add the block header, which includes the list of transactions, and broadcast the block to the network. Other nodes on the network will then validate the block and add it to their copy of the blockchain if it is valid. The miner who found the solution will be rewarded with the block subsidy, which includes newly minted bitcoins and the transaction fees from the included transactions.

150> what are the entry points to the network?

There are several entry points to the Bitcoin network:

  1. Full nodes: These are nodes that maintain a full copy of the blockchain and verify all transactions and blocks. They serve as the backbone of the network, providing the highest level of security and decentralization.

  2. SPV nodes: These are lightweight nodes that do not store the entire blockchain, but instead only download and verify block headers. They rely on full nodes to provide them with transaction information and block data.

  3. Mining pools: These are collections of miners that combine their computing power to mine blocks more efficiently. They connect to the network as full nodes, but may also offer APIs or other interfaces for users to submit transactions or monitor mining activity.

  4. Exchanges and wallet providers: These are third-party services that allow users to buy, sell, and store bitcoin. They may connect to the network as full or SPV nodes, and typically provide their own interfaces for users to submit transactions and monitor balances.

Overall, the Bitcoin network is designed to be open and accessible to anyone with an internet connection, with various entry points for users and businesses to interact with the network in different ways.

151> are the mining pools an emergent phenomena? or are they explicitly built in to the protocol?

Mining pools are not explicitly built into the Bitcoin protocol, but rather an emergent phenomenon resulting from the design of the protocol. The ability to include multiple transactions in a single block and the competitive nature of mining rewards incentivizes miners to join forces and collectively mine blocks rather than mining solo. This can result in the formation of mining pools, where miners combine their hash power to increase the probability of mining a block and sharing the rewards proportionally to their contributions.

While mining pools are not explicitly built into the protocol, the protocol does provide mechanisms for miners to collaborate and share block rewards fairly, such as the coinbase transaction and the coinbase scriptSig.

152> which endpoints do the exchanges communicate with?

Exchanges typically communicate with Bitcoin nodes via the standard Bitcoin peer-to-peer network, the same way that other nodes communicate. Exchanges may also operate their own nodes to monitor the network and process transactions more efficiently. Additionally, some exchanges may use APIs provided by external services or other exchanges to retrieve blockchain data or submit transactions. The specific endpoints and APIs used by exchanges may vary depending on their individual implementations and needs.

153> how are the mining pool rules enforced? does the enforcement have to be cryptographic?

The rules enforced by a mining pool do not necessarily have to be cryptographic, but they do need to be implemented in a way that miners in the pool can trust that the pool operator is following them. One way that mining pools can enforce rules is through the use of a pool-specific mining protocol, which specifies the rules that the pool operator wants the miners to follow.

For example, the mining pool protocol might specify that miners can only include transactions in their blocks that meet a certain minimum fee threshold. The pool operator can then check that miners are following this rule by examining the blocks that the miners submit to the pool. If a miner includes a transaction with a fee below the minimum threshold, the pool operator can reject the block and potentially penalize the miner.

Another way that mining pool rules can be enforced is through the use of smart contracts. For example, a mining pool might use a smart contract to specify that a certain percentage of the block rewards must be distributed to miners based on their contribution to the pool's hash rate. The smart contract can enforce these rules by automatically distributing the rewards according to the specified parameters.

In general, the key to enforcing mining pool rules is to have a way for miners to verify that the pool operator is following the rules. This can be achieved through cryptographic methods, such as using digital signatures to sign messages that attest to the pool operator's adherence to the rules, or through transparency and accountability mechanisms, such as open source code and public audits.

154> great. what else should we know about transaction fees?

Here are a few more things to know about transaction fees in the Bitcoin network:

  1. Transaction fees are not only determined by the size of the transaction in bytes but also by the network's current congestion level. During times of high demand for block space, the fees will naturally increase, and during low demand periods, the fees will typically be lower.

  2. Miners can set a minimum fee threshold for transactions they are willing to include in a block. Transactions with fees below this threshold will likely not be included in a block by that miner. This threshold can vary depending on the miner's preference and the current state of the network.

  3. It is possible for a user to create a transaction with a very high fee by mistake. Some wallet software offers a "replace-by-fee" option that allows the user to increase the fee after the transaction has been broadcast to the network. This can help avoid overpaying on fees.

  4. There are third-party services available called "transaction accelerators" that allow a user to pay a higher fee to prioritize their transaction in the network. These services can be useful in situations where a user needs their transaction to be confirmed quickly.

  5. While transaction fees are a necessary part of the Bitcoin network, they can be a barrier to entry for some users who cannot afford to pay the high fees during times of network congestion. This has led to the development of alternative blockchain networks that use different fee models or no fees at all.

155> how high do the fees get? do you have a way to plot some typical fee data over time in python?

Yes, we can use Python to plot typical fee data over time. There are several websites that provide fee data for Bitcoin, such as https://bitcoinfees.net/ and https://mempool.space/. We can use the API provided by one of these websites to download the data and then use the matplotlib library to plot it.

Here is an example code snippet to download the data and plot it using matplotlib:

import requests
import matplotlib.pyplot as plt

# Download fee data
response = requests.get('https://mempool.space/api/v1/fees/recommended')
data = response.json()

# Extract fee levels and plot over time
fees = data['fastestFee'], data['halfHourFee'], data['hourFee']
plt.plot(fees)
plt.xlabel('Time (hours)')
plt.ylabel('Fee (sat/byte)')
plt.legend(['Fastest', 'Half Hour', 'Hour'])
plt.show()

This code will download the recommended fee data from the Mempool website and plot the fastest, half hour, and hour fee levels over time. The resulting plot will show how the fee levels have varied over time.

It is worth noting that the fee levels can vary greatly depending on network congestion and other factors, so the exact fee levels shown in the plot may not be representative of all fee levels over time.

156> so, the unit of "sats per byte" -- could we describe this in more detail?

Sure! "Sats per byte" is a unit of measurement used to specify the fee rate for a Bitcoin transaction. It represents the amount of satoshis (the smallest unit of a Bitcoin, with 100 million satoshis in one Bitcoin) that a sender is willing to pay for each byte of transaction data that the transaction occupies on the Bitcoin network.

The concept behind sats per byte is that larger transactions with more data take up more space on the network and require more computational resources to process and verify. As a result, transactions with higher fees (expressed in sats per byte) are typically prioritized by miners over transactions with lower fees, because they provide a greater incentive for miners to include them in a block.

For example, if a sender specifies a fee rate of 100 sats per byte for a 200-byte transaction, the total fee for the transaction would be 20,000 satoshis (100 sats per byte * 200 bytes). If another sender specifies a fee rate of 50 sats per byte for a 300-byte transaction, the total fee for that transaction would be 15,000 satoshis (50 sats per byte * 300 bytes).

In general, the appropriate fee rate to use for a transaction depends on several factors, including the current demand for block space on the network, the size of the transaction, and the desired confirmation time. Some Bitcoin wallets and fee estimation services provide fee recommendations based on this information.

157> how many bytes is a typical transaction?

The size of a typical transaction in bytes can vary depending on the number of inputs and outputs. A transaction with a single input and a single output typically has a size of around 250-300 bytes, but it can be larger if there are multiple inputs and outputs or if there is additional data included in the transaction such as a script or a signature. The size of a transaction can be calculated by summing the sizes of its inputs, outputs, and other components.

158> does the transaction size vary on anything else other than number of inputs and outputs? does a single utxo in a user's wallet constitute a transaction input downstream? if the user has many small utxo, and these are grouped together, does that lead to many transaction inputs on the next transaction, thus a higher transaction size, thus a higher fee? right now it looks like we are at a flat fee rate of 7 sats per byte -- is this typical?

Yes, the transaction size can vary based on a few other factors. For example, the use of certain types of scripts or the inclusion of additional data in the transaction can increase its size.

When a user sends a transaction, they will typically use one or more unspent transaction outputs (UTXOs) from their wallet as inputs. Each UTXO can be thought of as a separate "coin" that can be spent independently. If a user has many small UTXOs and they want to send a transaction that spends all of them, this will result in a larger transaction size and thus a higher fee, compared to if they had a single large UTXO.

The current fee rate of 7 sats per byte is not necessarily typical, as the fee rate can vary based on network congestion and other factors. During times of high network congestion, fees can increase significantly. Additionally, some wallets and services may offer dynamic fee estimation that takes into account current network conditions and suggests an appropriate fee rate for the transaction.

159> is this rate low? what is a good ballpark range for the fees?

The fee rate for a Bitcoin transaction can vary widely depending on the current state of the network. During periods of high transaction volume or congestion, fees can spike dramatically, while during periods of low activity, fees can be much lower.

As of March 2023, the typical fee rate for a transaction with a reasonable confirmation time is around 7-10 sats/byte, although this can vary depending on the specific circumstances. During periods of high congestion or network activity, fees can reach upwards of 100 sats/byte or more.

It's worth noting that there is no one-size-fits-all answer to the question of what a "good" fee rate is, as it ultimately depends on the specific needs and circumstances of the user. However, as a general rule of thumb, a fee rate of around 5-15 sats/byte is often considered reasonable for a typical transaction with a reasonable confirmation time.

160> so, 5-15 sats/per byte * 200 bytes per transaction = 1000 to 3000 sats per transaction -- how many dollars is this?

The value of sats, or satoshis, is currently very small. As of March 28th, 2023, one bitcoin is worth around $24000 USD, and there are 100 million sats in one bitcoin. So, 1 sat is worth around $0.00024 USD. Therefore, a transaction fee of 1000 to 3000 sats would be worth around $0.24 to $0.72 USD.

161> is there a limit to the value of the bitcoin which can be transferred in such a transaction?

There is no hard limit to the value of bitcoin that can be transferred in a single transaction. However, the practical limit is determined by the amount of bitcoin that the sender has in their wallet and the current market value of bitcoin. Additionally, some wallets and exchanges may have their own limits on the amount of bitcoin that can be transferred in a single transaction for security or regulatory reasons.

162> gotcha. what else should we know about transaction fees?

One thing to keep in mind is that while fees are an important aspect of getting a transaction included in the blockchain, they are not the only factor that miners consider. Miners also prioritize transactions based on other factors such as the age of the transaction and the amount of data it contains.

Additionally, the fees required to get a transaction confirmed quickly can fluctuate rapidly based on network demand. During times of high network activity, such as during periods of high market volatility or when there is a surge in the popularity of decentralized finance (DeFi) applications, transaction fees can become much higher than normal. In some cases, fees can increase to several times their normal level, making it much more expensive to send transactions. It's important for users to monitor network conditions and adjust their fees accordingly to avoid overpaying or underpaying.

Finally, it's worth noting that while fees are generally paid by the sender of a transaction, there are situations where the recipient may be responsible for paying the fee. For example, some merchant services that accept Bitcoin may require the customer to pay the transaction fee, as it is considered a cost of doing business.

163> what is the highest transaction fee thus far posted?

According to available data, the highest transaction fee ever paid on the Bitcoin network was 80 BTC, or approximately $2.6 million USD at the time of the transaction, in December 2017. However, it is worth noting that this was an unusually high fee and most transactions on the network do not come close to this amount.

164> why did such a thing occur?

The highest transaction fee on record occurred on June 10, 2021, with a total of 450 BTC in fees, or approximately $13.4 million at the time. The transaction involved a transfer of just 0.01088549 BTC, or roughly $325, but the sender included a fee of 450 BTC, presumably as a mistake or possibly as an attempt to launder money. The transaction was processed by the mining pool F2Pool, which collected the massive fee.

165> so some miner somewhere struck bitcoin, so to speak. this seems like an incredible oddity. do you think you could help shed some light on this situation?

The situation where an unusually high transaction fee is paid can happen due to a variety of reasons, such as a user intentionally paying a high fee to expedite their transaction or an error in wallet software causing an abnormally high fee. In the case of the specific transaction with a fee of 80 BTC, it is believed to have been caused by an error in the wallet software, where the user mistakenly set the fee rate to 2,100 satoshis per byte instead of 2.1 satoshis per byte. This resulted in a fee of around 80 BTC for a transaction that only transferred 0.01088580 BTC.

While such incidents may seem like an oddity, they are not entirely uncommon in the Bitcoin network. Due to the decentralized nature of the network, users have full control over their transactions and can set any fee they wish. It is the responsibility of the users to ensure that they set reasonable fees to avoid overpaying, and wallet software providers can also help prevent such errors by implementing safeguards and warnings for high fees.

166> error in the wallet software? whoops? just sent 13.4 million by accident?

It's possible that the high fee was a result of a mistake or an error in the wallet software. It's also possible that it was intentional, perhaps as a way to expedite the transaction or as a way to show off wealth. There have been instances in the past where high fees were intentionally paid by individuals to make a statement or as a way of flaunting their wealth. Without more information, it's difficult to say for sure what the motivation was behind this particular transaction.

167> lol maybe somebody lost a bet

Haha, who knows, it's certainly possible! But in all seriousness, it's likely that the large fee was unintentional and resulted from a mistake or error in the wallet software or the user's configuration of the transaction. Mistakes can happen even with experienced users, and it's important to double-check transaction details before sending them to avoid costly errors.

168> so what happens in this case? just poof? 13.4 million gone? lucky miner?

In this case, the transaction was included in a block and confirmed by the network, so the 13.4 million was transferred to the recipient address. Unless the recipient voluntarily returns the funds, they now have control over the bitcoins.

It is worth noting that such large transactions are typically subject to additional scrutiny and verification by exchanges and other service providers. If the recipient is an individual rather than a reputable organization, it is possible that the bitcoins could be difficult to sell or move without raising suspicions or triggering investigations. However, if the recipient is a legitimate entity such as an exchange or large institution, the bitcoins may be used or sold without issue.

169> so, people could look at the network and see that this 13.4 million in bitcoin is somewhat suspicious? and then anybody who tries to buy them later might see an alarm get raised somehow?

Yes, it's possible that people monitoring the Bitcoin network may have noticed this large transaction and considered it suspicious. However, once the transaction has been confirmed and added to the blockchain, it becomes a valid and irreversible transfer of funds. If the person who received the Bitcoin decides to sell or exchange them, it's possible that the transaction may be flagged or investigated by the exchange or service provider due to its large size and unusual circumstances, but ultimately it's up to the discretion of the service provider to decide whether or not to take any action.

170> ok. i think i am all clear on fees. is there anything else to keep in mind?

One thing to keep in mind is that the transaction fee rate can vary depending on network congestion and the level of demand for transaction processing. During times of high network congestion, fees may increase and transactions may take longer to process. It's also worth noting that some wallets may offer the ability to manually adjust the fee rate to prioritize transaction processing speed. Additionally, some transactions may require higher fees to incentivize miners to process them in a timely manner, such as those involving time-sensitive payments or those with a large number of inputs and outputs. It's important for users to stay aware of the current state of the network and adjust their fee rates accordingly to ensure their transactions are processed in a timely manner.

171> what is a FeeFilterRounder?

In the Bitcoin network, the minimum transaction fee that a user can set is specified in "satoshi per byte." However, in some cases, it may be necessary to round the fee to a particular value to make it more human-readable or to simplify certain calculations. The FeeFilterRounder struct is a utility for rounding fees to the nearest multiple of a given number, such as 10, 100, or 1000 satoshis. This can make it easier for users to understand the fee they are paying and can also help to prevent dust transactions, which are transactions with extremely small outputs that can cause problems for the network.

172> other than what we have already discussed, is there anything else involved in estimating fees?

Another factor that could affect the estimation of fees is the size of the mempool. The mempool is a collection of unconfirmed transactions that nodes on the network maintain. If the mempool is large, there may be a backlog of transactions waiting to be confirmed, and miners may prioritize transactions with higher fees to include in the next block. Conversely, if the mempool is small, fees may be lower as there is less competition for block space.

In addition, some wallets or fee estimation services may use other factors to estimate fees, such as recent transaction fee data or historical fee data. They may also take into account the urgency of the transaction and adjust the fee accordingly. It's important to keep in mind that fee estimation is not an exact science and fees may fluctuate based on network conditions and other factors.

173> what are the FeeEstimateModes?

FeeEstimateModes are the different methods or algorithms used to estimate transaction fees. The bitcoin-fees crate provides several FeeEstimateModes, each with its own algorithm for estimating fees.

Here are the FeeEstimateModes provided by the crate:

  • Conservative: This mode estimates the fee required to confirm a transaction in the next 10 blocks, with a high degree of confidence. It uses the data from the last 100 blocks to estimate the minimum fee required.

  • Economical: This mode estimates the fee required to confirm a transaction in the next 100 blocks, with a reasonable degree of confidence. It uses the data from the last 1000 blocks to estimate the minimum fee required.

  • Default: This mode is a compromise between the Conservative and Economical modes. It estimates the fee required to confirm a transaction in the next 25 blocks, with a reasonable degree of confidence. It uses the data from the last 500 blocks to estimate the minimum fee required.

  • Manual: This mode allows the user to manually set the fee rate for a transaction.

Each FeeEstimateMode has its own trade-offs between accuracy and speed. It is up to the user to choose the mode that best fits their needs.

174> how are statistics of transaction confirmation time used for fee estimation?

Transaction confirmation time statistics can be used to estimate the appropriate fee rate for a transaction by predicting the likelihood of a transaction being confirmed within a certain timeframe. The statistics can be used to calculate the median confirmation time for recent transactions and then determine the appropriate fee rate based on the desired confirmation time.

For example, if a user wants a transaction to be confirmed within 10 minutes, they could use the median confirmation time for transactions that were confirmed within 10 minutes in the past, and then choose a fee rate that is likely to result in a similar confirmation time for their transaction. This fee rate would then be included in the transaction when it is broadcast to the network, in order to incentivize miners to include it in the next block.

The FeeEstimateMode, CONSERVATIVE, ECONOMICAL, or UNSET, determines the desired tradeoff between confirmation time and transaction cost. CONSERVATIVE aims for faster confirmation times at a higher cost, while ECONOMICAL prioritizes lower fees at a potentially slower confirmation time.

175> what are the fee estimate horizons?

The fee estimate horizon refers to the number of blocks into the future for which the fee rate estimate is made. In Bitcoin, each block is mined approximately every 10 minutes. Therefore, a fee estimate horizon of 6 blocks would correspond to an estimated wait time of approximately one hour.

The fee estimate horizon can be set by the user and is typically based on the level of urgency for the transaction. For example, if the user wants the transaction to be confirmed quickly, they may set a lower fee estimate horizon to get ak higher fee estimate. Conversely, if the user is not in a hurry to have the transaction confirmed, they may set a higher fee estimate horizon to get a lower fee estimate.

176> what about the FeeReason?

FeeReason is an enumeration used in the bitcoin-fee crate to classify the reasons why a transaction fee was not adequate, which caused the transaction to be delayed or not confirmed.

It includes reasons such as Unset, LowPriority, AlreadyKnown, InsufficientPriority, FeeTooLow, Abandoned, ImmatureCoinbase, DustOutput, InsufficientFeeRate, MaxFeeExceeded, FeeRateTooLow, LargeForFeeEstimation, and Free.

These reasons are important for developers to understand why a particular transaction was not confirmed and to make adjustments to their fee estimation algorithm or to the transaction inputs and outputs.

177> what about the EstimatorBucket?

EstimatorBucket is a struct in the bitcoin-fees crate that represents a bucket of transaction fees for a certain time range. It contains the following fields:

  • min_fee_rate: the minimum fee rate in the bucket, in satoshis per byte.

  • max_fee_rate: the maximum fee rate in the bucket, in satoshis per byte.

  • count: the number of transactions in the bucket.

  • total_size: the total size of the transactions in the bucket, in bytes.

The EstimatorBucket is used by the fee estimation logic to track the distribution of transaction fees over time, allowing for more accurate fee predictions.

178> what are the equations for the fee calculation?

The fee calculation equation is simply:

Fee = FeeRate * TransactionSize

where FeeRate is the fee rate in satoshis per byte and TransactionSize is the size of the transaction in bytes.

For example, if the fee rate is 10 satoshis per byte and the transaction size is 200 bytes, the fee would be:

Fee = 10 * 200 = 2000 satoshis

Dependencies

~90MB
~858K SLoC