我想从函数getCurrentTotalStakeEarned中获得每个代币的奖励数量之和。
uint256 public tokensPerBlock;
mapping(address => uint256) public _balances;
mapping(address => mapping(uint256 => uint256)) public _ownedTokens;
function getCurrentTotalStakeEarned(address targetAddress) external view returns (uint256[] memory, uint256[] memory) {
uint256 [] memory tokenIds = new uint256[](_balances[targetAddress]);
uint256 [] memory tokenRewards = new uint256[](_balances[targetAddress]);
for(uint256 i = 0; i < _balances[targetAddress]; i++){
tokenIds[i] = _ownedTokens[targetAddress][i];
tokenRewards[i] = _getTimeStaked(tokenIds[i]++).mul(tokensPerBlock);
}
return (tokenIds, tokenRewards);
}
function _getTimeStaked(uint256 tokenId) internal view returns (uint256) {
if (receipt[tokenId].stakedFromBlock == 0) {
return 0;
}
return block.number.sub(receipt[tokenId].stakedFromBlock);
}
有了数组,我可以看到每个代币给我多少钱。但我想把它们加起来。
图像我只想要价值观我用红色标记要求和
我们想要什么?
每个地址的奖励总值。
我们有什么?
从getCurrentTotalStakeEarned
返回的每个地址的奖励数组
我们可以简单地迭代数组并求和值。
function reduce(uint256[] arr) pure internal returns (uint256 result){
for (uint256 i = 0; i < arr.length; i++) {
result += arr[i];
}
return;
}