区块链学习第一阶段总结

这是一篇写于2018年9月3日 星期一的日记

从接触区块链到现在过去了三个多月,把这段时间作为第一阶段仅仅是因为今天提交了第一个CVE,虽然不知道能否申请到,但这也算是这段时间一个输出。这段时间看的东西挺多的,也零零散散记了一些笔记,但都是一些自己能看懂,甚至有些自己现在都已经看不懂的笔记,趁还没忘记,把这段时间的学历经历记录下来。

一、选择区块链有三个方面的原因:

1、当时的工作内容是c++开发,而自己最初的规划是逆向和移动安全,虽然说“殊途同归”,但是一直干着自己不擅长的事情,自信心快被打击没了。又因为自己从打ctf到实习再到工作,一只在扩大自己的面而没有深入一个点,所以特别渴望能有一个明确的方面。
2、邵老师的鼓励和给予我的工作机会(当时打算的是dapp的开发)
3、有密码学和编程基础,上手比较快。

二、学习路线

1、网上找资料,了解概念

开始学的时候网上关于区块链的东西已经很多了,在后面遇到问题时还是能找到一些解决办法。邵老师在让我学区块链的时候推荐了几本书,虽然后面还吐槽了书里一些模棱两可,含糊不清的解释,但是一开始看的书真的帮助很大。
在等快递的期间我在网上找了一些区块链的基本概念的资料来看(当时对区块链完全没有概念,对挖矿是为了找一个特别的数字完全不能理解),我不知道是因为本来对密码学就有基础还是因为别人讲的特别清楚的缘故,看了几篇博客基本上清楚了区块链是什么已经大致的一个工作原理。当时没有收藏,现在找不到是哪些博客了,不过google一下区块链介绍,比特币介绍应该就有很多了。看完这个我去找了比特币白皮书:https://github.com/GammaGao/bitcoinwhitepaper/blob/master/bitcoin_en.pdf
中文版

2、看书、写代码,加深理解

快递很快就到了,下图就是当时老师推荐的书籍。
推荐书籍

看了一下区块链的开发,貌似nodejs是首选,web3js提供了各种接口,相对比较方便。我最先看的是《区块链项目开发指南》这本,这本书我个人感觉挺好的,挺适合初学者,前面几章是基本概念的介绍,后面是带着读者写代码,而且源码都在github上可以下载来看。看完前面的概念我没有立马跟着写代码,而是想去过了一遍js的基本语法。因为nodejs之前没有接触过,js也只是知道皮毛,所以这个过程基本上是发现自己不了解的先去补补课,书里的第一个项目不是关于区块链的,只是利用一个小项目教读者用nodejs开发前端和后台服务。这里的后台用的是express,所有又去补补课。跟着书里的内容写代码,有助于加深对内容的理解,这本书的内容其实没有看完,因为后面打算和学长他们一起完成一个文件共享区块链的开发项目的,但是因为我加入的时间比较迟,他们已经分工的差不多了,所以只是了解了整个项目没有参与到开发。
接着看了第二本是《nodejs区块链的开发》,这本书主要是围绕一个开源的项目在介绍区块链的开发,我没有看下去,感觉有点吃力。剩下的几本书都是偏理论和算法的,也都看了一部分,都多半书根据需求看的而非从头到尾阅读,因为很多内容没本书都在重复讲。

3、搭环境,练练手

dapp少不了智能合约,这一块需要搭环境,写合约,调用合约。
1)geth+solc/remix编译
《区块链项目开发指南》这本书里是有介绍solidity的基本语法的,第一遍看过去觉得和c++很像,一些概念也比较好理解;第六章写的也是创建智能合约部署平台,但是当时跟着写,其实有些还是很理解。后面在网上找关于合约部署的内容,发现有几种方式;最开始用的是geth客户端(一开始对于钱包客户端、区块链应用客户端有点不清楚,包括rpc,8545盒30303默认端口一些东西都不是很理解),因为书里面介绍的也是geth,然后又了解到remix在线的solidity合约编辑器,还有本地的编译工具solcjs。可是用geth的时候开始就遇到问题,一直pending,后来知道是因为这个过程需要先将区块同步到本地,需要很长时间,但是可以启动geth是使用–fast选在快速同步。

2)truffle+ganache-cli
后面在网上看文章发现有专门用于区块链开发的环境,ganache-cli之前好像是叫testrpc。http://truffle.tryblockchain.org/Solidity-truffle-%E5%AE%9E%E6%88%98.html根据这个教程就知道怎么使用了,包括这里还没有讲到的调试,下断点等功能。

3)remix+metamask
之前看如何搭建智能合约的时候有些教程也有写到这种方式,但是我还是后面在做zeppelin上面的挑战游戏的时候才用了这种方式,发现也挺好用的,但是就是有时候ropsten的速度很慢很慢,这个平台挺有趣的,是一个类似ctf的练习平台,每一关都是一个有问题的合约,能够利用合约漏洞完成题目要求才能过关。

4、深入项目

接触的第一个区块链项目是一个日志审计平台,其实自己没有真正开发这个项目,接手的时候学长已经写的差不多了,我只是去读了他的代码,包括后续的优化。这是一个私链,这又让我有了新的认识,因为之前理解的Dapp都是基于以太坊的,包括挖矿之类的,都不需要自己去做,但是这个私链就涉及到了挖矿已经节点之间的通信,这里才很彻底的理解了rpc。除此之外还有智能合约的设计、区块链存储kv数据库的对比选择等等。

写在最后
还是很庆幸自己的选择,虽然不知道区块链的未来会如何,但是这几个月学到了很多东西,也没有了以前的那种不知道在忙些啥“心有余而力不足”的无力感。下一步话就是继续进行合约的审计,总结了经验在进行自动化合约审计工具的开发。