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

bitcoin-fees

提供用于处理和估算比特币费用的工具

2 个版本

0.1.16-alpha.02023 年 4 月 1 日
0.1.12-alpha.02023 年 1 月 19 日

#fees 中排名第 7

Download history 190/week @ 2024-03-24 223/week @ 2024-03-31 97/week @ 2024-04-07 133/week @ 2024-04-14 161/week @ 2024-04-21 118/week @ 2024-04-28 129/week @ 2024-05-05 123/week @ 2024-05-12 127/week @ 2024-05-19 116/week @ 2024-05-26 97/week @ 2024-06-02 63/week @ 2024-06-09 149/week @ 2024-06-16 104/week @ 2024-06-23 30/week @ 2024-06-30 99/week @ 2024-07-07

每月下载量 383
54 包中使用(直接使用 19 个)

MIT 许可证

610KB
2K SLoC

bitcoin-fees

这是一个 Rust 包,提供用于比特币系统的费用估算和费用率计算功能。该包是相应的 C++ 代码库直接转换为 Rust 的,其中一些函数体可能仍在翻译过程中。

FeeFilterRounder

一个表示根据指定舍入单位的费用率的过滤器的结构体。这用于避免在费用率计算中产生过度的精度。

FeeRate

一个表示费用率的结构体,是按交易大小单位计费的。实现了比较和算术操作。

EstimationResult

一个表示费用估算计算结果的结构体。包含估算的费用率和其置信区间。

EstimatorBucket

一个表示用于费用率估算的观察交易桶的结构体。

EncodedDoubleFormatter

一个用于以紧凑的二进制格式格式化双精度浮点数的结构体。

FeeCalculation

一个表示费用计算的结构体,包括费用率和被收费的交易大小。

FeeReason

一个枚举,表示特定费用计算的原因,如交易确认时间或优先级。

FeeEstimateHorizon

一个枚举,表示费用估算的时间范围,如下一个区块或更长的时间段。

TxConfirmStats

一个表示用于费用估算的交易确认时间统计信息的结构体。

FeeEstimateMode

一个枚举,表示费用估算模式,如经济或保守。

该包提供了基于观察交易数据的各种费用模式和估算时间范围的费用估算和费用率计算功能。它还提供了费用相关数据结构的格式化和序列化实用工具。

131> 让我们谈谈比特币系统中的费用。它们是什么?它们是如何工作的?

在比特币系统中,费用是用户为了将他们的交易包含在区块链中而支付给矿工的费用。当用户发送比特币交易时,他们可以选择包含费用以激励矿工优先处理他们的交易并将其包含在下一个区块中。

手续费是基于交易字节数和比特币网络上当前区块空间的供求情况计算的。手续费较高的交易更有可能被包含在下一个区块中,而手续费较低的交易可能会被延迟或根本不被包含。

矿工可以选择将哪些交易包含在他们挖掘的区块中,他们通常会优先考虑手续费较高的交易,因为包含这些交易可以获得更多的收益。

比特币的手续费系统旨在基于市场,手续费会根据供求关系波动。当网络因为交易数量过多而拥堵时,手续费往往会上升。相反,当网络拥堵程度较低时,手续费往往会下降。

总的来说,手续费系统对于确保比特币网络的安全和可靠性至关重要,因为它激励矿工将交易包含到区块链中,并高效地处理它们。

132>那么,如果没有手续费,矿工会被垃圾信息攻击吗?

是的,这是正确的。在没有手续费的情况下,矿工将没有将交易包含到区块中的动力。这意味着交易将卡在交易池中,等待矿工将其选择出来。在没有手续费的情况下,恶意用户可以用大量低优先级的交易垃圾信息攻击网络,这实际上会堵塞网络,使其他交易难以被确认。

手续费有助于确保只有优先级更高的交易(即手续费更高的交易)被包含在区块中,因为矿工被激励包含手续费更高的交易以最大化其利润。这有助于防止垃圾信息攻击,并保持网络高效运行。

