4个版本
0.1.16-alpha.0 | 2023年3月31日 |
---|---|
0.1.13-alpha.0 | 2023年3月17日 |
0.1.12-alpha.0 | 2023年1月18日 |
0.1.10-alpha.0 | 2023年1月18日 |
200 在 #command-line-arguments
470 每月下载量
用于 57 个crate (9 直接)
460KB
1.5K SLoC
bitcoin-settings
Rust 库
Settings
表示一个可以用来配置比特币系统各个组件的键值对集合。这个 Rust 库是将比特币代码库从 C++ 直接翻译到 Rust 的结果,目前正在翻译过程中,这意味着一些函数体可能仍在翻译中。
该库提供了几个用于处理设置的类型:SettingsValue
,表示设置中的一个值;SettingsTuple
,表示设置中值的元组;SettingsSpan
,表示设置中值的范围;以及 Settings
,表示设置集合。
该库还提供了几个用于处理设置的函数,如 get_setting
,用于从一个 Settings
集合中检索给定键的值;get_settings_list
,用于检索 Settings
集合中的所有设置;以及 merge_settings
,用于将两个 Settings
集合合并为一个集合。
此外,该库还提供了用于从文件或流等源读取和写入设置的函数。 read_settings
从源读取设置并返回一个 Settings
集合,而 write_settings
将一个 Settings
集合写入源。
总的来说,bitcoin-settings
是比特币系统的一个重要组件,允许灵活配置各种组件。虽然 bitcoin-settings
库中可能没有特定的数学方程或概念,但其功能对于比特币系统的正常运行至关重要。
81> 比特币系统中有哪些设置?
比特币系统中有很多设置可以被节点配置以自定义其行为。一些设置示例包括
-
网络设置:例如最大连接数、要使用的协议版本、监听端口以及要广告的服务。
-
区块验证设置:例如允许的最大区块大小、允许的最大交易大小、每个区块允许的最大签名操作数以及每个区块允许的最大脚本操作数。
-
内存池设置:例如要保留在内存池中的最大交易数、接受的最小交易费用率以及要保留在内存池中的交易的最大年龄。
-
挖矿设置:例如区块奖励、coinbase成熟期以及目标区块时间。
这些设置可以通过节点通过多种方式修改,例如命令行参数、配置文件或运行时修改。
82> 让我们谈谈网络设置——你能深入谈谈吗
当然,网络设置是比特币系统的一个关键方面,因为它们决定了网络中的节点如何相互通信。
在比特币系统中,节点使用点对点(P2P)协议相互通信。该协议定义了节点之间发送的消息格式以及这些消息的交换方式。
比特币系统中的网络设置用于控制P2P协议的各个方面。网络设置的例子包括
-
max_connections
:此设置确定节点在任何给定时间可以拥有的最大对等连接数。 -
max_upload_speed
:此设置限制了节点向其对等方发送消息时可以使用的上传带宽。 -
max_download_speed
:此设置限制了节点从其对等方接收消息时可以使用的下载带宽。 -
ban_time
:此设置确定对等方在行为不当(例如发送无效消息)时被禁止多长时间。 -
whitelist
:此设置允许节点将某些IP地址或网络范围列入白名单,以便它们始终可以连接到节点。
这些设置可以对节点性能及其与其他节点连接的质量产生重大影响。例如,如果将max_connections
设置得太低,可能会限制节点接收和传播新交易和区块的能力,而如果将max_upload_speed
设置得太高,可能会导致节点被其对等方视为垃圾邮件发送者。
总的来说,网络设置是比特币系统的一个重要部分,仔细调整这些设置对网络的正常运行至关重要。
83> 谢谢——你之前列出的设置通常是通过cli参数、配置文件或环境变量配置的吗?还是还有其他方法?
是的,之前消息中列出的设置可以通过命令行参数、配置文件和环境变量进行配置。
命令行参数可以直接传递给比特币核心可执行文件以启动软件。例如,可以使用-listen
标志来启用或禁用节点的入站连接。
配置文件是包含键值对的文本文件。这些文件可以用来指定大量设置,通常用于设置持久配置选项。比特币核心使用一个名为bitcoin.conf
的配置文件,通常存储在用户的家目录中。
也可以使用环境变量来配置设置。例如,可以使用BITCOIN_DATA
环境变量来指定节点区块链数据存储的数据目录位置。
需要注意的是,一些设置也可以在运行时通过使用bitcoin-cli
工具或JSON-RPC接口动态配置,这允许程序与运行的Bitcoin Core节点交互。
84> 谢谢——让我们谈谈区块验证设置
当然,我可以告诉你关于区块验证设置的信息。
在Bitcoin系统中,节点在将新区块添加到其区块链副本之前必须验证它们。区块验证过程包括检查工作量证明、区块头部、区块中的交易等。区块验证设置指定节点应该如何执行此验证。
以下是一些区块验证设置的示例
-
assumevalid
:假设有效的区块的哈希,这意味着链中的所有先前区块也被认为是有效的。此设置可以加快新节点初始区块下载的速度,但假设一个区块是有效的而不进行验证是危险的。 -
checkmempool
:是否检查内存池中已存在于区块链中的交易。如果交易已存在于区块链中,则不应将其包含在新的区块中。检查内存池可以确保不会创建包含重复交易的新的区块。 -
checkblockindex
:是否检查区块索引中的重复区块。检查区块索引可以确保不会将重复的区块添加到区块链中。 -
checkpoints
:一组硬编码到Bitcoin软件中的区块哈希。节点可以使用这些检查点来确保它们在正确的区块链上。如果一个节点看到一个不包含检查点的更长链,它将拒绝这条更长链。 -
maxtipage
:区块链顶端的最高年龄(以秒为单位)。如果链的顶端超过此限制,则节点将不会考虑扩展它的新区块。这可以防止节点接受在长时间延迟后创建的无效区块。
这些设置可以通过命令行参数、配置文件或通过Bitcoin Core API编程方式配置。
85> 谢谢——关于内存池设置呢?
当然!内存池设置用于配置内存池的行为,这是一个在矿工将其添加到区块之前存储未确认交易的数据结构。
在Bitcoin系统中,内存池设置包括
-
mempoolmaxmimumsize
:内存池的最大大小(以字节为单位) -
mempoolmaxorphantx
:内存池将存储的最大孤儿交易(在内存池中没有父项的交易)数量 -
mempoolminfee
:一个交易必须支付的最低费用率(以satoshis每字节),才能被接受到内存池中 -
mempoolexpiry
:一个交易在内存池中可以保留的最大时间(以秒为单位),在它被驱逐之前 -
limitfreerelay
:是否限制不支付费用的交易的转发 -
maxmempool
:内存池将存储的最大交易数量
这些设置可以通过命令行参数、配置文件或环境变量配置。
86> 太棒了!关于挖矿设置呢?
当然!以下是Bitcoin系统中的一些与挖矿相关的设置
-
minrelaytxfee
:一个交易必须支付的最低交易费用(以BTC/kB),才能被节点转发。费用低于此值的交易不会被节点传播。 -
maxmempool
:节点的内存池的最大大小(以兆字节为单位)。当内存池达到此大小时,费用最低的交易将被驱逐以为新交易腾出空间。 -
blockmintxfee
:在挖矿区块中的交易必须支付的最低交易费用(以BTC/kB)。费用低于此值的交易将根据网络共识规则被拒绝,包含它们的区块将是无效的。 -
blockmaxweight
:节点可接受的用于挖矿的区块最大字节数。此设置用于限制挖矿所需的计算资源,并防止大区块造成网络拥堵。 -
blockprioritysize
:可以包含在区块中的高优先级事务的最大字节数。费用率足够高的交易将被视为高优先级,即使在交易池(mempool)满的情况下也可以包含在区块中。
这些设置可以通过命令行参数、配置文件或通过Bitcoin Core RPC接口编程设置。
依赖项
~89MB
~849K SLoC