Soldity:通过地址映射进行迭代

che*_*o_c 4 blockchain ethereum solidity smartcontracts ether

我正在寻找一种方法来迭代 Solidity 中的映射。例如我有这个映射:

mapping (address => uint) private shares;

我想在一个函数中迭代所有地址,并根据它们的份额向它们发送以太币。

就像是:

function giveOutEth() onlyOwner returns (bool success){
for(uint i=0; i < shares.length ; i++){
//get the address and send a value
}
Run Code Online (Sandbox Code Playgroud)

}

我怎样才能实现这个目标?

谢谢

che*_*o_c 6

我收到了 drlecks 的答复:

contract  Holders{

uint _totalHolders; // you should initialize this to 0 in the constructor
mapping (uint=> address ) private holders;
mapping (address => uint) private shares;

function GetShares(uint shares) public {
    ... 
    holders[_totalHolders] = msg.sender;
    shares[msg.sender] = shares; 
    _totalHolders++;
    ...
} 

function PayOut() public {
    ...
    uint shares;
    for(uint i = 0 ; i<_totalHolders; i++) {
        shares = shares[holders[i]];
        ...
    }
    ... 
} 
Run Code Online (Sandbox Code Playgroud)

}

但请记住,它会消耗gas,也许利益相关者提取他们的ETH并自己支付gas会更好。