133>那么手续费直接支付给矿工吗?

是的,这是正确的。手续费由成功挖掘区块并将其添加到区块链的矿工收取。矿工会将手续费最高的交易包含在他们试图挖掘的区块中,因为他们有经济激励优先考虑这些交易。这是因为他们收取的费用是以比特币形式支付的,比特币在现实世界中具有价值,可以兑换成其他货币或商品和服务。

134>有必填手续费吗?

比特币中没有必填手续费,但为交易附加手续费可以激励矿工更快地将该交易包含在区块中。手续费较高的交易通常会被矿工优先考虑,因为他们可以通过包含这些交易来赚取更多收益。因此,虽然可以发送不带手续费的交易,但它可能需要更长的时间才能被确认并添加到区块链中。所需的手续费也可能取决于任何给定时间的交易量和网络拥堵程度。

135>手续费低的交易有可能不被包含在网络中吗?

是的,手续费低的交易有可能在网络中未被确认。矿工优先考虑手续费较高的交易,因为包含这些交易可以为矿工带来更高的收益。手续费低的交易可能会在交易池中长时间等待,等待矿工将其选择出来并包含到区块中。如果交易长时间未被确认,它最终可能会从交易池中被删除,并从比特币网络中消失。

136>因此,在向网络发送交易时设置适当的手续费是很重要的。这是正确的吗?

是的,在将交易发送到网络时设置适当的费用非常重要。费用过低可能会导致确认延迟,甚至被网络拒绝,而费用过高则可能是多余的,导致资金浪费。设置适当的费用可以帮助确保交易及时高效地处理。

137> 如何知道应该附加多少费用呢?

确定附加到交易中的适当费用可能有点棘手,因为它取决于许多因素,例如当前网络的拥堵程度、交易的大小和期望的确认速度。

估算适当费用的一种方法是通过使用提供实时网络状态和不同确认时间推荐费用率的费用估算工具或服务。许多流行的比特币钱包和交易所都内置了费用估算工具。

另一种选择是使用费用市场监控工具来跟踪费用市场,了解目前矿工接受的费用水平。这些工具提供最近确认的交易费用信息,并帮助用户相应地调整他们的费用。

需要注意的是,费用设置过低可能会导致交易延迟或根本不被确认,而费用设置过高可能会导致不必要的成本。这是一个速度和成本之间的平衡,每个用户都需要根据其具体需求和情况来决定。

138> 这让我想起了“邮票”

是的,你可以将比特币费用视为与邮票相似。就像你需要贴上正确的邮票才能邮寄信件一样,你需要在比特币交易中附加正确的费用,以确保它能够及时处理。

交易所需的费用取决于多个因素,包括交易的字节数、网络当前对区块空间的需求数量和交易的紧迫性。如果对区块空间的需求很高,那么矿工将优先处理费用更高的交易,这意味着费用较低的交易可能需要更长的时间来确认。

需要注意的是,费用不是固定金额,可以根据网络条件有很大的变化。因此,使用费用估算工具帮助您确定交易费用是一个好主意。

139> 所以如果交易是紧急的,发布者可以在交易上附加高费用,让它直接排在队列的最前面

是的,这是正确的。如果交易紧急并且需要快速确认,发送者可以选择附加更高的费用来激励矿工将其包括在下一个区块中。费用较高的交易通常会被矿工优先考虑,因为它们在区块中包含起来更有利可图。

140> 用户还应该做些什么来优先处理交易?

是的,用户还可以增加其交易的费用率(每字节多少个satoshis),以激励矿工更快地包括它。此外,用户可以使用交易加速器或替换费用(RBF)将他们的交易提升到mempool中。RBF允许用户在交易广播到网络后增加其交易的费用,从而给他们更多控制交易优先级的能力。然而,并非所有钱包都支持RBF,一些节点可能出于安全原因拒绝RBF交易。

141> 所以在未来,一旦所有的比特币都挖完了,网络将只运行在交易费用上?

