我写了个“教学版”比特币,用 10 个 Python 脚本带你彻底搞懂核心原理

14 小时 52 分钟前
 freekindom

比特币、区块链,一问到 UTXO 、PoW 、数字签名这些核心细节,可能就有点模糊了。看理论文章又常常觉得枯燥,不够直观。

为了彻底搞懂它,我决定用纯 Python 从零撸一个简化版的比特币,并把过程整理成了 10 个循序渐进的脚本,希望能帮到有同样困惑的 V2EXer 。

这个项目最大的特点就是 “为教学而生”

🔗 项目地址: https://github.com/picasso250/my-bitcoin/


✨ 这个项目有什么不同?


📚 10 步学习路径概览:

  1. step1_generate_keys.py: 生成你的第一对公私钥。
  2. step2_sign_and_verify.py: 理解签名的本质。
  3. step3_public_key_to_address.py: 从公钥到我们熟悉的地址。
  4. step4_build_simple_transaction.py: 构建第一笔“交易”。
  5. step5_create_a_block.py: 把交易打包进区块。
  6. step6_mine_a_block.py: 引入工作量证明 (挖矿)!
  7. step7_single_utxo_transaction.py: 核心概念! 理解 UTXO 和“找零”。
  8. step8_multi_input_utxo_transaction.py: 模拟“凑钱”支付。
  9. step9_coinbase_in_utxo_block.py: 搞懂矿工奖励和手续费。
  10. step10_simulated_network_consensus.py: 上帝视角,看多个节点如何达成共识。

这个项目不求生产可用,只求能让一个聪明的开发者在一个下午的时间里,通过亲手跑代码,对 比特币 的运作原理有一个清晰、深刻、代码级的认知。

项目完全开源,代码和文档都在 GitHub 上了。

如果你觉得有帮助,求个 Star ✨ 就是最大的鼓励!也欢迎随时提 Issue 或 PR 交流。

谢谢大家!

814 次点击
所在节点    Bitcoin
10 条回复
sillydaddy
14 小时 23 分钟前
感谢分享。请问是什么开源协议呢?我想后面在做比特币的科普视频时,可能会引用你的代码(执行代码、给出运行结果)。
prefect
14 小时 20 分钟前
已加入书架(等想起来、有机会、可能、再学)
NoCash
13 小时 59 分钟前
感谢制作,在看第一个脚本的时候,感觉有两处可以完善:
1 、公钥 (Public Key): 由私钥通过椭圆曲线算法推算得出,可以公开。地址是公钥的另一种表现形式
这里“地址”,如果是刚入门的小白可能不太清楚,可能会疑惑:怎么突然蹦出来说“地址”?楼主可以完善一下地址的解释

2 、private_key = ecdsa.SigningKey.generate(curve=curve)
方法里面,左边 curve 是形参名吧?右边是实参名,我认为楼主定义的时候是否应该给实参名相对于实参名给区别开来呢?不然阅读性上其实有问题
Rainwater
13 小时 53 分钟前
运行这些脚本会占用电脑很多性能吗,不会的话可以摸鱼的时候试试
freekindom
13 小时 38 分钟前
@sillydaddy GPL 总之你做科普视频,我非常欢迎。
freekindom
13 小时 37 分钟前
@NoCash 多谢你的反馈。1 地址这个事情鼓励问 AI 2 curve=curve 这种在 python 开发的时候非常常见,是实践上经常使用的开发习惯。
freekindom
13 小时 36 分钟前
@Rainwater 非常不占用性能……
IndexOutOfBounds
11 小时 1 分钟前
亲自 star ,亲自留言
dobelee
11 小时 1 分钟前
已收藏(等想起来、有机会、可能、再学)
scyuns
10 小时 58 分钟前
已经 star 并且打算好好学习一下

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/1171638

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX