首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Testnet以太池项目

Testnet以太池项目
EN

Ethereum用户
提问于 2022-01-02 14:14:39
回答 1查看 42关注 0票数 1

这是我第一次在Ethereum堆栈交换上发表文章。我在过去六年左右一直是一名软件工程师,最近开始朝着区块链开发的方向发展。作为一名开发人员,我强烈认为最好的学习方法就是动手,所以我决定做一些可靠的项目。我非常喜欢这些项目来帮助区块链社区,因为我对Web3.0非常有热情,我的第一个项目是一个测试网络ETH池(这个想法是在我注意到许多水龙头已经干涸或滴下少量的测试网ETH时产生的,这使得在测试项目时很难支付煤气费)。我把它作为S3发行版上传到这个领域的https://testnet-ethpool.xyz/上,任何有过量测试网的C0(在任何测试网上)都可以捐赠其中的一部分(每个周期的退出限制为1个ETH,一个周期应该是1周)。

合同的回购是这里

正如我前面提到的,我对区块链开发世界非常陌生,并且可能仍然有许多源于我作为一个普通的web开发人员的坏习惯,所以我将非常高兴地获得一些关于我可以做得更好的技巧和建议。如果这份合同效率低下,性价比很低,或者如果它容易受到攻击,我也非常希望知道。

非常感谢,并希望成为这个社区的一员,新年快乐!

EN

回答 1

Ethereum用户

回答已采纳

发布于 2022-01-02 15:26:43

我看过你的合同,这里有一些反馈:

  1. 创建一个地址数组并对其进行迭代被认为是一种可靠的反模式。这种方法将无法工作,因为这个地址数组可能会变得非常大,然后当您重新设置这个时代时,它不仅会花费大量的气体,而且还可能达到块气体的限制,然后这个函数将始终恢复,您将无法重置这个时代。
    • 一种解决方案不是保存address[] public addrList,而是使其成为一个双数组,其中第一个索引是划时代的ID,第二个索引是地址(与现在的地址相同)。然后,在重置时代时,将一个新的空address[] public addrList插入到双数组中。并且始终考虑双数组的最后一个元素是当前的addrList。这样,您就可以有效地忽略前面的值,而不必对它们进行迭代。
    • 另一个可能更好的解决方案是为每个地址保存它最后一次声明时的地址,然后当它试图再次声明时,只在resetInterval时间过去时才让它声明。这样,您也不需要手动重置时代。

  2. 当使用比uint256小的uints时,它实际上可能会花费更多的气体,有时是因为固体必须将它们投到uint256上。你可以阅读有关可变包装的资料。

祝好运

票数 0
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/117812

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档