当前位置: 首页> 苹果资讯

比特币源码研读之十三

发布时间:20-05-20

比特币源码研读系列已完成十二篇了,在前面的十二篇中我们大部分时间是在对传入的参数、定卌义的全局变量以及代码结构进行了解析,虽然比较繁琐,但是这些内容的研读着实让我对比特币源码中的一些细节有了更深入的理解,掌握了其主要参数所▂▃▅▆█在位置。掌握了这些信息后不管是快速理解后续的源码,还是后续开发自己的区块链产品都可奠定很好的基础。所以,我仍然选择耐着性子稳步对源码进行仔细研读,只有这样才能让自己真正掌握比特币源码,不至于以后还要反复回来重新阅读源码,耗费不必要的时间与精力。同时,也希望大家在看我文章时能提出宝贵意见,一起讨论一起进步。

本文将继续开展应用程序参数交互源码部分(AppInit〡Paramete▅▆rInteraction)的研读与分析。

本文主要涉及的源码文件包括:

src/bitcond.cpp、src/init.h、src/init.cpp、src/u▉til.h、src/util.cpp、src/validation.h、src/∈uint256.h、sr∽c/policy.h、src/policy.cpp、src/amo╣unt.h、src/amount.·cpp

一、交易费增长量

交易费增长量(|incrementalRelayFee)的默认值在src/policy.h中定义,该值为静态全局变量,其默认值为100ↁ0聪,具体定义如下:

通过其注释我们可以看到incrementalRelayFee的功能是设置最小费率增长量,通过设置交易费增长量与交易最小费的目的考虑交易池的容量限制,排除一些交易费ξ过低的交易,即将其交易退回。

此处还需对incrementalRelayFee做进一步解释,该值可理解为最小交易费用设置的最低值,因为交易池中交易费的增量是以increment┎alRelayFee为基础的,所以每笔交易费必须大于等于incrementalRelayFee,也就是说最小交易费也必须大于等于该值。

我们再来看针对in♂crementalrelayfee参数的处理代码,程序首先通过IsArgSet判断是否设置了incrementalrelayfee参数,如果设置了,则通过θP≈arseMon"ey函✿。✿数将输入的以字符串表达的交易增长费转换为数字型的增长交易费,ParseMoney与其反向求解的FormatMoney函数均定义与src/utilmoneystr.h,这两个函数一个是将数字转换为字符串,一个是将字符串转换为数字。

如果传入的金额⿻无效则退出程序,反◎之为in▓crementalRelayFee赋值,为其费率值赋予传入的数值:

incrementalRelayFee = CFeeRate(n);

通过CFeeRate(src/amount.h中定义与注释)我们可以知道传入的n的单位为每千字节需要n聪的金额。

二、验证ⓥ脚本线程数

验证脚本线程数可通过-par√参数设置,其线程数获取代▣▤▥码如下:

我★们再来看后面对nScriptCheckThreads的逻辑判断,当nScriptCheckThreads输入值为0或负数时,程序将通过GetNumCores()函数获取程序运行机器能提供的线程数,ㄨ然后nScriptCheckThreads加上获取的线程数获得脚本验证的线程数。最后是判断nScriptCheckThreads的值:

通过上面代码我们可以看出,通过线程组创建nScriptCheckThreads个脚本验证线程,线程处理函数为T⊥hЦreadScr۩iptCheck,其定义于src/validation.h中,Ё实现于src/validation.cpp中,在该函数中通过脚本验证队列管理脚本验证线程,其具体运行方式我们将AppInitMain函数的研读中详细说明。

以上就是本篇文章的研读记录,这篇文章涉及的交易费增长量和验证脚本线程都与比特币中的交易相关,正如《精通比特币》作者在其交易章节说︴到的“比特币交易是比特币系统中最■重要的部分。”,所以,我在写本文的研读记录时对其中的概念进〇行了多方斟酌、考量与验证,当然也∏有可能存在理解不到位的情况,大家如果有好的建议可以在留言中给出,我们可以一起讨论,完善我们的研读系列!

一起学习成长 长按 关注我们

目前20000+人已关注加入我们

马云提出区块链改造制造业,未来区块∝链将如何大显身手呢?

‖∠ ⊿ ┖ К 热

脸书信息泄露可见私密信息裸奔,区块链如何保护我们的隐私

√ 门

区块链3.0时代如何赋能实体经济?以产业为核心实现区块链+

ш 文

高晓松在清华称区块链使◣传媒大有可为,区块链+文娱值得期待

菜ⓞ菜子

赞赏

上一篇: 国产新款7纳米芯片用于手机,提升AI表现
下一篇: 走秀网没货退款遭提现难:仅退到网内账户且无法消费