我试图存储一个uint8阵列,但它的气体效率不高。这是我目前存储东西的解决方案:
uint8[5] public VALUES = [10, 11, 12, 13, 14];
问题是,我将有大约40个这样的VALUE数组,如果我在Remix中测试它,我甚至不能开始这个契约(我等待初始化的时间已经几分钟了,它没有发生,所以我假设这是非常低效率的)。
我计划的下一个解决方案是将值存储在一个字符串中:
string public VALUES = "1011121314";
然后通过获取数字的索引i和i+1来检索数字,并使用parseInt(string)获取数字。但我不太确定这样做的效率。
因此,既然我听说过组装在坚实性范围内是非常有效的,我想知道是否有一种方法可以将多个uint8值存储在更大的数据格式中,比如byte32?我目前的用例是5个uint8值,所以可能只需要byte5?此外,我将如何检索这些值?
发布于 2018-02-05 03:26:43
将5个uint8值组织在一个结构中。在编译契约时,确保打开了优化。由于存储槽是32个字节,编译器将自动将您的uint8s压缩到存储中,以达到最大的气体效率。
https://ethereum.stackexchange.com/questions/38554
复制相似问题