如何对uint值求和​在tokenRewards阵列中



我想从函数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;
}

最新更新