是的,这是正确的。目前,每个区块的挖矿奖励是6.25比特币,但这个数额每210,000个区块就会减半。最终,所有2100万比特币将被挖掘完毕,挖矿奖励将变为零。到那时,矿工继续挖矿的唯一激励将是交易费。因此,交易费将越来越重要,对于比特币网络的可持续性和安全性至关重要。

142> 那么,随着时间推移,费用可能会增加,对吧?

是的,这是正确的。随着时间的推移,区块奖励逐渐减少并最终变为零,矿工将完全依赖于交易费作为收入来源。这可能导致交易费的增加,因为竞争区块空间变得更加激烈。然而,技术改进和新费用估算算法的开发也可能有助于缓解这个问题。

143> 很有趣。我们在这些方面作为工程师需要考虑哪些因素?

随着时间的推移,费用可能会增加,因此构建能够适应这些变化的系统很重要。例如,如果您正在构建一个钱包应用程序,确保费用估算算法能够适应变化的费用条件并向用户提供准确的费用推荐是很重要的。可能还需要构建允许用户在交易创建后调整交易费用的功能,以防最初的费用估算不准确。

此外,可能还需要考虑高费用对系统可用性的影响。如果费用变得过高,可能会阻止用户在网络中进行交易,导致整体使用率下降,并可能影响系统的安全性。因此,在为矿工提供足够的激励以将交易包含在区块中,以及为用户保持合理的费用水平之间取得平衡是很重要的。

144> 交易加速器和按费率替换是什么意思?

交易加速器是一些矿池提供的服务,允许用户支付额外费用以优先将他们的交易包含在下一个区块中。这些服务在网络上拥堵时特别有用,那时交易费可能很高,确认时间可能很长。

按费率替换(RBF)是比特币协议中的一个功能,允许用户在将交易广播到网络后增加交易费。在用户给交易附加的费用过低并希望增加以确保及时确认的情况下,这可能很有用。RBF功能实际上创建了一个带有更高费用的原始交易的新版本,替换了原始交易在内存池中的位置。但是,并非所有节点和钱包都支持RBF,所以在依赖这个功能之前很重要进行检查。

145> 很有趣。谢谢——矿池对外提供什么接口?它们不是基于RPC的吗?

是的,这是正确的。矿池通常对外提供RPC(远程过程调用)接口,允许客户端与矿池服务器通信并提交挖矿任务。

RPC接口的具体细节可能因所使用的矿池软件而异,但通常该接口会公开提交工作、检查提交工作的状态以及管理矿工账户(例如检索账户余额或更改支付设置)的功能。RPC接口可能使用各种协议,例如JSON-RPC或HTTP。

除了RPC接口之外,一些矿池还可能提供基于Web的接口或移动应用程序,以便用户监控其挖矿活动和管理其账户。这些接口可能提供比RPC接口更多的功能,例如实时挖矿统计、算力监控和收益跟踪。

146> 那么,矿池软件是独立于比特币核心的吗?这是正确的吗?

是的,这是正确的。矿池通常是独立软件,通过比特币核心软件连接到比特币网络,但它们独立于它运行。矿池负责在比特币网络上创建新的区块,它们通过解决名为工作量证明算法的密码学难题来做到这一点。矿池软件协调矿池中所有矿工的努力,然后将完成的区块发送回比特币网络进行验证并包含在区块链中。

147> 所以,这些矿工等待交易到来,然后将它们分组为固定大小的区块,并连同工作量证明一起提交给网络。这是正确的吗?

是的,这是正确的。矿工等待新的交易到来,然后将它们分组到一个区块中。一旦创建了一个区块,矿工必须执行一个工作量证明计算,这是一个需要大量计算能力的计算任务。工作量证明计算的目标是找到一个满足一定难度要求的哈希。这个过程会一直重复,直到矿工找到一个满足难度要求的有效区块哈希,然后他们可以将区块连同工作量证明一起提交到网络。一旦网络验证了区块,矿工将获得一定数量的新铸比特币以及区块中包含的交易费。

