守护的训练营回顾和总结 #1307
zhangloveyan
started this conversation in
Materials
守护的训练营回顾和总结
#1307
Replies: 1 comment 2 replies
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
-
上周终于完成了所有的作业内容,借此篇回顾下训练营的心得、体会,以及总结。
自我介绍
微信:守护 魂(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