Я хочу получить сумму вознаграждений, которые я заработал на каждый токен, который у меня есть, от этой функции 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;
}
Спасибо за Ваш ответ. Я просто хотел суммировать значения в массиве, и мне это удалось благодаря вашему коду. Я добавил эту операцию в цикл for и получил общий результат;
result += tokenRewards[i];