跟随solana官网文档制作一个简单的邮件系统

solana号称最快的区块链网络,是加密货币领域发展最快的生态系统。今天跟随着官网进行了一个简单的邮件系统开发。 官网的地址为:在 Solana 上创建全栈邮件 dApp . 我们的重点不在于翻译这篇文章。我下面我介绍我跟随这个网站进行开发过程中遇到的问题已经相应的思考。 我并没有根据官网亦步亦趋的一步步进行下去。我首先就把所有的代码都从github clone下来,并在本地运行。solana的这边文章对应的示例还是很严谨的。我根据项目README后端正常的进行了编译,打包,前段代码也开启了本地开发模式。 此时,我遇到了第一个问题。dAPP的后端代码打包成功了,但是我按照文章说明进行部署的时候,一直卡在部署环节,无法部署成功。我仔细的看了一遍又一遍的文章。同时,又找到了solana-cli的文档,尝试了几种可能的参数,依旧部署失败。 在官方文档平台解决不了这个问题之后,我启用了google搜索大法。还好,经过不懈努力,我在solana github中的一个2021年issue发现了解决办法。这是一个M1 Macbook的问题。arm64架构的它导致了solana不能开启JIT编译功能。最终我通过添加–no-bpf-jit参数在开启本地测试集群式不启用JIT功能最终解决了部署问题。 solana-test-validator --no-bpf-jit 本地集群问题解决之后。我的dAPP就可以在本地进行正常的调试了。这时候官网未涉及到的第二个影响调试体验的问题就来到了。文章中部署后端代码到本地集群后,会返回一个程序ID(program ID),也就是一个公钥地址(字符串类型)。而前端代码中,公钥对象却并不是从字符串类型构建,而是通过一个u8的数组进行构建。我也是细细的读了几次文章,仍旧是未找到怎么样将程序的公钥地址转换成一个u8数组。后续,我查看了solana web3.js的接口定义,发现公钥对象也可以从字符串构建。于是,替换成一下代码生成公钥对象,dAPP可以正常登录进去进入首页。 new PublicKey('公钥地址') 后续进行调试就比较容易了。唯一还可能混淆的地方就在于邮件系统的收件人。当你向给某个其他用户写信的时候,收件人并不是你登录进去关联的solana账户,而是通过邮件系统开户时,通过program id为你的solana账户生成的一个子账户。如果你在收件人填写的是对方的solana主账户地址,那么通过前端调试日志,你将会发现错误日志,日志会告诉你这个账户不存在一个期望的program Id. 跟着官网文章做完之后,又重新研究了一下后端的rust代码逻辑。文章中其实没怎么细说具体逻辑,也许是本身逻辑也比较简单。就这个示例而已,dAPP所处理的事情就是为solana主账户在solana网络中重新开启一个子账户。收信及发信行为其实就是将相应的邮件内容在序列化之后,直接存储在子账户的数据区域。在任何需要的时候,可根据账户ID轻松的获取出来。 随着而来的思考也就来了。我大略的翻了下官网的文章,solana的数据区域最大也就只能存储10Mb的数据。当某个账户的邮件内容超过了10Mb时,会发生什么呢?

2022-03-13 22:18 · 1 min · 江波·林沂