自评: ★★★★☆
Github 仓库: https://github.com/suiet/suiet
和本科朋友组团队,从 8 月开始投入,做到 12 月已经成为 Sui 钱包生态的 Top3 ,推特粉丝数破 100k 。
通过开发钱包 Chrome 插件,我的前端整体架构能力得到锻炼。Chrome 钱包插件的架构涉及跨上下文通信,主要利用 service worker 实现类后端服务,通过Chrome Messaging 机制建立通信通道,封装成 JS Bridge 来给前端 UI 弹窗提供 API 。存储则是利用 IndexedDB 存储持久化数据,Persist Redux + Chrome Storage存储内存数据。
在 Wallet Standard 的实现过程中,整体交互还是比较复杂的,涉及主体有:DApp 网页环境、Chrome Content Script 沙盒、钱包 Service worker 、钱包 UI 。光这块的消息传递就很麻烦:DApp 网页环境与 Content Script 沙盒环境是通过 window postMessage 广播传递消息,这里我 JS 事件编程利器RxJS把广播收发包机制包装成类似 RPC 函数调用(屏蔽底层通信细节),实现独立连接的效果; Content Script 与 Service worker 又得通过 Chrome Messaging 来通信。
其次是 wallet-standard 的自动检测钱包适配器的机制实现。本质上就是 DApp 引入包含 wallet-standard 的包(如 suiet wallet kit),然后 wallet-standard 会开启一个特定事件监听 register-wallet listener ,wallet 们各自在页面加载后触发注册事件,注册符合 standard 的 adapter ,从而完成 DApp 对钱包的 auto-detection 。
Suiet 是我们团队第一个作品,凝结了我们对 Web3 的期望和激情。Team Work 的过程中我不仅是技术上得到提升,和不同领域的伙伴协作也是拓宽了我的眼界。币圈里做技术的人良莠不齐,很多基建也是不太可靠,开发体验远不如 web2 。但反过来想,这正是我们年轻工程师的机会呀,把 web2 里锤炼过的技术,再注入对 web3 的热情,Build here a better world 。
投入度:★★★★★
产出度:★★★★★
影响力:★★★★★
Github 仓库:https://github.com/suiet/wallet-kit
Wallet Kit 是我们做钱包的副产物,初衷是抢占与 dapp 合作的机会,通过 all in one 的钱包连接管理套件助力铺开我们钱包。这块由团队其他两个小伙伴完成初版的搭建,那会儿文档不太完善,可配置性也不尽人意,接入效果并不好。在 wallet-standard 之后,因我比较熟悉其整体逻辑,我开始着手重构 wallet kit ,主要围绕条件判断逻辑冗杂与可配置性这两块做优化。
造成第一点条件判断冗余的背景是:钱包适配器们对 standard 里 features 功能的实现不尽相同,甚至是缺失的。于是我抽象出一个通用适配器接口和实现类,底层基于 wallet-standard 约定的函数调用方式+自定义错误处理将异化逻辑包裹起来,这样做能够保证暴露给用户的函数签名是一致的,优化 DApp 开发者的体验。
第二点可配置性,作为 React 插件包,我们既提供了 Hooks 又提供了 UI 组件(按钮、弹窗),这对于开发能力较弱的团队来说是很方便的开箱即用,但是,对于大一点的团队,他们对 UI 的定制要求很高,甚至是只用我们的 Hooks 逻辑部分,UI 用自己的。
所以,我首先针对暴露给开发者的 Context 上下文进行了重设计,把钱包项的配置列表以及从浏览器中自动检测到的钱包项都提供出来,有助于开发者们构建自己的钱包选择器 UI 。其次,我支持了钱包预设选项的传入,让开发者能自己决定要展示的预设钱包列表和排序。
在重构的过程中,我学到一个很重要的经验,那就是「向下兼容」!做任何破坏性的更新,一定给已经在用的开发者一个接口的平稳过渡的时间,否则开发者一更新你的包,发现原来的函数改掉了或者直接没有了,项目因升级而运行失败是很糟糕的体验,更何况币圈的开发者能力有得真的弱到让人大跌眼镜(比如文档写的清清楚楚但是还是跑来私戳你要怎么做)。正确的做法应该是:如果可以做到只加参数而不影响旧的功能,那就直接改;否则,将旧的接口标注为 deprecated ,并行启用新的函数接口,并且写好 migration 迁移文档,设定合理的弃用时间节点并告知开发者们。
最后我还把我们的文档给翻新了,用更有趣的方式来介绍用法。我发现我对 emoji 风格的文字叙述还挺在行的哈哈。
Anyway, 这是我第一个有项目在用的开源项目:Github 20+ repo 的引用,以及 npm 周峰值 800+的下载量,完全超出了我今年定下的要为开源社区贡献能力的目标~好有成就感,哈哈!
投入度:★★★☆☆
产出度:★★★★☆
影响力:★★★★☆
Website: https://let.sh/
Let.sh 是我和 lzb 第一个合作的项目,是一个 all-in-one 的开发部署平台。支持如 static files 和 web 服务的一键命令行部署(类似 vercel ),并且支持如本地内网穿透、部署后的 metrics 检测等 features ,是比较适合个人开发者的开发工具。
最初是因为想直接集成 Arweave——做 Web3 永久存储的一条区块链, 打他们的 hackerthon 来入圈。于是我们在 let.sh 原有的逻辑上增加了静态文件部署至 Arweave 链,实现所谓真正的 DApp ( Decentralized App 去中心化应用)。但是实际并不好,1 是每次部署都要扣 gas ,2 是部署和访问都很慢,比不上 web2 体验,主要受限于 ar 链的出块共识机制以及通过 ipfs 做路由寻找 peers 的速度。
另外还增加了文件树与预览的新特性,树组件真的是前端做页面少数要用到算法的地方了 2333 。
除了搭建系统之外,还做了一些跨领域的尝试:
这是一个我挺喜欢的产品,lzb 这种本想着做给自己用结果发现可以发展成 side project 的技术热情,我挺佩服的,也要向他学习呀。
投入度:★★★☆☆
产出度:★★☆☆☆
影响力:★☆☆☆☆
入学研究生前后,在专业方面重新做回学生,静心打基础:
2022 在写作上是有突破的!开启了个人公众号,学着技术偶像Airing 的 Weekly 周刊,也开始写周刊,并且写出了一篇爆款文章"暂别啦!鹅厂&TME",分享了自己如何在大厂工作和出国留学中做抉择的心理历程,4700+阅读还有 184 点赞,只发了一条在自己朋友圈,完全就是自然增长哦(比如朋友转给他们的朋友看)。非常意外触动到许多和我一样被互联网卷得不舒服的朋友们,他们纷纷来私戳我,说看了我的文字很受触动,佩服我做了他们还不敢做的事,也收到了很多祝福。我才体会到,原来文字真的能传达勇气和力量呀! 2023 ,也请继续保持写作,用知识和故事影响更多人吧!
细数 2022 ,我做了很多新尝试,建立了自己的 crypto 团队,做出了一些不可思议的成就。技术的增长还是主要在前端这块,但是今年已经踏入了 web3 ,增加了对区块链的理解,并且还做了许多跨领域尝试,希望在 2023 能够保持对跨领域的热情,并且把根在区块链和后端扎的再深一点,逐渐转型为后端工程师,理由嘛,当然是不满足于只跟浏览器打交道咯。
2023 还有一个很大的愿望,那就是通过自己的知识去变现,为他人提供价值,很大胆的想法,希望能做到!
最后希望自己在新的一年,能够更聚焦少数领域,成为某个领域的专家,再努力自律一点,把影响力再扩大一点,把收入再增加一点,再爱生活一点!
PS:最后贴一下我的公众号,顺手关注一波吧!
这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。
V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。
V2EX is a community of developers, designers and creative people.