提到区块链,大多数人脑袋里第一时间蹦去来的一定是比特币。比特币的确是第一个落地的区块链项目,但是想要单纯的通过了解比特币来掌握区块链所有的生态是远远不够的。
区块链是一种按照时间顺序,将数据区块以顺序相连的方式组合而成的一种链式数据结构,并以密码学方式保证的、不可篡改的、不可伪造的分布式账本。
从这里的定义可以看出,区块链的核心技术主要有四个部分,分别是共识机制、分布式存储、智能合约以及密码学。想要学好这四个部分的技术可不是一件容易的事情,需要循序渐进。
接下来,我将从入门准备、核心技术进阶、实战开发和未来展望这四个方面为大家详细说明。
1. 入门准备阶段
区块链并不是一个新技术,而是多种计算机技术的组合创新,想要学好区块链,既得掌握编程语言(下面第 1~2 两部分),也得了解计算机基础科学(下面第 3~7 五部分)。
1) web前端开发(必须)
前端开发技术在区块链项目开发中有着非常重要的地位,你必须掌握前端的基础知识,熟悉 html、css、javascript、typescprit 等前端技术。
在区块链前端开发中,还可以利用现成的前端框架,如 vue.js、React.js 等来提升开发效率和代码质量,笔者更建议学习 React.js。
很多读者可能会感到疑问,为什么要学习前端技术,区块链不是更偏向后端技术吗?
这其实是大家的一个误解,区块链前端开发的任务包括但不限于设计和开发用户界面、与区块链网络进行交互、处理区块链数据、实现身份认证和权限控制、优化前端性能等,都需要用到前端技术。如果读者觉得困难,可以暂时先跳过框架的学习,掌握基础就行,等后期真正需要用到框架的时候再回来学即可。
2)后端开发(必须)
现在开发,大多都采用前后端分离。但在我们学习开发项目的过程中,大多都只有我们自己,哪怕是在公司上班,需要前后端交互,你也要懂一些后端开发最基本的流程和方式。所以为了让我们学的更加的完善,后端也必须要掌握。
对于区块链来说,后端语言一般都采用 java 和 golang,我更建议采用 golang。
Go语言是一种开源的编程语言,它简洁、高效、并发性能优异,可以使用GO语言编写区块链应用程序,实现包括交易记录、区块链同步、共识机制、智能合约等核心功能。
3)数据结构(必须)
数据结构可以说是每个程序员都必须要掌握的一门学科,它可以帮助你提升写代码的能力,提高算法设计能力,增强问题解决能力,以及提高程序性能和促进代码模块化。
总的来说,数据结构必须掌握。
4)Linux 体系与编程(必须)
在实际开发项目过程中,代码大多都是跑在 Linux 操作系统上的。
Linux 是开源的,他的操作系统的稳定性很好,Linux 可以根据自己的需要自定义系统,更加的灵活。除此之外,Linux操作系统还有很多优点。要想某得一份好的工作,必须要掌握 Linux 的基本操作。
5)密码学基础(必须)
密码学这个学科是非常困难的,至少对于我来说是这样的,那时候学起来非常痛苦。但是对于大多数人来说,我们知晓他的概念,知道怎么用就可以了,并不需要去掌握他的原理。
比如你要知道什么是对称、非对称和序列密码体制,需要知道哈希函数如何与消息认证结合,需要知道数字签名是什么以及他的流程,需要知道身份认证技术以及密钥管理这些基础的知识。
6)加密货币技术(必须)
密码学技术是保障网络安全的核心技术,区块链大量使用了密码学的最新成果,特别是身份认证和隐私保护技术,包括但不限于数字认证、数字加密、数字签名、时间戳和电子签章等;这些技术都是基于某个密码学算法发展起来的,所以前面我才说你需要掌握密码学的基础,以便你能加密货币技术相关的知识和技能。
7)可选基础学科
计算机组成原理、操作系统、算法分析、数据库原理、信息安全理论和技术、计算机网络。这些学科都是计算机相关的基础学科,在你时间充裕的情况下,可以多了解和掌握,对你以后的职业发展肯定是锦上添花的。
2. 核心技术进阶阶段
有了上面的基础知识,我们现在正式进入到区块链核心技术的学习。我们不仅要学习这些技术的原理,更要知道通过代码如何来实现他们。
一开始不懂,没法自己实现他们,没有关系,网上有很多的教程,大家可以参照。
1) 区块链原理(必须)
通过对区块链原理的学习,能掌握区块链技术的发展,知晓他的总体架构和价值,包括:
比特币区块链系统原理;
区块链信息安全技术原理;
以太坊区块链系统原理;
区块链中的共识机制原理;
超级账本区块链系统原理;
区块链智能合约技术原理。
通过掌握这些技术的原理,可以更好的理解和学习接下来的区块链知识。
2) 智能合约技术(必须)
该技术就是我们开篇提到的区块链核心技术之一。
智能合约是一段写在区块链上的代码,一旦某个事件触发合约中的条款,代码即自动执行。也就是说,满足条件就执行,不需要人为操控。
智能合约有很多的优点,例如无中介、公开透明、灵活等。
目前能用于编写智能合约的语言有 solidity、Vyper、Rust、 Move 等,你可以根据自己的需求至少学会一种,solidity 和 Rust 用的比较多一点。
3) 分布式计算与存储(必须)
分布式计算与存储是除了密码学之外,我认为是最难的一个学科了。
你需要知道什么是分布式,需要掌握 IPFS 协议、分布式哈希表 DHT、BitTorrent 协议、Merkle DAG & Merkle Tree、IPlD、libp2p 等相关知识的原理、流程和他们的实现。
4) 共识机制(必须)
共识机制在区块链中主要解决两个点:
第一是完全对等的节点如何竞争记账权;
第二是同时获得记账权后如何处理。
共识机制就是围绕着这两个点来展开的,需要掌握的知识有 POS、POW、DPOS、拜占庭将军问题、一致性定理、两阶段提交协议、PAXOS 协议、RAFT 算法等。
4. 实战开发阶段
有了前面的知识储备,我们就可以进入实际开发了。
需要告知大家的是,区块链一般分为以下几个方向:
区块链+数字文化
区块链+金融科技
区块链+教育治理
区块链+网络安全
比如当初我自己选择的是区块链+网络安全,后期的学习更加的偏向区块链智能合约安全的攻防,读者可按照自己的需求进行选择。
目前有三个主流的区块链底层开发平台,分别是比特币区块链开发、以太坊区块链开发、超级账本 Farbrc 区块链开发。目前最受欢迎的基于以太坊开发,以下介绍的也是基于以太坊,读者可根据自己的需求来进行选择。
在正式进行开发之前,需要读者熟悉区块链开发中常用的相关工具,如 truffle、ganache、web3.js 等:
Truffle 是一个用于以太坊智能合约开发的开发框架;
Ganache 是一个用于以太坊本地开发和测试的工具;
Web3.js 是一个用于与以太坊网络交互的 JavaScript 库,提供了一系列的 API,可以让开发者与智能合约进行交互。
1) 下载安装 metamask
MetaMask 是一个网页浏览器扩展版和移动版应用程序,用于管理以太坊私钥。这样,MetaMask 可以充当以太币和其他代币的钱包,也可以与去中心化应用程序 (dapps) 交互。
2) 编辑器
我们使用 Vs code 进行代码编辑。去官网上下载,然后进行相关的环境配置。
在配置环境的过程中可能会遇到很多问题,都是正常的,大家需要学会在网上查找答案,这里为大家分享一个专门用于区块链问答的网站 https://stackoverflow.com/。
3) 下载安装 ganache
Ganache 是一种以太坊模拟器,它使得开发 DApp 更快、更容易、更安全。Ganache 提供提前预设的 10 个用户,可以帮助快速测试 DApp。
4) 安装 hardhat
Hardhat是一个编译、部署、测试和调试以太坊应用的开发环境,它可以帮助开发人员管理和自动化构建智能合约和 dApps 过程中固有的重复性任务,并围绕这一工作流程轻松引入更多功能。
这意味着,hardhat 在最核心的地方是编译、运行和测试智能合约。
以上大致是进行区块链项目开发需要做的准备,有很多工具大家可能都不懂,也不知道怎么用,没关系,相关平台都有相应的开发文档,上面的解释都是非常详细的。
对于一个初学者,我强烈建议你们跟着视频或者买相关的书籍按照流程全程敲一遍代码,通过这样的方式你才能知道开发一个区块链项目需要经历什么过程。
在这里,我强烈推荐一个国外博主的视频,这个是地址链接:
https://www.youtube.com/watch?v=gyMwXuJrbJQ
他是英文的,看起来可能比较困难,但是他有翻译字幕。
做完这些我相信你已经有能力去面试一家区块链企业的公司了。