|
9 | 9 |
|
10 | 10 | import { HttpClient, HttpClientResponse } from "@effect/platform"
|
11 | 11 | import { EU_STAKING_HUB } from "@unionlabs/sdk/Constants"
|
12 |
| -import { Array, BigDecimal, Data, Effect, pipe, Schema } from "effect" |
| 12 | +import { Array, BigDecimal, Data, Effect, Option as O, pipe, Schema } from "effect" |
13 | 13 |
|
14 | 14 | const REST_BASE_URL = "https://rest.union.build"
|
15 | 15 |
|
@@ -309,19 +309,23 @@ export const calculateIncentive: Effect.Effect<
|
309 | 309 | const incentiveAfterTax = BigDecimal.subtract(incentiveNominal, communityTaxAmount)
|
310 | 310 |
|
311 | 311 | // Calculate weighted average validator commission
|
312 |
| - const validatorMap = new Map(validatorsData.validators.map(v => [v.operator_address, v])) |
313 |
| - |
314 | 312 | const validDelegations = pipe(
|
315 | 313 | delegationsData.delegation_responses,
|
316 |
| - Array.filter(delegation => { |
317 |
| - const validator = validatorMap.get(delegation.delegation.validator_address) |
318 |
| - return Boolean(validator && !validator.jailed && validator.status === "BOND_STATUS_BONDED") |
| 314 | + Array.filterMap(delegation => { |
| 315 | + const validator = pipe( |
| 316 | + validatorsData.validators, |
| 317 | + Array.findFirst(v => v.operator_address === delegation.delegation.validator_address), |
| 318 | + ) |
| 319 | + |
| 320 | + return pipe( |
| 321 | + validator, |
| 322 | + O.filter(v => !v.jailed && v.status === "BOND_STATUS_BONDED"), |
| 323 | + O.map(v => ({ |
| 324 | + amount: delegation.balance.amount, |
| 325 | + commission: v.commission.commission_rates.rate, |
| 326 | + })), |
| 327 | + ) |
319 | 328 | }),
|
320 |
| - Array.map(delegation => ({ |
321 |
| - amount: delegation.balance.amount, |
322 |
| - commission: |
323 |
| - validatorMap.get(delegation.delegation.validator_address)!.commission.commission_rates.rate, |
324 |
| - })), |
325 | 329 | )
|
326 | 330 |
|
327 | 331 | const { totalAmount, weightedSum } = pipe(
|
|
0 commit comments