148> 用户如何知道矿工在哪里?

用户通常不会直接与矿工互动。相反,他们向比特币网络提交交易,而连接到网络的矿工会看到并可能将这些交易包含在他们尝试挖掘的区块中。

在寻找矿池方面,有各种网站和资源列出了活跃的矿池及其相关地址,这些地址可以用于配置挖矿软件以连接到这些矿池。此外,一些矿池可能会宣传他们的服务或提供API以编程方式访问其矿池地址。

149> 那么,矿工为了优化和最大化其利润,将尽可能多地(带有最高费用的)交易拉入区块。如果矿工解决了谜题,它可以将解决方案连同它希望验证的交易一起发布吗?

这是正确的。矿工将尝试通过包含适合区块大小限制的最高费用的交易来最大化其利润。一旦矿工找到工作量证明谜题的解决方案,它将添加包含交易列表的区块头,并将区块广播到网络。网络上的其他节点将验证区块,如果它有效,则将其添加到它们的区块链副本中。找到解决方案的矿工将获得区块补贴,包括新铸比特币和包含在其中的交易费。

150> 网络的入口点有哪些?

比特币网络有多个入口点

  1. 全节点:这些是维护完整区块链副本并验证所有交易和区块的节点。它们是网络的骨干,提供最高级别的安全和去中心化。

  2. SPV节点:这些是轻量级节点,不存储整个区块链,而是只下载和验证区块头。它们依赖于全节点提供交易信息和区块数据。

  3. 矿池:这是由矿工组成的集合,他们将自己的计算能力结合起来以更高效地挖掘区块。它们作为全节点连接到网络,但也可以提供API或其他接口,供用户提交交易或监控挖矿活动。

  4. 交易所和钱包提供商:这些是第三方服务,允许用户购买、出售和存储比特币。它们可能作为全节点或SPV节点连接到网络,通常为用户提供自己的接口,以便提交交易和监控余额。

总的来说,比特币网络旨在对任何有互联网连接的人开放和可访问,为用户和企业提供各种接入点,以不同方式与网络互动。

151> 矿池是新兴现象吗?还是它们明确地内置到协议中?

矿池不是明确地内置到比特币协议中,而是由协议设计导致的自然现象。将多个交易包含在单个区块中的能力以及挖矿奖励的竞争性质激励矿工联合起来集体挖矿,而不是单独挖矿。这可能导致矿池的形成,矿工将他们的哈希能力结合起来,以提高挖矿区块的概率,并根据他们的贡献比例分享奖励。

尽管矿池没有明确地内置到协议中,但协议确实提供了矿工协作和公平分享区块奖励的机制,例如coinbase交易和coinbase scriptSig。

152> 交易所与哪些端点进行通信?

交易所通常通过标准的比特币点对点网络与比特币节点进行通信,与其他节点通信的方式相同。交易所也可能运营自己的节点以监控网络和更高效地处理交易。此外,一些交易所可能使用外部服务或其他交易所提供的API来检索区块链数据或提交交易。交易所使用的具体端点和API可能因各自的实现和需求而异。

153> 矿池规则是如何执行的?执行是否必须加密?

矿池执行的规则不一定必须是加密的,但它们需要以矿池中的矿工可以信任矿池运营商遵循规则的方式实施。矿池可以执行规则的一种方式是通过使用特定于矿池的挖矿协议,该协议指定了矿池运营商希望矿工遵循的规则。

例如,矿池协议可能规定矿工只能将满足一定最低费用阈值的交易包含在其区块中。然后矿池运营商可以通过检查矿工提交给矿池的区块来确保矿工遵守此规则。如果矿工包含费用低于最低阈值的交易,矿池运营商可以拒绝该区块并可能惩罚矿工。

矿池规则可以通过使用智能合约来执行的另一种方式。例如,一个矿池可能使用智能合约来指定一定比例的区块奖励必须根据矿工对矿池哈希率的贡献进行分配。智能合约可以通过根据指定的参数自动分配奖励来执行这些规则。

