区块链学习最全教程学习 Solidity,全栈 Web3,Javascript 和区块链开发
Posted Chainlink资讯
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了区块链学习最全教程学习 Solidity,全栈 Web3,Javascript 和区块链开发相关的知识,希望对你有一定的参考价值。
Chainlink 开发者社区发布了一个关于全栈 web3,solidity 和区块链开发的完整视频教程。本视频教程由 Chainlink 开发者大使 Patrick Collins 讲解。教程由浅入深讲解了区块链的基础知识,智能合约基础以及流行的开发工具。视频内容覆盖广泛,不论是初学者还是资深工程师,都会从中学习到很多知识。
这个长达 30+ 小时的视频教程由 18 节课组成,会让对 Web3 感兴趣的开发者从零到一百完整学习相关技术。不管你之前是否有开发经验,都可以跟着课程,深入学习课程内容来将自己培养成为一名专业的 Web3 软件工程师。
你可以在这里观看完整视频:https://www.bilibili.com/video/BV1Ca411n7ta
在 GitHub 和社区 获得更多支持。
为什么你应该学习这个 Solidity 和 Web3 的课程
智能合约,区块链和预言机这三个开创性的技术,因为其天然具备的透明性,可验证性和去中心化三个特点,所以有潜力去重塑社会的信任关系。然而,想要在未来实现一个由去中心化技术和区块链所驱动的世界,我们需要更多的智能合约开发者来开发出易于使用的应用。这个从零到一的课程会教给你一些必要的工具,通过使用这些工具,你可以切换到 新的开发模式,成为 Web3 领域的合格开发者。
学习这个课程的好处是显而易见的。在全球范围内,Solidity 的开发者因为其稀缺性而广受追捧。Solidity 开发者的平均年薪是 145,000 美元,有一些高达 400,000 美元,而全栈工程师的平均年薪是 101,000 美元。这个课程不仅有作为 Solidity 开发者所需要掌握的内容,也涵盖了全栈工程师需要了解的知识。不管你是想要开始你的软件工程师职业生涯,还是打造下一个十亿美元级别的协议,这个课程都是一个很好的开始。
无论你处于什么样的开发水平,Chainlink Lab 的软件工程师以及开发者大使 Patrick Collins 会给你一步一步详尽的讲解课程内容。你可以跟着课程学习并且成为社区开发者的一员,社区开发者都是和你一样对 Web3 有热情,并且对未来有憧憬的人。在社区中,大家可以一起学习,互相帮助解答问题。不管你是已经对 javascript 开发很有经验还是以前从来没有过编程经验,对于课程的理解都不会有问题,因为课程会细致且详尽覆盖所有内容,同时有大篇幅讲解最重要和前沿的技术。
课程有什么特别之处?
尽管有各个平台上有各种各样的 Web3 开发课程和资源,但是 Partick Collins 曾经制作过世界上观看量排名第一的智能合约课程,该智能合约的课程在一年内观看量就超过了 2400 万。你可以在这里观看该免费课程。如果你是一个 Python 开发者,那么该智能合约课程就是为你设置的。
如果你还不知道你喜欢哪种编程语言,也别担心。这两个课程都会教给你成为专家级软件工程师的所需的各种工具和技术。已经有很多编程零基础的人通过学习上述 Python 的课程成为了专业的软件工程师,通过学习这个课程你也可以做到同样的事。
课程计划
本次视频课程共分为 18 节不同的课,对于想要成为 Web3 开发者的人来说,这 18 堂课会涵盖你所需要知道的所有内容,是你成为一名成功的软件工程师的开始。
这个视频会使用接受范围最广的技术和工具,包括 Aave,Alchemy,Chainlink,Coinmarketcap,Ethers,Etherscan,FileCoin,Fleek.hq,Ganache,The Graph,Hardhat,IPFS,Metamask,Morails,NextJS,NFT.Storage,Opensea,OpenZeppelin,Pinata,ReactJS,Remix,Solidity,Trails of Bits,Web3UIKit 以及更多。
这次课程会使用 Javascript 来搭建网站,每堂课都会提供 typescript 例子。以下是每节课的内容的的简单介绍。
第零课:开始这次旅程
这节课将会教你如何高效学习课程,帮助你从课程中学到的更多的知识。
第一课:区块链基础
深入了解区块链技术的核心概念和设计哲学,回答区块链概念性问题比如:区块链如何运作?区块链的目的是什么?这所有的东西为什么会这么重要?
这堂课将简单地介绍区块链的发展历史,同时也将简述像是 Bitcoin,Ethereum 和 Chainlink 这些网络如何以智能合约为基础的重新构建一个领域或者行业。另外,你将学习怎样在区块链中发送第一笔交易。正如之前所说的,这是一个手把手的课程。
第二课:Remix Simple Storage
在这节课中,你将会学习如何使用 Remix 开发和部署你的第一个智能合约,Remix 是对于新手区块链开发者最好的开发环境之一。你同时也将会学习 Solidity 的基础,包括数据类型,函数,数组,结构体,mappings 以及更多,Solidity 是智能合约的主要编程语言。
第三课:Remix Storage Factory
这节课会紧接上次的 Solidity 的基础知识,介绍智能合约的进阶知识,比如工厂模式,继承,引用和与其他智能合约的交互。
第四课:Remix Fund Me
在这节课中,你将开始学习在智能合约中使用 Chainlink 预言机网络,同时开始学习怎样可编程地发送 ETH,了解接口,库,如何节省 gas 费以及更多内容。
在这节课的实践中,你将会开发一个简单的智能合约,用以给公共物资募集资金,通过去中心化的方式开始这个过程。通过这个简单的应用,你可以学习和实践上述所有的内容。
第五课:Ethers.js Simple Storage
这节课将教你如何将第二节课中完成的代码迁移到专业的编程环境中,以将 Javascript 和 Solidity 相结合。你将通过 VSCode 完成迁移,同时学习一些 debugging 技巧。你将学习如何管理私钥,怎样可编程地部署和交互智能合约。
此外,这堂课将会介绍 Alchemy。通过了解 Alchemy,你将会学习如何从原始数据构建并且发送交易。
第六课:Hardhat Simple Storage
这节课会继续将你引入更专业的开发环境中,这节课中你会使用 Hardhat,Hardhat 是最流行的智能合约开发框架,通过 Hardhat 开发的协议在全球保护着价值数百亿美元的资产。
你将学习如何在专业的开发环境中进行测试,使用 extensions 提升开发效率,比如自动验证工具和以太坊浏览器。
第七课:Hardhat Fund Me
在节堂课中,我们将使用 mocking 和 gas optimization 来升级我们的 FundMe 智能合约合约,同时了解 Solidity 存储模式以及底层的 bytecode。
第八课:html/Javascript Fund Me
这节课将介绍 Web3 前端和网站建设。你将学习网站如何与钱包和智能合约交互,理解Web3 应用的前后端基础。
第九课:Hardhat Smart Contract Lottery
这节课中复杂的项目将让你体验“完成”一个项目是什么感觉。你将搭建一个由密码学保证的公平的彩票抽奖应用,这种应用在区块链之外不可能存在。为了做到这一点,你将学习怎样使用 Chainlink VRF 和 Chainlink Keepers 来将可验证随机数和去中心化流程自动化结合起来。
第十课:NextJS Smart Contract Lottery
接下来,你将为第九课完成的代码搭建一个网站。你将使用 ReactJS 和 NextJS。ReactJS 是目前全球范围内最流行的前端框架,这堂课将教你十亿美元级别的协议是如何搭建他们的网站的。同时你也会使用 IPFS 和 Fleek 以去中心化的方式 host 这个网站。
第十一课:Hardhat Starter Kit
这堂课将会分解 Chainlink 的 Hardhat-starter-kit 仓库,通过这个仓库,你将学习如何以简单的方式开始开发一个项目。
第十二课:Hardhat ERC20s
学习如何开发,创建和部署我们自己的 ERC-20 通证。
第十三课:Hardhat DeFi and Aave
我们会学习如何和 Aave 借贷协议交互,Aave 是世界上最强大和流行的 DeFi 协议之一。你将可编程地使用和交互 DeFi 协议,这会是你成为 DeFi 工程师的第一步。
第十四课:Hardhat NFTs
这节课将会教你像是 Bored Ape Yacht Club 和 Cryptopunks 这些 NFT 项目背后的所有的细节和技巧,也会教你如何自己制作这些电子艺术品。这些内容将深入讲解很多底层的智能合约调用和在日常的交易背后的到底发生了什么。
第十五课:NextJS NFT Marketplace
如果你完成了这个项目,请拍个照记录一下,因为这将会是你完成过的最令人印象深刻的项目之一!你将从头到尾搭建一个 NFT 交易所,从开发底层智能合约开始,最终完成前端页面。为了完成这个项目,你将会学习怎样使用像是Morails,The Graph,TailwindCSS 和很多其他流行技术。
第十六课:Hardhat Upgrades
学习在区块链工程技术中最有用的概念之一,proxies!你将更加深入地了解更多底层代码技巧比如 delegatecall 和 proxy storage 原理。
第十七课:Hardhat DAOs
学习怎样开发一个去中心化的治理机制,这种治理机制能够让持有某种 ERC-20 通证的用户给 proposals 投票。
第十八课:Security and Auditing
这节课会讲解一个项目从想法到落地的过程中应该了解的知识,你会学习在全栈开发流程中的一些经过时间检验的安全建议。
然后,你将会获得更多的资料以开始 Web3 开发的下一个阶段。
还在等什么?
如果你正在考虑深入学习智能合约和其他区块链方向的技术,那么这个课程 100% 就是你想要开始学习的地方。这个精心打造,循序渐进的教程基于作者多年的去中心化应用开发经验,将会介绍你在这个领域想要成功所需要知道的所有内容 – 所有的内容都会在这一个视频中介绍。
所以你还在犹豫什么?抓紧完成这个教程。教程的学习会是一个马拉松而非一蹴而就,每天只需要 25 分钟就会帮助你变成一个在区块链领域的顶尖软件工程师。
在这里观看视频: https://www.bilibili.com/video/BV1Ca411n7ta
在这里查看代码仓库和课程相关内容:
https://github.com/smartcontractkit/full-blockchain-solidity-course-js
区块链游戏项目(战舰游戏)基于layer2区块链技术,使用以太坊的solidity语言, 含全栈完整源码
这里介绍一个基于区块链以太坊开发的战舰游戏项目。做这个项目的初衷是对layer2区块链技术的proof-of-concept。因此,本项目是一个可以在每一个人的电脑上面执行的demo。为了让大家也能执行该程序,本人在文末放置了完整源码,同时也说明了项目配置细节和技术。
先看该游戏执行时的一个动图:
使用的编程技术有:
- HTML; Javascript; CCS; (网页前端)
- Web3 (提供了调用智能合约的js接口)
- ganache-cli (在本地模拟以太坊节点)
- remix (以太坊智能合约的IDE)
- Solidity (智能合约编程语言)
具体的环境配置请阅读本人的上一篇文章: 区块链/以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
游戏规则
该游戏名称是“Battleship game”,游戏的规则有很多变种,这里只使用最简单的。具体为:
每一个玩家都可以看到上图所示的页面。该页面分为两部分,下面部分表示当前玩家的棋盘信息,开始的时候,该玩家随机选择两个格子,用于放置两个战舰;上面部分显示对方玩家的棋盘信息,除了对方玩家的战舰位置。开始的时候,上面部分的棋盘是空的。游戏开始之后,两个玩家轮流猜测对方的战舰的位置,每一次只能猜一个方格。如果对方的战舰不在所猜测的方格中,那么就会在对应位置显示一个水花的图像;反之,则出现一团火的图像。因为双方看不到对方的棋盘,因此,每一次都需要对方玩家回复“所猜测的方格是否有战舰”(我们可以采用密码学的技术检测出对方是否撒谎)。当某一个玩家率先猜中了对方两个战舰的位置,该玩家就赢了,并可以收取自己和对方的赌注。
这里为了便于演示,将所有的棋盘放到一个页面上。
技术细节
这里使用了layer-two区块链协议,使得不需要每走一步棋都要访问区块链和更新区块链的状态。因此,这样可以节省交易手续费和时间。比如,现在以太坊一个交易被打包进区块的时间是13秒左右,如果还要确定该区块确实被包含到区块链中,还需要更长时间来确认;并且,当前时间点的以太坊的一个平均交易费用是11美元,可贵了。因此,如果每走一步棋都要将状态保存到区块链中,是缓慢和不经济的。估计不会有人愿意使用几个小时玩这样的游戏吧。为了解决这个问题,我们使用state channel技术。在正常情况下,一个玩家只需要更新区块链状态两次(游戏开始和结束的时候)。在游戏中途,如果有某一个玩家耍赖,比如中途离开或者撒谎,他们再使用智能合约来解决这些争端(dispute),以确保公平。
下图显示,如果使用layer1的区块链技术,每走一步棋都需要向区块链发布一个交易。
下图所示的正是我们使用的方式。
一个问题:如何检测对方玩家撒谎? 具体为,每一个玩家在游戏开始前都需要随机指定两个格子,表示两个战舰的位置,如果某玩家中途变卦,不承认自己所指定的那两个格子呢?再者,当前玩家猜测对方玩家战舰所在的方格位置,对方玩家需要回复该方格下是否有战舰,如果对方玩家不诚信呢?我们使用了Merkle tree进行commit(承诺)。介绍merkle tree(形如下图)不属于本文的范围。
根据密码学中的hash函数的特点,任意一个节点的变化都会导致根节点变化。并且,我们能够很容易证明某一个节点是否属于该merkle tree。
这里,我们对两位玩家的所有的游戏方格分别生成两棵merkle tree,叶子节点表示方格的编号。这里为了保密性,在编号后面合并一个随机数(合并后的数据作为hash函数的输入)。
因此,解决方法是,在玩家指定两个战舰的位置之后,需要生成一棵merkle tree,并向对方发送根节点。该根节点便是对方的承诺,且它不会泄露战舰的位置信息。在游戏过程中,如果要揭露某一个方格下是否存在战舰,需要将对应编号的叶子节点和从该节点到根节点的路径信息发送给对方。若对方能够构造出相同的根节点,证明该玩家是诚信的。(这里涉及到了密码学hash函数的知识)。
另一个问题:如果一个玩家a中途离开,怎么办?
当前实现的功能:需要玩家b向智能合约中提交一个控告。为了回应该控告,玩家a要在一分钟之内调用智能合约,取消掉该控告。如果一分钟之后玩家a不回复,那么玩家b就可以取走所有的赌注。
区块链和智能合约的作用
在这个游戏中,智能合约充当了裁判的角色:若某个玩家撒谎或者中途离开,那么智能合约就会把赌注给另一个玩家。因此,本质上区块链中的智能合约解决了信用问题,并且,重要的是,不需要依赖任何可信的第三方。游戏玩家不需要相信任何人:不用担心对方不诚信,不用担心游戏平台和对方玩家勾结;不用担心自己的赌注莫名奇妙就被取走;不用担心游戏平台宕机。
下图表示的是智能合约的fields,也即是智能合约需要保存的数据。我们保存了两个玩家的地址,赌注的数量,游戏状态,最终赢家的地址,两个merkle tree的跟节点,超时不回复的数据等等。
该项目还实现了下图红圈所示的功能。
- Forfeit Game,表示当前玩家放弃该游戏,包括赌注。(已实现)
- Claim Win,在当前玩家猜中对方两个战舰之后,点击该按钮就可以取走所有的赌注。(已实现)
- Accuse Cheating,原本的功能是当发现对方玩家撒谎时,将撒谎的数据发布到智能合约中,让智能合约裁决。如果读者想要实现该功能,需要注意,某一个玩家在向对方发送数据前,需要对该数据签名,以避免耍赖。因此,当某一个玩家要求智能合约裁决时,智能合约需要验证相关签名。(未实现)
- Accuse Timeout,控告对方玩家中途离开;(已实现)
- Respond to Accusation, 当当前玩家被控告时,该玩家需要在一分钟内点击该按钮,表示自己在线,来回复控告。(已实现)
- claim timeout winnings,如果被告人没有在一分钟之内回复,就可以点击该按钮来取走所有的赌注。(已实现)
需要完善的地方
很明显,这个项目只是一个demo。它距离真实的游戏还有很长的路:
- 首先,需要将两个玩家的棋盘放到两个页面中,让两个玩家相互看不到对方。
- 页面还不够友好,比如点击某一个按钮之后,没有弹框显示执行结果。
- 开始游戏之后,缺少页面UI来重置游戏。目前,需要进入remix来点击函数“clear_state_test”来重置游戏 (如下图所示)。
- 因为只是为了proof-of-concept,本人没有严格检查智能合约的安全性问题。
项目环境搭配和本地代码执行
请参考本人上一篇文章来搭建项目环境:https://liangyihuai.blog.csdn.net/article/details/115913338
因为该项目是在斯坦福大学课程的一个项目作业的源码之上编写的,如果我把源码放到GitHub上面,那位教授肯定很不开心,因此,本人把完整的源码放到了CSDN资源下载页面中。
下载页面(包含智能合约):https://download.csdn.net/download/liangyihuai/18418646
谢谢
以上是关于区块链学习最全教程学习 Solidity,全栈 Web3,Javascript 和区块链开发的主要内容,如果未能解决你的问题,请参考以下文章
区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
区块链项目实战 - 使用以太坊/智能合约solidity,全栈开发区块链借贷记账小应用,含完整源码
区块链游戏项目(战舰游戏)基于layer2区块链技术,使用以太坊的solidity语言, 含全栈完整源码