|
8 | 8 | } from "../../generated/HorizonStaking/HorizonStaking" |
9 | 9 | import { getOrCreateGraphNetwork, saveGraphNetwork } from "../entities/graphNetwork" |
10 | 10 | import { getOrCreateServiceProvider, saveServiceProvider } from "../entities/serviceProvider" |
| 11 | +import { getOrCreateDataService, saveDataService } from "../entities/dataService" |
11 | 12 | import { getOrCreateDelegationPool, saveDelegationPool } from "../entities/delegationPool" |
12 | 13 | import { BIGINT_ZERO } from "../common/constants" |
13 | 14 |
|
@@ -35,6 +36,15 @@ export function handleTokensDelegated(event: TokensDelegated): void { |
35 | 36 | pool.entity.shares = pool.entity.shares.plus(shares) |
36 | 37 | saveDelegationPool(pool.entity, event.block) |
37 | 38 |
|
| 39 | + // Update DataService |
| 40 | + let dataService = getOrCreateDataService(verifierBytes, event.block.number, event.block.timestamp) |
| 41 | + assert(!dataService.isNew, "Data service does not exist.") |
| 42 | + dataService.entity.tokensDelegated = dataService.entity.tokensDelegated.plus(tokens) |
| 43 | + if (pool.isNew) { |
| 44 | + dataService.entity.countDelegationPools += 1 |
| 45 | + } |
| 46 | + saveDataService(dataService.entity, event.block) |
| 47 | + |
38 | 48 | // Update ServiceProvider |
39 | 49 | let serviceProvider = getOrCreateServiceProvider(serviceProviderBytes, event.block.number, event.block.timestamp) |
40 | 50 | assert(!serviceProvider.isNew, "Service provider does not exist.") |
@@ -76,6 +86,12 @@ export function handleTokensUndelegated(event: TokensUndelegated): void { |
76 | 86 | pool.entity.tokensThawing = pool.entity.tokensThawing.plus(tokens) |
77 | 87 | saveDelegationPool(pool.entity, event.block) |
78 | 88 |
|
| 89 | + // Update DataService |
| 90 | + let dataService = getOrCreateDataService(verifierBytes, event.block.number, event.block.timestamp) |
| 91 | + assert(!dataService.isNew, "Data service does not exist.") |
| 92 | + dataService.entity.tokensThawingFromDelegationPools = dataService.entity.tokensThawingFromDelegationPools.plus(tokens) |
| 93 | + saveDataService(dataService.entity, event.block) |
| 94 | + |
79 | 95 | // Update ServiceProvider |
80 | 96 | let serviceProvider = getOrCreateServiceProvider(serviceProviderBytes, event.block.number, event.block.timestamp) |
81 | 97 | assert(!serviceProvider.isNew, "Service provider does not exist.") |
@@ -114,6 +130,19 @@ export function handleDelegatedTokensWithdrawn(event: DelegatedTokensWithdrawn): |
114 | 130 | pool.entity.tokensThawing = pool.entity.tokensThawing.minus(tokens) |
115 | 131 | saveDelegationPool(pool.entity, event.block) |
116 | 132 |
|
| 133 | + // Update DataService |
| 134 | + let dataService = getOrCreateDataService(verifierBytes, event.block.number, event.block.timestamp) |
| 135 | + assert(!dataService.isNew, "Data service does not exist.") |
| 136 | + assert(dataService.entity.tokensThawingFromDelegationPools >= tokens, "Withdraw tokens exceed data service tokens thawing.") |
| 137 | + dataService.entity.tokensThawingFromDelegationPools = dataService.entity.tokensThawingFromDelegationPools.minus(tokens) |
| 138 | + assert(dataService.entity.tokensDelegated >= tokens, "Withdraw tokens exceed data service tokens delegated.") |
| 139 | + dataService.entity.tokensDelegated = dataService.entity.tokensDelegated.minus(tokens) |
| 140 | + if (pool.entity.tokens.equals(BIGINT_ZERO)) { |
| 141 | + assert(dataService.entity.countDelegationPools > 0, "Data service delegation pool count is zero.") |
| 142 | + dataService.entity.countDelegationPools -= 1 |
| 143 | + } |
| 144 | + saveDataService(dataService.entity, event.block) |
| 145 | + |
117 | 146 | // Update ServiceProvider |
118 | 147 | let serviceProvider = getOrCreateServiceProvider(serviceProviderBytes, event.block.number, event.block.timestamp) |
119 | 148 | assert(!serviceProvider.isNew, "Service provider does not exist.") |
@@ -160,6 +189,16 @@ export function handleDelegationSlashed(event: DelegationSlashed): void { |
160 | 189 | pool.entity.tokens = pool.entity.tokens.minus(tokens) |
161 | 190 | saveDelegationPool(pool.entity, event.block) |
162 | 191 |
|
| 192 | + // Update DataService |
| 193 | + let dataService = getOrCreateDataService(verifierBytes, event.block.number, event.block.timestamp) |
| 194 | + assert(!dataService.isNew, "Data service does not exist.") |
| 195 | + assert(dataService.entity.tokensDelegated >= tokens, "Slash tokens exceed data service tokens delegated.") |
| 196 | + dataService.entity.tokensDelegated = dataService.entity.tokensDelegated.minus(tokens) |
| 197 | + dataService.entity.countDelegationPoolSlashEvents += 1 |
| 198 | + dataService.entity.tokensSlashed = dataService.entity.tokensSlashed.plus(tokens) |
| 199 | + dataService.entity.tokensSlashedFromDelegationPools = dataService.entity.tokensSlashedFromDelegationPools.plus(tokens) |
| 200 | + saveDataService(dataService.entity, event.block) |
| 201 | + |
163 | 202 | // Update ServiceProvider |
164 | 203 | let serviceProvider = getOrCreateServiceProvider(serviceProviderBytes, event.block.number, event.block.timestamp) |
165 | 204 | assert(!serviceProvider.isNew, "Service provider does not exist.") |
@@ -203,6 +242,12 @@ export function handleTokensToDelegationPoolAdded(event: TokensToDelegationPoolA |
203 | 242 | pool.entity.tokens = pool.entity.tokens.plus(tokens) |
204 | 243 | saveDelegationPool(pool.entity, event.block) |
205 | 244 |
|
| 245 | + // Update DataService |
| 246 | + let dataService = getOrCreateDataService(verifierBytes, event.block.number, event.block.timestamp) |
| 247 | + assert(!dataService.isNew, "Data service does not exist.") |
| 248 | + dataService.entity.tokensDelegated = dataService.entity.tokensDelegated.plus(tokens) |
| 249 | + saveDataService(dataService.entity, event.block) |
| 250 | + |
206 | 251 | // Update ServiceProvider |
207 | 252 | let serviceProvider = getOrCreateServiceProvider(serviceProviderBytes, event.block.number, event.block.timestamp) |
208 | 253 | assert(!serviceProvider.isNew, "Service provider does not exist.") |
|
0 commit comments