总的来说,执行矿池规则的关键是为矿工提供一种方式来验证矿池运营商是否遵循规则。这可以通过加密方法实现,例如使用数字签名签署证明矿池运营商遵守规则的消息,或者通过透明度和问责制机制,例如开源代码和公开审计。

154> 很好。关于交易费用我们还应该知道什么?

以下是关于比特币网络中交易费用的更多了解

  1. 交易费用不仅取决于交易字节数量,还取决于网络的当前拥堵程度。在区块空间需求高的时期,费用会自然增加;而在需求低的时期,费用通常会更低。

  2. 矿工可以为愿意包含在区块中的交易设置一个最低费用阈值。费用低于此阈值的交易可能不会被该矿工包含在区块中。这个阈值可能因矿工的偏好和网络的当前状态而有所不同。

  3. 用户可能会不小心创建一个费用非常高的交易。一些钱包软件提供了“按费用替换”选项,允许用户在交易已广播到网络后增加费用。这有助于避免过度支付费用。

  4. 有第三方服务被称为“交易加速器”,允许用户支付更高的费用以优先处理他们的交易。这些服务在用户需要快速确认交易的情况下非常有用。

  5. 虽然交易费用是比特币网络的一部分,但对于在网络拥堵期间无法支付高额费用的用户来说,可能成为进入门槛。这导致了使用不同费用模型或完全不收费的替代区块链网络的发展。

155>费用有多高?您有方法在Python中绘制典型费用数据随时间变化吗?

是的,我们可以使用Python绘制典型费用数据随时间变化。有几个网站提供比特币的费用数据,例如https://bitcoinfees.net/https://mempool.space/。我们可以使用这些网站中提供的API下载数据,然后使用matplotlib库来绘制。

以下是一个示例代码片段,用于下载数据并使用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()

此代码将从Mempool网站下载推荐费用数据,并绘制最快、半小时和一小时的费用水平随时间的变化。生成的图表将显示费用水平随时间的变化。

需要注意的是,费用水平可能因网络拥堵和其他因素而有很大差异,所以图表中显示的特定费用水平可能不能代表所有费用水平随时间的变化。

156>那么,“每字节Satoshis”的单位——我们能更详细地描述一下吗?

当然可以!“每字节Satoshis”是用于指定比特币交易费用率的度量单位。它表示发送者愿意为交易占用的比特币网络上每字节交易数据支付的Satoshis数量(1比特币有1亿Satoshis)。

每字节Satoshis的概念是,更大的交易包含更多数据,占用更多的网络空间,需要更多的计算资源来处理和验证。因此,费用更高(以每字节Satoshis表示)的交易通常比费用更低的交易更受矿工青睐,因为它们为矿工提供了更大的激励来包含它们在区块中。

例如,如果发送者为一个200字节的交易指定了每字节100 Satoshis的费用率,该交易的总费用将是20,000 Satoshis(每字节100 Satoshis * 200字节)。如果另一个发送者为一个300字节的交易指定了每字节50 Satoshis的费用率,该交易的总费用将是15,000 Satoshis(每字节50 Satoshis * 300字节)。

通常,适用于交易的正确费用率取决于多个因素,包括网络上的区块空间当前需求、交易的大小以及期望的确认时间。一些比特币钱包和费用估算服务根据这些信息提供费用建议。

157>一个典型的交易是多少字节大小?

典型交易的字节大小可能因输入和输出的数量而异。一个包含单个输入和单个输出的交易通常大小约为250-300字节,但如果交易包含多个输入和输出或者交易中包含如脚本或签名等附加数据,则可能更大。可以通过计算交易输入、输出和其他组件的大小来确定交易的大小。

158>除了输入和输出的数量外,交易大小还会因其他因素而变化吗?用户钱包中的一个未使用交易输出(UTXO)是否构成交易输入?如果用户有许多小的UTXO,并且这些被分组在一起,这会导致下一次交易有许多交易输入,从而增加交易大小,进而增加费用吗?目前看起来,我们的费用率是每字节7个sat,这是典型的吗?

