# Aptos 开发小记

By [planD](https://paragraph.com/@bendanwang) · 2022-10-24

---

笔者是 [Meson](https://meson.fi/) 团队的智能合约核心工程师，过去几个月一直在高强度的开发 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 语言的区块链状态图](https://storage.googleapis.com/papyrus_images/17753ff5e9f4e8f302ba74c296a0826ddd81b3537fb2b3755d38ae1ff295485a.png)

Move 语言的区块链状态图

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

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

![开发者社区的朋友如是说到](https://storage.googleapis.com/papyrus_images/a0659dc7c91e4c5a80500a8f7acd5b442f712b2d450841ebdd8b89a0ec31222c.jpg)

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

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](https://twitter.com/jolestar/status/1583034513122156544)

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

---

*Originally published on [planD](https://paragraph.com/@bendanwang/aptos)*
