学习 Web3 开发分为几个阶段:了解区块链基础、区块链使用探索、然后根据自己的兴趣选择一个方向精进。
撰文:Tiny 熊
AI 和 Web3 是当前为数不多认为有巨大潜力的两个方向,Web3 薪资相对较高、有很多远程岗位、可全球就业,因此很多 Web2 开发者想进入 Web3 。
学习 Web3 开发最难的估计是不知道从何处下手,Web3 经过 10 多年的发展,内容越来越广,很多内容还相互依赖,给想进入 Web3 的开发同学带来了困惑:从哪里开始学、应该学什么。
我自己 2017 年进入 Web3 ,从事合约开发、技术布道、并一直跟踪区块链技术的发展,根据我对整个 Web3 的理解,整理下面这个学习路线图,希望可以帮助大家在学习的时候有更清晰的路线。
本文算是对这个学习路线图的解读,路线图是可交互式的[1],遇到不理解的术语,可以点击术语右上角小箭头查看右侧说明。
在学习路线图中,我将学习 Web3 分为几个阶段:了解区块链基础、区块链使用探索、然后根据自己的兴趣选择一个方向精进。
刚进入 Web3 开发的同学,在选择方向上不能贪多,而是应该做一些取舍,聚焦一个点往深处扎根,这样不容易迷失方向,也更容易看到自己的成长。
区块链背后的技术,依旧是传统计算机技术的延伸,在 Web3 从事开发,掌握数据库、数据结构、计算机网络、编程语言依旧是必须的。
但区块链的去中心化运行方式,刚开始的时候不好理解,是因为它不单单是技术问题,还包含了一个社会化的思想。
纯从技术角度想,容易想不明白为什么 BTC 的数量会限制在 2100 万个?心想:程序不都是可以修改的么?
如果能回答这个问题,区块链基础(什么是区块链、是如何工作的)其实理解的差不多了。
区块链有什么用,为什么有用、什么场景需要区块链技术,是一个随着时间推移不断加深理解的过程。
当下区块链技术依旧有不少的问题,但总体上来讲,区块链是一个强化个人主权、同时让群体协作更透明的技术。
我遇到不少同学总是拿 Web2 的优点与 Web3 的不足比较,我们在学习一个新技术时,要尽量保持开放的心态、这样才能吸收更多。
区块链带来的改变没有 AI 那么直接,因此我们容易低估他的价值。
在对区块链有了基础的认识之后,可以上手体验真实的区块链应用,例如使用钱包[2]软件创建自己的账号,有条件的也可以持有一点加密货币(会有一点门槛,虽然也可以用测试币体验。但真金白银的体验会不太一样)。
感受发起交易时的签名,查看区块链浏览器,交易打包出块的过程。
在使用时,会感受到不同链的交易速度,可以借此了解不同的共识机制、尝试理解不同共识在去中心、安全及效率上的权衡。
如果觉得有趣,可以感受一下 DEX 资产兑换、 NFT 交易、DAO 治理。
对比 Web2 ,Web3 应用的关键不同是:你的资产只属于你(任何信息都可以看作是一种资产),只有自己私钥签名后才能支配资产,任何人都无法剥夺你的资产。另一个不同是:Web3 应用通常都是开源的,所有人都是平等的参与一个透明的规则。
如果你认可 Web3 的价值和意义,可以尝试加入 Web3 建设。
这个文章主要以技术的角度讨论,大家可以选择研究方向和开发方向(Web3 项目里还有社区运营的事情也很有意思,这里不讨论)。
如果有比较好的理论或学术背景,或者更喜欢探索新事物,想走研究方向,比如研究密码学、共识算法、扩容方案、代币经济学等,通常需要阅读大量的英文论文。
开发方向分两大类:链开发和应用开发
链开发对开发者的技能要求会高一些,薪资也会高一些,不过市场需求比应用开发会少。随着时间推移,应用逐步拓圈,应用开发需求会越来越多,链开发会逐步稳定,新链的机会并不多,链开发比较适合喜欢钻研底层的同学。
从事链开发,可以选择开发新链、或者是做二层、三层扩容链:
开发新链,通常指 Layer1, 需要了解这些内容:
Layer2 扩容或 layer3 应用链
由主链的交易容量有限,尤其是以太坊及比特币,无法承载大规模的用户使用,Layer2 的思路是,将部分交易转移到主链外(Layer2)执行, Layer1 仅负责验证 Layer2 的执行,三层则通常是针对特定应用场景进行定制的区块链。链开发者需要了解的内容有:
想做链开发,模块化区块链也需要了解一下,模块化的思想是将之前一个整体的区块链分成多个层,不同的层解决不同的问题,甚至由不同的链来承担, 4 个层分别是:
还有一个趋势是,区块链上逐步集成 零知识证明(ZKP) 能力,例如使用 ZKP 来做交易执行的证明(zkRollup 也在 Layer2 层的应用,在 Layer1 层上也可以采用),用 ZKP 做存储状态的证明,实现轻客户端、无状态客户端来实现更好的去中心化。还有链通过 ZKP 来实现隐私交易。
如果你选择链开发,给初学者的建议是学习 Go ,探究 Geth 和 Op Stack,其他的框架根据需要和兴趣研究。
上面 Layer2 扩容更多是以太坊的视角,最近比特币上扩容方案也有不少团队在做,关注度挺大,大体上有(状态)通道类扩容和侧链类扩容方式,前者继承比特币安全性较高,但在编程能力扩展上较差。典型的代表有闪电网络、以及与 RGB、RGB++ 客户端验证方案的组合。后者继承比特币安全性较差,例如采用 MPC 的方式跨链,但可以做到更好的编程能力扩展。也有一些结合两者的方案。
目前比特币上扩容方案行业依旧处在探索阶段,如果你是比特币信仰者,可以多多关注。
如果想做应用开发,链的底层实现并不需要很深的理解,但我们需要了解各链的特点,如区块链性能、去中心化程度。
例如想开发社交或游戏类应用,对底层链的性能较高,而开发高价值的 DEFI 类型应用,对去中心化可能有更多的要求。
另外,底层链支持的开发语言以及生态的活跃度及对应用扶持力度等,也要考量的,这些关系到应用实现的工作量以及获取的用户的成本。
对于找工作的朋友也是类似,生态活跃度越高,工作机会越多,竞争也会大一些。
选择一个适合的底层链对应用的成功相当重要,多数通常是选择基于一个或一类链开发,也有一些应用需要支持很多的链,尤其是基础设施类应用, 例如,钱包、跨链桥、喂价预言机等,通常要支持很多个链。
简单对比一下各个生态,供大家参考:
比特币 :有最大的共识与资金体量,但是脚本能力有限,基于比特币链上能做的应用较少,很多应用需要结合索引器或者客户端验证方案来实现,生态还不够成熟,不过从发展的角度看,可能有更多的机会。
EVM 生态:包含了以太坊、以及众多的 EVM 兼容链(包括波场 Tron 也算 ),一部分 BTC Layer2 也是 EVM 兼容链,这些兼容链编程模型相同,都使用 Solidity 开发智能合约(及链上运行的程序),应用生态丰富,开发工具完善、开发资源比较丰富。
Solana:过去一年发展很强劲,生态体量上是老二,比 EVM 生态差距依旧比较大,Solana 的优势是吞吐量大,交易块,Solana 合约使用 Rust 开发,入门门槛较高。
TON:背靠有大量用户的 Telegram ,近期热度很不错, TON 同样具备高性能特点,智能合约主要使用 Func,但 TON 生态发展时间较短、工具库不完善,开发资源较少。
还有一些其他的区块链生态,如:Move 生态(包括 Sui / Aptos)、Starknet 生态、ICP 生态、AO/AR 生态等,都有各自的优点,但目前关注度更小。
这里描述的是当前的生态情况,各个生态的发展都是动态的,不同的生态也有不同的文化特点,大家可以根据自己的偏好选择。
给初学者的建议是从 EVM 生态入手,资料丰富、生态也比较稳。
Web3 应用开发和互联网应用开发相比,很大的变化是大量后端逻辑转为智能合约在链上运行(也有一部分后端逻辑转移到前端,参考下一小节),以此来去除对中心化服务端的依赖。
也有很多 Web3 应用不涉及合约开发,例如:钱包、交易所、链上数据服务等,开发这些应用时,需要了解如何与合约交互。参考下一小节。
EVM 生态开发合约最常见的以太坊智能合约语言是 Solidity,一定要学习,Yul 是开发合约的汇编语言,如学有余力,可以研究一下。
Solana、TON、Move 等生态链,有各自的开发语言,我们以后有机会单独介绍。
Solidity 开发 IDE,入门推荐使用在线 Remix IDE, 一般在项目开发中是使用 VS Code + 开发框架, 开发框架帮助我们编译、部署及测试智能合约,开发框架首选 Foundry ,测试更方便,其次是 Hardhat 。
开发智能合约时,需要理解常见的 Token / NFT 标准并会使用,如 ERC20 、ERC2612、ERC721、ERC1155 , 使用轮子也是一个很好的习惯,OpenZeppelin 是一个智能合约库,实现了各种标准,使用库可以减少自己的工作量,提升程序安全性。
开发合约程序时,要尽量遵循标准。这一点与 Web2 开发也是不同, Web2 程序通常是自己在调用,智能合约通常是公开给任何人调用,而且他人调用越多,程序价值越大。遵循标准可以让他人更方便的调用自己的程序。
Solidity 的入门简单,但要成为一名优秀的合约工程师有很多东西要学(练)习,例如掌握优化合约技巧来降低 Gas 费用、使用 Create2 创建及预测合约地址、理解底层 Call 调用和委托调用的机制、理解如何对合约进行升级、如何灵活应用离线签名减少用户费用、使用 Merkel 树降低链上存储成本、熟悉常见的安全漏洞、理解 DAO 治理方式及实现、理解账户抽象、了解如何利用预言机来获取链外数据等等。
另外,DEFI 去中心化金融是目前 Web3 最重要的一个应用场景,了解常见金融概念、熟悉常用 DEFI 的运行、理解闪电贷的运行,会让我们有更多的机会。
合约扮演的是后端程序的, 一个体验好的 Web3 应用同样需要少不了前端、 Web3 应用是由用户自己托管资产的,因此前端需要和钱包链接一起完成交互。
Web3 应用后端更多的是当做一个缓存层,因为链上的数据不是类似数据库的结构化数据,对查询不够友好,加一个后端作为数据缓存层,可以优化用户体验。
现在也有很多专门的链上数据服务商,链上有大量开放的数据,是一个数据宝库, 如果你对大数据感兴趣,这也是一个很好的方向。
开发 Web3 前端时,需要了解常用的钱包接入方法,如会接入 MetaMask 、 WalletConnect 、Web3 Model 等前端钱包组件,前端与链交互通常是通过 Vim.sh 、 Ethers.js、Web3.js 等交互库来完成,这些交互库其实是链节点提供 RPC 服务的包装。在调用时,前端通过 RPC 节点的 URL 来确定和哪一个链交互,通过 ABI 及合约地址来确定和哪个具体的函数交互。
Web3 后端主要处理数据,例如扫码区块,获取指定合约的指定事件的的数据,和链交互使用的方法与前端类似, 但根据后端语言不同,会使用不同的包装库与 Web3 RPC 节点通信,使用比较多的是 Go 后端使用 go-ethereum 库、Node.js 后端使用 Vim.sh 、 Ethers.js 等库,这几个库可以多熟悉一下。
参考资料
[1]路线图是可交互式的: https://learnblockchain.cn/maps/Roadmap
[2]钱包: https://learnblockchain.cn/tags/ 钱包?map=Roadmap
【免责声明】市场有风险,投资需谨慎。本文不构成投资建议,用户应考虑本文中的任何意见、观点或结论是否符合其特定状况。据此投资,责任自负。