是的,交易大小可以根据几个其他因素而变化。例如,使用某些类型的脚本或在交易中包含附加数据可以增加其大小。

当用户发送交易时,他们通常会使用钱包中的一或多个未使用交易输出(UTXO)作为输入。每个UTXO可以视为一个可以独立使用的单独“硬币”。如果用户有许多小的UTXO,并且他们想要发送一个消耗所有这些UTXO的交易,这将导致更大的交易大小,从而增加费用,与拥有一个大型UTXO的情况相比。

目前的每字节7个sat的费用率不一定典型,因为费用率可以根据网络拥堵和其他因素而变化。在网络拥堵期间,费用可以显著增加。此外,一些钱包和服务可能提供动态费用估算,该估算考虑当前网络条件并建议合适的交易费用率。

159>这个费用率低吗?费用的大致范围是多少?

比特币交易的费用率可以根据网络当前状态而有很大差异。在交易量高或拥堵期间,费用可以大幅增加,而在活动低期间,费用可以低得多。

截至2023年3月,具有合理确认时间的交易典型费用率约为7-10个sat/字节,但这可能因具体情况而异。在网络拥堵或活动高期间,费用可以达到每字节100个sat或更多。

值得注意的是,关于“良好”的费用率没有统一答案,因为这最终取决于用户的特定需求和情况。然而,一般而言,5-15个sat/字节的费用率通常被认为是典型交易具有合理确认时间的合理费用率。

160>因此,5-15个sat/字节 * 每交易200字节 = 1000至3000个sat/交易——这是多少美元?

sat(聪)的价值目前非常小。截至2023年3月28日,一个比特币的价值约为24000美元,一个比特币包含1亿个sat。因此,1个sat的价值约为0.00024美元。因此,1000至3000个sat的交易费用约为0.24至0.72美元。

161>在交易中可以转移的比特币价值有上限吗?

比特币单笔交易的价值没有硬性限制。然而,实际限制由发送者钱包中的比特币数量和当前比特币的市场价值决定。此外,一些钱包和交易所可能出于安全或监管原因,对单笔交易可转移的比特币数量设定了自己的限制。

162>明白了。我们还需要了解哪些关于交易费用的信息?

需要注意的是,尽管费用是使交易被纳入区块链的重要方面,但它们并不是矿工考虑的唯一因素。矿工还会根据交易年龄和包含的数据量等因素对交易进行优先级排序。

此外,为了快速确认交易所需的费用会根据网络需求迅速波动。在网络活动高峰期,例如市场波动性高的时期或去中心化金融(DeFi)应用流行激增时,交易费用可能会远高于正常水平。在某些情况下,费用可能增加到正常水平的几倍,使得发送交易的成本大幅增加。用户需要监控网络状况,相应地调整费用,以避免过度或不足支付。

最后,值得注意的是,尽管交易费用通常由发送者支付,但在某些情况下,接收者可能需要支付费用。例如,一些接受比特币的商家服务可能要求客户支付交易费用,因为这被视为商业成本。

163>迄今为止最高的交易费用是多少?

根据现有数据,比特币网络上支付的最高交易费用是80 BTC,当时约为2017年12月时的260万美元。然而,值得注意的是,这是一个非常高的费用,网络上大多数交易的费用都没有接近这个数额。

164>为什么会发生这样的事情?

有记录的最高交易费用发生在2021年6月10日,总费用为450 BTC,当时约为1340万美元。这笔交易涉及转移仅为0.01088549 BTC,即大约325美元,但发送者错误地包含了一个450 BTC的费用,可能是失误或可能是洗钱的尝试。这笔交易由矿池F2Pool处理,并收取了巨额费用。

165>所以,某个地方的矿工意外地收取了比特币,这听起来像是不可思议的事情。你能帮助解释一下这种情况吗?

