Skip to content

Commit 531a8b1

Browse files
authored
Implement operator snapshot (#34)
* Implement operator snapshot * Rename operator snapshot to operator allocation * Fix allocation ID
1 parent c9c71b3 commit 531a8b1

File tree

7 files changed

+74
-26
lines changed

7 files changed

+74
-26
lines changed

packages/constants/index.template.ts

+1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@ import { Address, BigInt, Bytes } from "@graphprotocol/graph-ts";
22

33
export let ADDRESS_ZERO = Address.zero();
44
export let BIG_INT_ZERO = BigInt.zero();
5+
export let BIG_INT_ONE = BigInt.fromString("1");
56
export let BIG_INT_1E18 = BigInt.fromString("1000000000000000000");
67
export let BIG_INT_1E6 = BigInt.fromString("1000000");
78
export let BYTES_ZERO = Bytes.empty();

subgraphs/stakewise/schema.graphql

+20
Original file line numberDiff line numberDiff line change
@@ -82,6 +82,20 @@ type DepositActivation @entity {
8282
amount: BigInt!
8383
}
8484

85+
"""
86+
StakeWise Operator keys allocation
87+
"""
88+
type OperatorAllocation @entity {
89+
"Set to `operator.id-operator.allocationsCount`"
90+
id: ID!
91+
92+
"The operator"
93+
operator: Operator!
94+
95+
"The allocation's total number of staked validators"
96+
validatorsCount: BigInt!
97+
}
98+
8599
"""
86100
StakeWise Operator
87101
"""
@@ -128,8 +142,14 @@ type Operator @entity {
128142
"The last update timestamp"
129143
updatedAtTimestamp: BigInt!
130144

145+
"The total number of validator keys allocations"
146+
allocationsCount: BigInt!
147+
131148
"The operator validators"
132149
validators: [Validator!]! @derivedFrom(field: "operator")
150+
151+
"The operator keys allocations"
152+
allocations: [OperatorAllocation!]! @derivedFrom(field: "operator")
133153
}
134154

135155
"""

subgraphs/stakewise/src/entities/poolValidators.ts

+22-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,10 @@
11
import { Address, BigInt, Bytes } from "@graphprotocol/graph-ts";
22
import { BIG_INT_ZERO, BYTES_ZERO } from "const";
3-
import { Operator, Validator } from "../../generated/schema";
3+
import {
4+
Operator,
5+
Validator,
6+
OperatorAllocation,
7+
} from "../../generated/schema";
48
import {
59
calculateDistributorPoints,
610
createOrLoadMerkleDistributor,
@@ -24,6 +28,7 @@ export function createOrLoadOperator(
2428
operator.committed = false;
2529
operator.locked = false;
2630
operator.validatorsCount = BIG_INT_ZERO;
31+
operator.allocationsCount = BIG_INT_ZERO;
2732
operator.depositDataIndex = BIG_INT_ZERO;
2833
operator.revenueShare = BIG_INT_ZERO;
2934
operator.distributorPoints = BIG_INT_ZERO;
@@ -43,6 +48,22 @@ export function createOrLoadOperator(
4348
return operator as Operator;
4449
}
4550

51+
export function createOrLoadOperatorAllocation(
52+
operator: Operator
53+
): OperatorAllocation {
54+
let allocationId = operator.id
55+
.concat("-")
56+
.concat(operator.allocationsCount.toString());
57+
let allocation = OperatorAllocation.load(allocationId);
58+
if (allocation == null) {
59+
allocation = new OperatorAllocation(allocationId);
60+
allocation.validatorsCount = BIG_INT_ZERO;
61+
allocation.operator = operator.id;
62+
allocation.save();
63+
}
64+
return allocation as OperatorAllocation;
65+
}
66+
4667
export function createOrLoadValidator(publicKey: Bytes): Validator {
4768
let validatorId = publicKey.toHexString();
4869
let validator = Validator.load(validatorId);

subgraphs/stakewise/src/mappings/oracles.ts

+6-9
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
1-
import { BigInt, log, store } from "@graphprotocol/graph-ts";
1+
import { log, store } from "@graphprotocol/graph-ts";
22

3+
import { BIG_INT_ONE } from "const";
34
import { createOrLoadOracle, createOrLoadNetwork } from "../entities";
45
import {
56
InitializeValidatorVoteSubmitted,
@@ -51,7 +52,7 @@ export function handleOracleRemoved(event: OracleRemoved): void {
5152
export function handleRewardsVoteSubmitted(event: RewardsVoteSubmitted): void {
5253
let network = createOrLoadNetwork();
5354

54-
network.oraclesRewardsNonce = event.params.nonce.plus(BigInt.fromString("1"));
55+
network.oraclesRewardsNonce = event.params.nonce.plus(BIG_INT_ONE);
5556
network.save();
5657

5758
log.info("[Oracles] RewardsVoteSubmitted nonce={} oracle={} sender={}", [
@@ -66,7 +67,7 @@ export function handleMerkleRootVoteSubmitted(
6667
): void {
6768
let network = createOrLoadNetwork();
6869

69-
network.oraclesRewardsNonce = event.params.nonce.plus(BigInt.fromString("1"));
70+
network.oraclesRewardsNonce = event.params.nonce.plus(BIG_INT_ONE);
7071
network.save();
7172

7273
log.info("[Oracles] MerkleRootVoteSubmitted nonce={} oracle={} sender={}", [
@@ -81,9 +82,7 @@ export function handleInitializeValidatorVoteSubmitted(
8182
): void {
8283
let network = createOrLoadNetwork();
8384

84-
network.oraclesValidatorsNonce = event.params.nonce.plus(
85-
BigInt.fromString("1")
86-
);
85+
network.oraclesValidatorsNonce = event.params.nonce.plus(BIG_INT_ONE);
8786
network.save();
8887

8988
log.info(
@@ -101,9 +100,7 @@ export function handleFinalizeValidatorVoteSubmitted(
101100
): void {
102101
let network = createOrLoadNetwork();
103102

104-
network.oraclesValidatorsNonce = event.params.nonce.plus(
105-
BigInt.fromString("1")
106-
);
103+
network.oraclesValidatorsNonce = event.params.nonce.plus(BIG_INT_ONE);
107104
network.save();
108105

109106
log.info(

subgraphs/stakewise/src/mappings/pool.ts

+14-11
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
import { BigInt, log, store } from "@graphprotocol/graph-ts";
22

3-
import { BIG_INT_1E18 } from "const";
3+
import { BIG_INT_1E18, BIG_INT_ONE } from "const";
44
import {
55
Activated,
66
ActivatedValidatorsUpdated,
@@ -19,6 +19,7 @@ import {
1919
createOrLoadDepositActivation,
2020
createOrLoadNetwork,
2121
createOrLoadOperator,
22+
createOrLoadOperatorAllocation,
2223
createOrLoadPool,
2324
createOrLoadValidator,
2425
getDepositActivationId,
@@ -175,9 +176,11 @@ export function handleValidatorInitialized(event: ValidatorInitialized): void {
175176
validator.registrationStatus = "Initialized";
176177
validator.save();
177178

178-
operator.validatorsCount = operator.validatorsCount.plus(
179-
BigInt.fromString("1")
180-
);
179+
let allocation = createOrLoadOperatorAllocation(operator);
180+
allocation.validatorsCount = allocation.validatorsCount.plus(BIG_INT_ONE);
181+
allocation.save();
182+
183+
operator.validatorsCount = operator.validatorsCount.plus(BIG_INT_ONE);
181184
operator.locked = true;
182185
operator.updatedAtBlock = event.block.number;
183186
operator.updatedAtTimestamp = event.block.timestamp;
@@ -202,24 +205,24 @@ export function handleValidatorRegistered(event: ValidatorRegistered): void {
202205
let validator = createOrLoadValidator(event.params.publicKey);
203206

204207
let pool = createOrLoadPool();
205-
pool.pendingValidators = pool.pendingValidators.plus(BigInt.fromString("1"));
208+
pool.pendingValidators = pool.pendingValidators.plus(BIG_INT_ONE);
206209

207210
if (validator.registrationStatus == "Uninitialized") {
208211
// compatibility with v1 contracts
209212
pool.balance = pool.balance.minus(
210213
BigInt.fromString("32").times(BIG_INT_1E18)
211214
);
212-
operator.validatorsCount = operator.validatorsCount.plus(
213-
BigInt.fromString("1")
214-
);
215+
operator.validatorsCount = operator.validatorsCount.plus(BIG_INT_ONE);
216+
217+
let allocation = createOrLoadOperatorAllocation(operator);
218+
allocation.validatorsCount = allocation.validatorsCount.plus(BIG_INT_ONE);
219+
allocation.save();
215220
} else {
216221
// finalization is done with 31 ether deposit to the eth2 contract
217222
pool.balance = pool.balance.minus(
218223
BigInt.fromString("31").times(BIG_INT_1E18)
219224
);
220-
operator.depositDataIndex = operator.depositDataIndex.plus(
221-
BigInt.fromString("1")
222-
);
225+
operator.depositDataIndex = operator.depositDataIndex.plus(BIG_INT_ONE);
223226
operator.locked = false;
224227
}
225228
pool.save();

subgraphs/stakewise/src/mappings/poolValidators.ts

+9-5
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
1-
import { BigInt, log } from "@graphprotocol/graph-ts";
2-
import { BIG_INT_ZERO, BYTES_ZERO } from "const";
1+
import { log } from "@graphprotocol/graph-ts";
2+
import { BIG_INT_ONE, BIG_INT_ZERO, BYTES_ZERO } from "const";
33
import {
44
createOrLoadOperator,
55
createOrLoadNetwork,
66
createOrLoadValidator,
7+
createOrLoadOperatorAllocation,
78
} from "../entities";
89
import {
910
OperatorCommitted,
@@ -30,6 +31,7 @@ export function handleOperatorAdded(event: OperatorAdded): void {
3031
operator.depositDataIndex = BIG_INT_ZERO;
3132
operator.updatedAtBlock = event.block.number;
3233
operator.updatedAtTimestamp = event.block.timestamp;
34+
operator.allocationsCount = operator.allocationsCount.plus(BIG_INT_ONE);
3335
operator.save();
3436

3537
log.info(
@@ -73,6 +75,10 @@ export function handleOperatorSlashed(event: OperatorSlashed): void {
7375
event.block.number
7476
);
7577

78+
let allocation = createOrLoadOperatorAllocation(operator);
79+
allocation.validatorsCount = allocation.validatorsCount.minus(BIG_INT_ONE);
80+
allocation.save();
81+
7682
operator.initializeMerkleRoot = BYTES_ZERO;
7783
operator.initializeMerkleProofs = "";
7884
operator.finalizeMerkleRoot = BYTES_ZERO;
@@ -83,9 +89,7 @@ export function handleOperatorSlashed(event: OperatorSlashed): void {
8389
operator.committed = false;
8490
operator.locked = false;
8591
operator.collateral = operator.collateral.minus(event.params.refundedAmount);
86-
operator.validatorsCount = operator.validatorsCount.minus(
87-
BigInt.fromString("1")
88-
);
92+
operator.validatorsCount = operator.validatorsCount.minus(BIG_INT_ONE);
8993
operator.save();
9094

9195
let validator = createOrLoadValidator(event.params.publicKey);

subgraphs/stakewise/subgraph.template.yaml

+2
Original file line numberDiff line numberDiff line change
@@ -23,6 +23,7 @@ dataSources:
2323
- Referrer
2424
- DepositActivation
2525
- Operator
26+
- OperatorSnapshot
2627
- Validator
2728
- Network
2829
abis:
@@ -68,6 +69,7 @@ dataSources:
6869
file: ./src/mappings/poolValidators.ts
6970
entities:
7071
- Operator
72+
- OperatorSnapshot
7173
- MerkleDistributor
7274
- Validator
7375
- Network

0 commit comments

Comments
 (0)