工作上,我之前在《聊聊我在新加坡的近况》一文中曾说过,从前东家 ORA 出来之后,找工作不太顺利,当了几个月的无业游民。
然后,刚好有个朋友看到了我发到朋友圈的这篇文章,约我出来聊。本来我以为只是约我小聚,互相聊聊近况。没想到一聊,就聊成合作伙伴了。
其实,我一直很想和他一起做项目,因为他很擅长设计金融产品,ApeX 初创时的产品模型就是他设计出来的。
他有好几个产品项目想做,如今的想法是成立一个工作室,先自己出资并组建团队,自己来一个个孵化出自己想做的项目。我很认同他的 idea,他也想找一个像我一样,有能力帮他做技术落地实现和组建技术团队的人。当天聊了一下午,一拍即合,达成了初步合作意向。之后给我开出的薪资结构对我也很公平,我也没有任何异议,所以就把合作敲定下来了。
因此,现在我终于摆脱了无业游民的身份。而且还让我再次找回了创业的激情。
我想,我和他能达成合作,也真的是缘分。如果不是因为我刚好处于离职状态,且刚好一直没找到令我满意的工作,又刚好发了一篇文章到朋友圈,刚好又被他看到,刚好他有想成立工作室的想法,刚好需要我。所以,也许这就是缘分。
这段时间,最多的时间就是用来准备课程内容了。准备课程的过程,其实也是对自己的知识体系进行梳理的过程,通过这个过程,来查漏、补缺、更新、完善自己的技术体系,以让自己的技术水平更上一层楼。
按照规划总共 13 节的内容,目前已经完成了前 8 节,这期间让我学到了很多更细节的东西。
比如,NFT 批量的图片和元数据具体是怎么生成的?又要怎么上传才能保证只需要设置一个 baseURI 就可以匹配到所有 tokenId 的 URI?之前我只是知道原理,但并不知道具体是怎么操作实现的。而现在我终于懂了,因为我在准备第 1 节课的内容时,自己实现了一整个流程。
再比如,Merkle Tree 在链下具体用什么工具生成的呢?用数字签名方式实现空投,从链下到链上的完整流程实现是怎么样的?之前我只知道链上合约的逻辑实现,但不知道链下具体是怎么实现的。而现在我也都知道了,因为我在准备第 3 节课的内容时,也自己实现了链下到链上的完整流程。尤其是数字签名这块,踩了不少坑,链下生成的签名,放到链上合约校验时总是没通过,经过不断调试才终于发现问题。
我原本对于前端 UI 是了解不多的,比如对于 React 的 Hook,一直是半知不解。对于最常用的 Web3 库 wagmi 也是半桶水而已。而如今,我把 ETF 的 UI 从 v1 实现到了 v4 ,效果图如下:
V1 版本,实现了最基本的功能,只支持用底层代币进行投资和赎回。
V2 版本,增加了一个切换开关,可以切换成使用单一代币进行投资和赎回,还提供了一个支持单一代币的列表。
V3 版本,增加了数据面板的展示,包括 About 和 Portfolio 两块数据。
V4 版本,增加了流动性挖矿 EPT 代币的展示和领取。
这页面从 v1 到 v4 实现的过程中,也是遇到并解决了很多不同的问题。比如,如何遍历所有底层代币,并获取每个代币的 symbol、decimals、available 并展示出来?以及如何处理多个代币的授权?如何获取表格数据?如何实现想要的 UI 布局和 CSS 效果?等等。
实现这 UI 和交互效果所花费的时间,其实比我写合约的时间还多。一个看上去简单的页面,里面涉及到的细节逻辑还真的不少。虽然依然还有一些有待完善的地方,但我能自己做到这样的效果,说真的,让我很有成就感。另外,这期间,ChatGPT 帮助了我不少。
合约层面,也让我巩固了很多知识点。比如,接入 UniswapV3 进行交易时,要如何计算出交易路径?执行 Rebalance 时,不同代币之间的自动兑换要怎么实现?流动性挖矿怎么实现?可升级合约的三种模式有哪些需要注意的点?如何实现部署和升级?还有精度计算的问题。等等。
以下就是目前已经实现的合约:
至此,还剩下后面 5 节的内容,我要争取在这周内把剩下的内容搞定,然后就可以正式开课了。我也已经迫不及待想把我做出来的成果,在课程上一步步重现,让学员们也能掌握这些内容,然后我还打算从中物色优秀合适的学员,看看有没有机会加入我们工作室一起来做项目。