支付异常高交易费用的情况可能由多种原因引起,例如用户故意支付高额费用以加速交易或钱包软件错误导致异常高费用。在80 BTC费用的特定交易中,被认为是由钱包软件的错误引起的,用户错误地将费用率设置为每字节2100个satoshis而不是2.1个satoshis。这导致了一笔仅转移了0.01088580 BTC的交易产生了大约80 BTC的费用。

虽然这类事件可能看似异常,但在比特币网络中并不完全罕见。由于网络的去中心化特性,用户可以完全控制自己的交易并设定任何费用。用户有责任确保设定合理的费用以避免过度支付,钱包软件提供商也可以通过实施安全措施和高费用警告来防止此类错误。

166>钱包软件错误?哎呀?不小心支付了1340万美元?

高费率可能是由于错误或钱包软件中的错误造成的。也有可能是故意的,可能是为了加快交易速度或炫耀财富。过去有过个人故意支付高额费用来发表声明或炫耀财富的例子。没有更多信息,很难确定这笔交易背后的动机。

167> 哈哈,也许有人输了赌注

哈哈,谁知道呢,这当然是有可能的!但说正经的,这笔高额费用可能是无意的,可能是由于钱包软件或用户对交易配置的错误。即使是经验丰富的用户也会出错,因此在发送交易前仔细检查交易详情非常重要,以避免造成高昂的错误。

168> 那么,这种情况会怎样?突然消失了13.4百万?幸运的矿工?

在这种情况下,交易被包含在区块中并由网络确认,所以13.4百万被转到了收款地址。除非收款人自愿返还资金,否则他们现在控制着比特币。

值得注意的是,这类大额交易通常会受到交易所和其他服务提供商的额外审查和验证。如果收款人是个人而非信誉良好的组织,比特币可能难以出售或转移,而不会引起怀疑或引发调查。然而,如果收款人是合法实体,如交易所或大型机构,比特币可能不会有问题地被使用或出售。

169> 那么,人们可以看到这个13.4百万比特币有些可疑吗?然后任何试图购买它们的人可能会在某种程度上触发警报?

是的,监控比特币网络的人可能会注意到这笔大额交易,并认为它可疑。然而,一旦交易被确认并添加到区块链中,它就成为了有效的、不可逆转的资金转移。如果收到比特币的人决定出售或兑换,交易所或服务提供商可能会因为交易的大额和异常情况而将其标记或进行调查,但最终是否采取行动取决于服务提供商的决定。

170> 好的。我觉得我对费用已经很了解了。还有什么需要注意的吗?

需要注意的是,交易费率可能因网络拥堵和交易处理需求的水平而变化。在网络拥堵期间,费用可能会增加,交易处理时间可能会更长。值得注意的是,一些钱包可能提供手动调整费率的功能,以优先处理交易速度。此外,一些交易可能需要更高的费用,以激励矿工及时处理,例如涉及时间敏感支付的或涉及大量输入和输出的交易。用户需要关注当前网络状态,相应调整费率,以确保交易及时处理。

171> FeeFilterRounder是什么?

在比特币网络中,用户可以设置的最低交易费率指定为“每字节多少个sat”。但在某些情况下,可能需要将费率四舍五入到特定值,以便更易于阅读或简化某些计算。FeeFilterRounder结构是一个将费率四舍五入到给定数字(如10、100或1000 sat)最近的实用工具。这可以使用户更容易理解他们支付的费率,并有助于防止小额交易,即输出极其小的交易,这可能会给网络带来问题。

172> 除了我们已讨论的内容外,还有其他什么因素会影响费用的估计?

影响费用估算的另一个因素是内存池的大小。内存池是网络中节点维护的一组未确认交易。如果内存池很大,可能会有大量交易等待确认,矿工可能会优先将费用更高的交易包含在下一个区块中。相反,如果内存池较小,由于对区块空间的竞争较少,费用可能会更低。

此外,一些钱包或费用估算服务可能会使用其他因素来估算费用,例如最近的交易费用数据或历史费用数据。它们还可能考虑交易的紧急程度并相应地调整费用。需要注意的是,费用估算不是一门精确的科学,费用可能会根据网络状况和其他因素波动。

