守护的训练营回顾和总结 #1307
zhangloveyan
started this conversation in
Materials
守护的训练营回顾和总结
#1307
Replies: 1 comment 2 replies
-
加油加油 |
Beta Was this translation helpful? Give feedback.
1 reply
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Uh oh!
There was an error while loading. Please reload this page.
-
上周终于完成了所有的作业内容,借此篇回顾下训练营的心得、体会,以及总结。
自我介绍
微信:守护 魂(z1176585217),90 后,8 年开发,其中干了 3 年 Android、兼职 1 年产品、1 年项目交付、3 年后端 java。
经历了产品的从无到有,在从有到交付用户的整个过程,算是完完整整的走了一遍产品的闭环。
在 NFT 最火的时候进入 web3 ,基本业余时间在弄,跟着社群一起打新、肝白、玩土狗等等,期间有赔有赚,但最后被套。。。后面和社群的朋友一起做投研,做着做着朋友就没消息了。。。
后来复盘反思了一些事情,希望不能寄托在别人身上,且一直跟着别人走,是会有问题的。要结合自身的优势,选择适合自己的东西,遂开始研究 web3 开发相关的东西。
训练营收获
以前接触 web3 的时候,也学了一点 eth 的基础知识,有个大概的了解。但当时的体系和资料不多,没有整体的学习框架,学习难度有点大,就没继续深入下去。通过这次训练营,对 web3 开发算是建立了一个基本的框架,并把这些东西都串起来了,对整体的开发和流程,也有了一定的认知。
学到的新能力如下:
1.github 协作
小公司 git 使用的其实并不规范,一个人一个项目,涉及的多半是是 pull、add . 、commit、push 这些,甚至连 merge 都不用,也不需要处理冲突,因为都是自己写的。
这次提交作业,需要 fork、然后 pull request 提交作业。以前没用过,就 google 了一下怎么操作,看着没啥大问题,但第一次提交还出了点状况,关闭了重新修改提交一下,后面也是看了这部分内容,算是补课了。
另外,我还是审核 task2 的人,如果大家有改完的 task2,还没及时的合并,可以群里 @我(守护 魂)。
2.前端基础
react 之前了解过,改过一些简单的代码,勉强够用。但这次 task 4、5,因为不熟悉 hook 这个东西,算是把我快弄死了,task4、5 作业也是我最后提交的作业,因为恶补了很多这方面的知识,特别是 hook,我记你一辈子。
学习的过程确实很痛苦,但一旦踏过去之后,你的水平会上一个新台阶,回头看走的每一步,都不是白走的。
3.solidity合约
solidity 也差不多,以前写过钱包的小 demo,用的是 ethers.js,稍微熟悉一些。这次上手实践写了一回合约,然后使用 remix 部署,在用钱包进行合约的交互,整个过程很顺滑,同时写了一篇手把手 task3 的文章。但后面的 task4、5 不熟悉 mapping 的结构,也卡了很久。不过经过死磕,也都解决了,虽说合约不算完美,有些异常判断没做全,但是使用还是没问题的,后面如果有空就在优化一下。
后端视角看 web3
对于前端来说,转做 web3 容易些,因为前端的开发内容没变,页面还是那些页面。变的是数据的获取方式,以前都是从接口拿数据,现在是直接和合约交互,但方式都差不多,通过框架使用 hook 交互很方便。
对于后端来说,全变了,不用数据库存储数据,不用接口传递数据,后端基本就不剩啥了。。。可能就剩一些中心化的数据还算有点工作量。。。
区块链相关的知识都一样,不管前端、后端都需要学习,但后端对于区块链的上手速度更快一些吧。虽说存储的数据不用数据库了,但数据还是需要存储的,存储的话,脱离不了存储结构,脱离不了数据结构,最后还是数组、链表这些。在一次认识到考研 408 那几本书的含金量。
那区块链数据存储的位置呢?拿 java 项目类比的话,就是存在成员变量里面,就是启动一个 jar 之后,方法里面定义的成员变量中。不同的是,合约一但部署,数据会被永久存储,不像 jar 包只要停止运行,内存中的数据就会丢失,也就是成员变量的数据都没了。
所以,这么一类比,合约开发就是不使用数据库存储数据的后端开发,对外暴露的方法就是接口,通过方法的调用进行数据的交互,数据直接存储在成员变量中,不用 nginx 转发、不用服务跳转、不用查询数据库。
关于 task
难度排名
task1 < task2 < task3 < task7、task8、task9 < task6 < task4、task5
task1 前端基础 demo
task2 区块链基础知识
task3 solidity 基础知识
task7 aspect 相关(后端应该不陌生,类似 spring 的 aop)
task8 以太 L2
task9 graph(类似 elasticsearch)
task6 三方 sdk 交互
task4、task5 自写合约、自写前端交互
task 思考
task1、2、3 是很基础的,按照 ama 的视频,都可以搞定。
需要注意的是,task3 里面的每个合约的作用是什么要搞清楚,用笔画一画,会清楚很多。
task7、8、9 是衍生的其他功能,跟着大佬的笔记,就像写 hello word 一样。
task7 中的 EVM++ 前面说到和 spring aop 一样,在方法之前行进行拦截验证,这里是限流器的作用,限制 ip 访问次数等等。后端的 aop 一般会用在日志打印上,打印请求时间、ip、参数、返回参数等等。后端的限流有专门的应用 sentinel,实现的功能也很多,比如限流,可以设置通过的速率,假如来了一堆请求,可以让他们排队慢慢经过,也可以过一些,丢一些。
task9 子图,我理解的就是对于一些事件消息,查询慢,还不能组合查询,那怎么办呢?那就把这些数据存到中心化的数据库里面,存进去后,这些数据想怎么查,怎么处理,就很容易了。所以,我说和 elasticsearch 很像,保存数据到里面,通过 query 语句进行查询,就能达到目的了。
在引申下,当下可能 web2 和 web3 相互结合会更好,取长补短,共同发展。如果某天 web3 能承载足够多的数据量,那么 web2 可能会才会退出舞台吧。
task6 是使用第三方,有参考的前端应用,搞定合约调用即可。
我这里踩了两个坑:
task4、5 是从零开始,自己设计、自己开发、实现功能,有一定的难度,中间会踩很多坑。
这里说下设计过程吧,就不单开一个文章写了。
1.功能分析(合约需要提供哪些功能)
NFTMarket 合约提供 nft 的上架、下架、购买、查询所有上架 nft 功能。
Token、NFT 合约授权 NFTMarket 转移 nft、代币权限(erc20、erc721 已有)、更新所有者信息。
NFT 合约提供 mint、查询所有 nft 功能。
2.对象分析(合约需要提供哪些数据)
NFT 合约记录自己的 tokenId、使用的 erc20、用户归属、图片信息、所有 nft 数据。
NFTMarket 合约记录 nft 的合约地址、上架状态、价格数据、上架时间。
简略的模型如下:
3.调用关系
理清了这些之后,就可以对照着开发了。
一些判断验证逻辑,这里就不展开了,比如:验证 nft 所有者、钱包连接等等。
4.简单出个页面
剩下的就开发吧。
结语
这段时间是真的忙,但是很充实,白天工作,晚上、周末刷视频,做作业,感谢 openbuild 的这次训练营,学到了很多东西,也感谢一起学习的小伙伴,离 web3 的世界又近了一步,🎉。
最后,再给自己打个广告,有相关的职位(java、web3)可以考虑一下我 😄。
Beta Was this translation helpful? Give feedback.
All reactions