Category: Web3

  • 【BTC源码系列】随机漫步Day1

    程序入口

    比特币源码是用C++写的,构建系统用的CMake,在CMakeLists.txt中可以找到add_executable命令,含义是最终构建的二进制产物,此命令的参数中会指定源文件。

    重要设计

    主流程

    • 创建全局上下文
    • 连接服务端信号处理函数
    • 解析命令行参数
    • 启动程序

    数据结构

    疑问

    • noui_connect貌似是注册UI事件的,但是名字又叫noui

    欠缺的知识

    • C++命名空间的规则
      • 实际的大型项目中常用的idiom,即编程惯用法

    参考资料

    • 比特币node启动的命令行参数
  • 【BTC源码系列】开篇词

    进入加密货币行业4个月了,懵懵懂懂做了一些公司业务的需求,学了一些加密货币行业的皮毛知识,每天挂在嘴边的尽是些上链、签名、EVM、手续费等似是而非的名词。另一方面,Web3给我的体感是还在不断涌现新的项目,每次点开项目官网都有一种眩晕感,一开始还觉得这个项目又引领了一个创新,解决了Web3的重大难题,但是慢慢地,新鲜感一过,感受到的只有麻木,而且那么多币经我的手上链,感觉自己的提升并没有多少,只是对公司内部的技术栈以及工作流程更熟悉了而已。

    静下心来想了一段时间,加密货币毕竟在国内游走在灰色地带,生态没有起来,中文社区的技术沉淀不够,对于新人入门很不友好。英文资料浩如烟海,虽然英语阅读对于我来说不是不可逾越的门槛,但是却也实打实地影响我的学习效率,一开始也想沉下心来慢慢学,但是时间被业务裹挟,始终没有开始做。终于,这段时间感觉学有余力了,狠狠心踏上BTC源码的学习之路。

    值得投入时间吗

    直接说答案吧,值得!从大的方面讲,有以下两点:

    • 加密货币行业依然处在扩张期。以2024年末尾比特币价格首次突破10万美元为标志,比特币不可避免会在人们心中种下一颗种子,一颗将成长为比肩甚至超越黄金的种子,比特币还远远没有结束。现在投入时间肯定是最优选择。
    • 希望我能获得一张进入开源世界的钥匙。这个角度是从我的个人发展角度论述的,三年,我的三年程序员生涯只是让我获得一些打工的技能,而且这个技能还不算特别突出。学生时代见证了诸多互联网大佬的崛起,从财务自由走向财务自由,却并没有激发我的欲望,可能是前面20年走的太顺了吧,一副无所欲无所求的样子,这个其实不对的。我的状态应该切换过来,趁着现在还有接受新事物的能力,去疯狂尝试,疯狂试错,找到自己真正感兴趣与擅长的。如果可以做到,我希望是从这个事情开始。

    要做成什么样

    一次做到完美不可能,粗略想了一下,分以下几步走:

    • 对整个项目有框架性的了解,包括项目设计、技术栈,尤其是结合比特币概念展开,具体的实现细节不需要很清楚,做到有问题能知道去哪里找就行了
    • 回馈开源社区。到github上找几个没有解决的issue,尝试解决,走一遍完整的issue修复的交付流程
    • 深入代码的实现细节,了解现有实现的局限,能跟得上社区大佬的前沿讨论,做一个专家
    • 钻研区块链的分布式算法,主要是代码

    路径与方法

    • 早睡早起
    • 前期速度可以慢,静下心来把C++、CMake搞清楚
    • 公司报销了Cursor的订阅费,后期尝试利用AI加快阅读源码速度
  • 比特币概念及术语

    • 挖矿难度
      • difficulty:相对值
      • target:绝对值,区块的哈希值必须小于等于它
      • bits:target的紧凑表示