在solidity中,一个地址[]内可以存储多少个地址

1 ethereum solidity smartcontracts

我正在构建一个合约,要求新用户发送 0.1 以太币才能进入投资回合。

我已经为此苦苦挣扎了一段时间,我不知道如何在合约中存储新投资者的地址,以便稍后可以使用“地址索引”。

据我所知,不建议使用动态数组,因为它们很容易使用“太多gas”并导致合约永远陷入困境。

  • 我如何知道address[]内实际可以存储多少个地址?

我认为可以完成一个简单的测试,但我不确定如何做。

这是我正在使用的代码。它基于 Rob Hitchens 撰写的精彩文章

address[] userIndex;    // New user address gets stored in dynamic array

function invest() public payable {  

    require(msg.value == 0.1 ether);    // checks if new investor sent 0.1 ether
    userIndex.push(msg.sender);        // adds new user to userIndex  

}
Run Code Online (Sandbox Code Playgroud)

use*_*559 6

动态数组中可以存储的项目数量没有限制。(从技术上讲,限制为 2^256,但这与已知宇宙中的原子数量级相同。)

数组中的项目数量根本不会影响气体使用量。会消耗大量gas的就是枚举一个大数组。(在这种情况下,重要的是您通过运行长循环来执行大量代码。)