planD

Posted on Oct 24, 2022Read on Mirror.xyz

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 的发展还是未来可期的。拭目以待吧!