-
Notifications
You must be signed in to change notification settings - Fork 28
Expand file tree
/
Copy pathStakingRewards.java
More file actions
45 lines (36 loc) · 1.44 KB
/
StakingRewards.java
File metadata and controls
45 lines (36 loc) · 1.44 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
package dev.andstuff.kraken.example.reward;
import static java.util.stream.Collectors.groupingBy;
import static java.util.stream.Collectors.toSet;
import java.math.BigDecimal;
import java.util.List;
import java.util.Set;
import dev.andstuff.kraken.api.endpoint.account.response.LedgerEntry;
import lombok.Getter;
/**
* Aggregates staking rewards by asset.
*/
@Getter
public class StakingRewards {
private final Set<String> assets;
private final Set<Integer> years;
private final Set<AssetRewards> assetRewards;
public StakingRewards(List<LedgerEntry> rewards) {
assets = rewards.stream().map(LedgerEntry::underlyingAsset).collect(toSet());
years = rewards.stream().map(LedgerEntry::year).collect(toSet());
assetRewards = rewards.stream()
.collect(groupingBy(LedgerEntry::underlyingAsset))
.entrySet().stream()
.map(entry -> new AssetRewards(entry.getKey(), entry.getValue()))
.collect(toSet());
}
public BigDecimal totalFiatAmount(AssetRates rates) {
return assetRewards.stream()
.map(reward -> reward.totalFiatAmount(rates))
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
public BigDecimal totalFiatAmountFor(int year, AssetRates rates) {
return assetRewards.stream()
.map(reward -> reward.fiatAmountFor(year, rates))
.reduce(BigDecimal.ZERO, BigDecimal::add);
}
}