planD

發布於 2022-10-23到 Mirror 閱讀

Aptos 开发小记

在完成 Meson 跨链桥在 Aptos 的开发后,Meson 智能合约核心工程师 planD 将其作为 Aptos 开发者的感受记录了下来,希望可以对对 Aptos 感兴趣的技术背景用户带来一些参考价值。

笔者是 Meson 团队的智能合约核心工程师,过去几个月一直在高强度的开发 Aptos 合约。最近两天,终于赶在 Aptos 主网上线之际,完成了 Meson 协议在 Aptos 上的开发,这个过程中还是有挺多感受的。社区的好友和同事就鼓励我把这些经历写下来,希望可以对其他对 Aptos 感兴趣的人,尤其是技术背景的,带来一些参考价值。

我之前是 Web 2 程序员,技术栈偏向机器学习/Python/C++。上一轮牛市 2021 年初进入的 Web3 ,不过在牛市结尾的时候才开始静下心来学合约开发,跟着教程学 Solidity,做过几个 demo 合约(虽然都没上线)。当时有个契机,就是封城被隔离在家,什么也做不了,一个多星期的时间没干别的,就仔细读了几篇一线项目的审计报告。读完以后,感觉自己对合约的理解直接升华了,就跟朋友说,以前看合约代码,觉得这不就是小学数学么?但是后来再看,看到的是一个个大坑,以及项目方小心翼翼在坑上面搭好的桥。其实这个过程在后续做 Aptos 合约上帮助非常大,毕竟很多安全思路是相通的。想想如果当时没有封城,我可能还在区块链的黑暗森林里裸奔。

今年七月,看到有文章介绍几个新 L1 公链后,就决定开始系统学习 Rust / Move。这个过程就艰辛一些。当然,也可以调侃的说,学习 Aptos 只需要三步:学习 Rust(也可以跳过)、学习 Move、学习 Aptos,过程和 “把大象放进冰箱” 一样简单。我是从学 Rust 的第一天就开始头大,每天抱着 Rust book 反复看。到 Move/Aptos 问题就更多了,虽然 Aptos 基于 Move,Move 基于 Rust,但这三者还是有很大不同,Aptos 上有很多利用 Move 开发出的新框架,这些都得了解。而且,Rust -> Move -> Aptos 这个过程,文档和参考资料指数级递减,我在八月刚开始看 Aptos 的时候更是如此,文档和教程可以说是少的可怜,万幸的是加入了一些开发者社区,里面的大佬帮我解决了挺多问题。当时还有一个很坑但同时也很搞笑的是,Move 这个词太常见了,在 Google 上搜 Move 语言相关的问题,什么都搜不出来,反而经常搜出来 How to move to Canada。

Move 语言的区块链状态图

大概到九月的时候,就开始正式上手写 Meson 合约了,先把协议的框架搭出来,然后逐步小心翼翼的往里面添加功能:给合约里转入 token、锁仓 token、设置 token 解锁条件、验证解锁、转出 token 给用户。折腾了一个多星期,终于把这个流程跑通了,然后兴奋的上了 Devnet,准备用 Pontem 钱包测试。

然后,Disaster 来了!其实了解 Aptos 的人应该已经发现了,那就是:Aptos 的 token,根本不是 ERC20 对应的 fungible token,而是 NFT!可以说,我折腾了一个星期,写了个 NFT 交易合约……但这东西根本不是我想要的。想想过去一周的熬夜奋战和掉的头发,瞬间觉得 NFT 卖那么贵也是有道理的,只可惜这些代码我是用不上了,所以欢迎想在 Aptos 上做 NFT 的联系我哈哈哈。

开发者社区的朋友如是说到

Aptos 上对应 ERC20 的其实是 coin。当时 Aptos 的文档还没现在这么完善,我下意识的就开始集成 token,还奇怪为什么一个普通代币一定需要 description 这个属性…… coin 和 token 的集成方式也有挺大不同,后者用 id 就可以定位,前者则要用 generic type,所以大部分代码都要重构。不过有了之前的经验,Aptos 代码也熟练了很多。重新写好后,也顺利的完成了前端集成。虽然只是个 Minimal Viable Contract,但是基本逻辑雏形已经有了,团队里也开始有前端工程师和其他智能合约开发者,一起参与进来协作。当时第一次看到了即将上线的希望,可以说充满了期待和成就感。

接下来我主要的任务就是解决 Aptos 特性带来的疑难杂症,其中最主要的就是 Aptos 用的签名算法 ED25519 和以太坊签名算法 ECDSA 是不同的。我要实现的协议基于 HTLC / Atomic Swap 机制,需要保证一个签名可以同时在两边进行验证。这个问题最终也是解决了,不过主要是技术问题,如果大家感兴趣,可以之后再单写一篇文章来讲这里面的技术细节。

Aptos 主网上线前的最后一个月,感觉项目方之前的努力,也开始更多的被大家看到。这一个月里,Aptos 在极速更新各种功能:命令行客户端的安装,从几个小时的复杂操作,优化到几行简单的指令;中间隔了一周没看浏览器,然后界面就变得好看了很多。不过需要继续补充的点也不少:文档虽然更新的很快,但还有非常多关键的东西需要补充。其实 Aptos 源码里提供了很多便捷的特性,但这些都没有写在文档里,于是就需要花大量的时间去读 Aptos 合约框架的源码,错过了就没有机会在别的地方学到,开发过程中很多坑也是这样产生的。

再说说主网上线:第一天宣布上线的时候感觉像是被催着上线的一样,没什么预兆,也没公布Tokenomic,只说了第二天要上几个大交易所,此时所有用户手里都没有 APT,免不了一片骂声。不过这阵骂声随着第二天公布的 Airdrop 完全消失了,然后又是,几个在测试网刷到了空投的朋友们,开始把焦虑传给各个群聊。

作为一个开发者最大的感受就是,大家知道它是 “高性能公链”,但是完全不知道更具体的了,也不太知道 Move 语言和 Solidity 相比有哪些新的特性,资产安全性做了哪些改善。但其实,这些才是公链长期发展的核心。没发空投的时候很多人宣传 TPS 最高是 4,其实想想也能知道,Web3 的新公链做到这个水平就不好意思宣传了;而 TPS 当时是 4 的原因是,大家都没有 APT,所以主网上没有交易而已。测试网的 TPS 就远超这个数。至于是否真的更安全,还是需要时间来考量的,黑客出现之前大家永远不知道最严重的 bug 在哪里。不过我还是从 Aptos 的技术上看到了不少比 EVM 公链更好的安全性设计,具体也可以看看 Jolestar 老师的 twitter:

https://twitter.com/jolestar/status/1583034513122156544

最后想说,过去几个月,成功在 Aptos 上完成了一个完善的智能合约,并且即将上线主网,内心还是相当有成就感的。感谢这个过程中所有提供过帮助和宝贵建议的朋友们,虽然大部分从未谋面,我也只知道他们的头像多值钱,不过相信有这么一群人,Aptos 的发展还是未来可期的。拭目以待吧!