区块链练手项目(持续更新)
1、前言
读研期间,我的研究方向聚焦于区块链与联邦学习的交叉领域,具体涉及同态加密、梯度剪枝、差分隐私等技术的融合应用。区块链技术体系庞大且内容繁杂,对初学者而言,若缺乏专业指导,不仅入门困难,连合适的源码都难以寻觅,很容易在起步阶段就陷入困境。
回想当年,我独自负责一个省级项目时,从对区块链一无所知的状态,到最终顺利毕业,这一路走得异常艰辛。近期恰好要开发一个群体学习相关的项目,便借此机会重新梳理和回顾相关知识。区块链本身涵盖的知识点多、系统复杂度高,我不敢自诩为这方面的 “大神”,但希望能整理出一份适合初学者入门的教程。这既是为了记录笔记、防止遗忘,也是想分享自己的经验,帮助后来者少走弯路。即便已有过学习经历,重新拾起来依旧觉得不易,主要有几方面原因:
一是资料杂乱且难查询,缺乏系统化的入门资源;二是源码项目规模大,对初学者不够友好;三是区块链与联邦学习结合的源码极度稀缺,即便存在少量案例,学习门槛也很高;四是区块链代码运行难度大,过程中容易出现各种难以解决的错误。
刚好现在有此机会,因此,我计划在这个专栏中,先重温区块链的核心知识,再深入探讨区块链与联邦学习的融合应用,最后梳理密码学相关内容。而密码学领域充斥着大量公式,往往即便有源码也难以理解,更别提很多内容根本没有配套代码。要将这几个领域有机结合,确实颇具挑战性,需要扎实的技术功底。
算下来,我在这个领域学习已有三年,跨专业攻读计算机学位的背景让我付出了更多努力,但至今仍觉得自己只是堪堪入门。希望这个专栏能留下我的学习轨迹,也真正能帮到大家少走一些弯路但是我平时比较忙,所以笔记的排版上可能会有些问题,有些东西可能来不急规划,希望谅解。
1.1 区块链适合入门的一些项目
区块链目前多种语言可以实现,一般选择的是go,以及c++,当然java和pyhon的也有,初学者建议go语言,因为go语言相对简单一些,好多主流的区块链用的也是go语言。
1.go
下边是适合初学者的一些go语言项目
转载:https://www.flysnow.org/2019/11/08/golang-bitcoin-blockchain-sources
1.1.1、naivechain
地址:https://github.com/kofj/naivechain
推荐优先级:★★★★★
特点:极简实现,包含区块、区块链基础结构、P2P 节点连接及模拟挖矿等核心功能,仅 300 行代码,易于快速上手。
1.1.2 gochain
地址:https://github.com/crisadamo/gochain
推荐优先级:★★★★
特点:在基础概念之上增加了工作量证明(POW)、交易添加等模块,复杂度适中,适合理解进阶功能。
blockchain
地址:https://github.com/izqui/blockchain
推荐优先级:★★★★
特点:功能覆盖全面,包含 Base58 编码实现、哈希树(Merkle Root)等细节,贴近实际场景的技术选型。
1.1.3blockchain_go
地址:https://github.com/Jeiwan/blockchain_go
推荐优先级:★★★★
特点:侧重原理演示,代码注释详尽,对区块链核心流程的拆解清晰,适合系统性学习。
研究性质的简单实现,主要基于作者的几篇研究文章:
Basic Prototype
Proof-of-Work
Persistence and CLI
Transactions 1
Addresses
Transactions 2
Network
以上都是英文的,不过有人翻译,可以参考这个链接查看,这是一步步很不错的入门学习项目了。
https://ethfans.org/posts/building-blockchain-in-go-part-1
https://ethfans.org/posts/building-blockchain-in-go-part-2
https://ethfans.org/posts/building-blockchain-in-go-part-3
https://ethfans.org/ajian1984/articles/building-blockchain-in-go-part-4
https://ethfans.org/ajian1984/articles/building-blockchain-in-go-part-5
https://ethfans.org/ajian1984/articles/building-blockchain-in-go-part-6
https://ethfans.org/ajian1984/articles/building-blockchain-in-go-part-7
1.1.5、gocoin
https://github.com/piotrnar/gocoin
看这个项目的介绍:
Full bitcoin solution written in Go (golang)
比特币的都有了,钱包,交易,客户端,可以部署运行。
区块链技术肯定是个好技术,而且我们又具备Golang的优势,所以可以好好的看下,了解下。
2 java的
https://gitee.com/luckytuan/dce-blockchain
3、C++的
1、FISCO BCOS
这个项目稍微有点大,可以用来进阶,是国内的一个区块链项目,但是好在有官方文档,之前我也运行过。不过记录的笔记丢了,感觉还不错
源码:https://github.com/FISCO-BCOS/FISCO-BCOS
文档:https://fisco-bcos-documentation.readthedocs.io/zh-cn/latest/docs/introduction.html#fisco-bcos
4、python
这篇文章是登上natural的一篇讲群体学习的文章,论文还是值得看看的,不过代码嘛,我运行过,当时刚开始学习,记了笔记,花了我两个月时间,国内的话不太好运行,而且它的代码也稍微有点问题,并且自从版本2之后,核心源码就被了隐藏了,我根本看不到,而且如果有问题的话,网络上也没有那么多解决信息,只能自己解决,虽然最后我运行出来了,如果想要运行笔记的话,我倒是可以分享下,但是我不太建议看他的代码,可以看些简单的,并且他的代码有个数据集好像还不能跑,当时也每太深入研究,毕竟我是需要毕业的,不让我看源码我就不研究他了。好像是基于以太坊的,不过虽然他说是群体学习,但是实际看他的代码,是链下聚合,区块链其实只起到了交流信息的作用。
https://github.com/schultzelab/
https://www.nature.com/articles/s41