我正在学习“稳固”/“以太”,我遇到了这样的情况:
我有一个映射( address =>单元),它跟踪每个地址支付我的合同的金额,并且在某个时候,我必须计算一个用户贡献了多少%的总池。(例如,如果总池为100 ether,用户贡献了10 ether,则他贡献了总池的10% )。
为了做到这一点,我需要访问整个池。我的第一反应是拥有一个变量totalPool,它将跟踪总值,因此每次一个地址支付合同时,totalPool += msg.value;然而,在学习EVM时,我一直在阅读在存储上操作是多么昂贵。
我的问题是,在每次一个地址支付合约时,有甚麽比煤气更便宜,可以记录总池,并在记忆体上运作,又或每次我需要计算比率供款时,便计算总池?
发布于 2022-01-20 21:52:03
根据我对您的用例的了解,除非您有一种简单的计算总池的方法,否则您的第一本能可能是最简单和最好的解决方案。您必须记住,在坚实的环境中,不可能循环遍历映射的元素来总结它们。因此,除非可以使用存储的其他变量来计算池的大小,否则总池变量很可能是跟踪池大小的最佳方法。
我强烈建议您测试尽可能多的实现。ethers.js和web3.js库都有允许您测试执行事务需要多少气体的函数。
https://stackoverflow.com/questions/70789560
复制相似问题