对于创建基于EOS的DApp的所有人来说,RAM优化是主要关注点。

我们ITAM网络也在努力寻找解决方案。

这篇文章将介绍如何优化RAM使用情况。

什么时候能用上RAM?

使用RAM主要有两个时候。

(虽然还有更多)

1、上传智能合约时

当您编写DApp并首次发布它时,它将消耗大约10倍于您的二进制文件的RAM。

这取决于智能合约的制作过程以及设计方式。

因此,可以说RAM的使用取决于开发人员的能力。

但是,因为它是在智能合约部署时消耗的,所以这不是一个大问题。

2、使用智能合约TABLE保存数据时

使用DApp时,需要执行保存和加载数据的操作。

因此,EOS提供了TABLE,我相信大多数智能合约都在使用它。

但是,这个TABLE占用的RAM会很多。

每次创建TABLE或注册数据时都会使用RAM。

此外,最大的问题是,如果不删除TABLE或数据,则无法恢复被占用的RAM,它将继续被占用。

如何更有效地使用RAM?

一个简单的方法是让精明的开发人员精心设计和编码以节省RAM。

但是,这不是使用TABLE的基本解决方案。

然后想一想,可能会认为“将最少量的数据存储并保存到TABLE以上”可能是更好的选择,但这也意味着使用的DApp越多,RAM的使用会跟着增加。

那我们该怎么办?

我们需要放弃使用TABLE吗?

最小化的RAM使用方法

在ITAM网络开发时,我们不得不查看EOS的BLOCK数据。

何不让我们来看看EOS的BLOCK数据?

(这是第7813616个区块数据)

需要密切关注的是交易部分,在交易中,我们来看看trx。

我们差不多完成了。

再来看看Action部分。

如果查看上述数据,您可以看到eosio。

token智能合约中使用的Transfer操作的历史记录。

这篇文章是关于如何最小化RAM使用率的,但为什么我们要看区块数据?

请允许我问你一个问题。

区块数据使用RAM的方式与使用TABLE的方式相同吗?

区块数据不使用RAM;数据在BP中运行一个完整的节点。

你们中的一些人可能已经得到了线索,但是如果你再看一下,我们可以得出结论,如果我们使用区块中的数据而不是使用TABLE,我们可以最小化RAM的使用。

那我们怎么做呢?

如果你看一下区块数据,答案是显而易见的;这是Action数据。

Action是指执行智能合约特定操作的事务中的操作数据。

每个智能合约的执行都以上述形式存储在Block上。

这意味着如果我们不使用TABLE,但在执行智能合约的操作后使用区块的剩余数据,我们可以最小化TABLE的RAM使用率。

我举一个例子

在ITAMNetwork,我们需要注册游戏中获得的项目,以此为例。

使用itamnetwork1帐户发布智能合约。

在智能合约中有getAction,假设我们需要itamKey,itemName和onwer的参数值。

执行itamnetwork1的get动作,如果我们在Block上查看它,我们会看到以下内容。

(假设获得该项目的帐户名称是itamnetwork2)

如您所见,我们可以在区块信息中看到您要保存为Action数据的所有数据。

如果你像这样使用区块的数据,我相信它将是一种最小化TABLE使用RAM量的方法。

需要的准备工作是什么?

这很明显,您需要能够使用区块数据。

如果将EOS块数据存储在数据库中,则可以根据该数据库轻松搜索和处理。

因此,我们需要的是每次在维护完整节点时检索Block数据的方法,或者使用最近在EOS上发布的demux-js作为数据库中的特定Action以作良好的替代存储。

需要考虑的事情

使用区块数据时必须考虑一些事项。

1。

EOS完整节点/demux-js

要利用块数据,必须有一种维护完整节点或使用demux-js的方法。

我们需要考虑这是否是一种有效的方法。

2。

智能合约设计

因为这不是使用TABLE的常用方法,所以智能合约的设计至关重要。

3。

商业模式

由于所有数据都在区块上公开,因此您需要设计相应的业务模型。

结语

总而言之,我们继续使用Action数据,该数据在区块上运行,同时避免使用大量RAM的TABLE。

请记住,这只是一种替代方法,并不是唯一正确的答案。

应用此方法的结果反馈很重要。