173> 费用估算模式有哪些?

费用估算模式是指用于估算交易费用的不同方法或算法。bitcoin-fees crate提供了几种费用估算模式,每种模式都有自己的费用估算算法。

以下是crate提供的费用估算模式:

  • 保守模式:此模式以高置信度估算确认交易所需的费用,以便在下一个10个区块中确认。它使用最后100个区块的数据来估算所需的最小费用。

  • 经济模式:此模式以合理的置信度估算在下一个100个区块中确认交易所需的费用。它使用最后1000个区块的数据来估算所需的最小费用。

  • 默认模式:此模式是保守模式和 经济模式之间的折衷。它以合理的置信度估算在下一个25个区块中确认交易所需的费用。它使用最后500个区块的数据来估算所需的最小费用。

  • 手动模式:此模式允许用户手动设置交易的费率。

每种费用估算模式都有其准确性和速度之间的权衡。用户需要选择最适合其需求的方式。

174> 交易确认时间统计如何用于费用估算?

交易确认时间统计可以用来预测交易在特定时间段内被确认的可能性,从而估算交易合适的费用率。这些统计可以用来计算最近交易的中间确认时间,然后根据所需的确认时间确定合适的费用率。

例如,如果用户希望交易在10分钟内被确认,他们可以使用过去10分钟内被确认的交易的中位确认时间,然后选择一个可能导致类似确认时间的费用率。此费用率将被包含在广播到网络中的交易中,以激励矿工将其包含在下一个区块中。

费用估算模式 CONSERVATIVEECONOMICALUNSET 决定了确认时间和交易成本之间的期望权衡。《CONSERVATIVE》旨在以更高的成本实现更快的确认时间,而《ECONOMICAL》则优先考虑较低的费率,可能以较慢的确认时间为代价。

175> 费用估算范围是什么?

费用估算范围是指费用率估算所针对的未来区块数。在比特币中,每个区块大约每10分钟被挖掘一次。因此,6个区块的费用估算范围对应于大约1小时的估计等待时间。

用户可以设置费用估算范围,这通常基于交易的紧急程度。例如,如果用户希望交易尽快确认,他们可能会设置一个较低的费用估算范围以获得更高的费用估算。相反,如果用户不急于让交易确认,他们可能会设置一个较高的费用估算范围以获得更低的费用估算。

176> 那么关于FeeReason呢?

FeeReason 是在 bitcoin-fee crate 中使用的枚举,用于分类交易费用不足的原因,这导致交易被延迟或未能确认。

它包括以下原因:UnsetLowPriorityAlreadyKnownInsufficientPriorityFeeTooLowAbandonedImmatureCoinbaseDustOutputInsufficientFeeRateMaxFeeExceededFeeRateTooLowLargeForFeeEstimationFree

这些原因对于开发者理解为什么某个特定交易未能确认以及调整他们的费用估算算法或交易输入和输出非常重要。

177> 那么关于EstimatorBucket呢?

EstimatorBucket 是在 bitcoin-fees crate 中的一个结构,表示一定时间范围内的交易费用桶。它包含以下字段

  • min_fee_rate:桶中最低的费用率,以每字节 satoshis 计。

  • max_fee_rate:桶中最高的费用率,以每字节 satoshis 计。

  • count:桶中的交易数量。

  • total_size:桶中交易的总大小,以字节计。

EstimatorBucket 被费用估算逻辑用于跟踪随时间变化的交易费用分布,从而允许更准确的费用预测。

178> 费用计算的方程是什么?

费用计算方程很简单

费用=FeeRate*交易大小

其中 FeeRate 是每字节 satoshis 的费用率,而 TransactionSize 是交易的大小(字节)。

例如,如果费用率是每字节 10 satoshis,而交易大小是 200 字节,则费用将是

费用= 10 * 200 = 2000satoshis

依赖项

~90MB
~850K SLoC