diff --git a/.k8/hetzner-stage/ssv-node-1-deployment.yml b/.k8/hetzner-stage/ssv-node-1-deployment.yml index 086be0d4f4..82717644ef 100644 --- a/.k8/hetzner-stage/ssv-node-1-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-1-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-1 diff --git a/.k8/hetzner-stage/ssv-node-10-deployment.yml b/.k8/hetzner-stage/ssv-node-10-deployment.yml index 7f12a82051..38a9d42ef4 100644 --- a/.k8/hetzner-stage/ssv-node-10-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-10-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-10 diff --git a/.k8/hetzner-stage/ssv-node-11-deployment.yml b/.k8/hetzner-stage/ssv-node-11-deployment.yml index 83b4bd283d..fdba8e8e06 100644 --- a/.k8/hetzner-stage/ssv-node-11-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-11-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-11 diff --git a/.k8/hetzner-stage/ssv-node-12-deployment.yml b/.k8/hetzner-stage/ssv-node-12-deployment.yml index bb5a5364b4..39c53376d5 100644 --- a/.k8/hetzner-stage/ssv-node-12-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-12-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-12 diff --git a/.k8/hetzner-stage/ssv-node-13-deployment.yml b/.k8/hetzner-stage/ssv-node-13-deployment.yml index 22b6d23514..45e8cd4c4f 100644 --- a/.k8/hetzner-stage/ssv-node-13-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-13-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-13 diff --git a/.k8/hetzner-stage/ssv-node-14-deployment.yml b/.k8/hetzner-stage/ssv-node-14-deployment.yml index 62cd8d850c..ba020c030a 100644 --- a/.k8/hetzner-stage/ssv-node-14-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-14-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-14 diff --git a/.k8/hetzner-stage/ssv-node-15-deployment.yml b/.k8/hetzner-stage/ssv-node-15-deployment.yml index 52393fc8b7..95ccb82b6d 100644 --- a/.k8/hetzner-stage/ssv-node-15-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-15-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-15 diff --git a/.k8/hetzner-stage/ssv-node-16-deployment.yml b/.k8/hetzner-stage/ssv-node-16-deployment.yml index 611ac23afa..b7a2c083b2 100644 --- a/.k8/hetzner-stage/ssv-node-16-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-16-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-16 diff --git a/.k8/hetzner-stage/ssv-node-17-deployment.yml b/.k8/hetzner-stage/ssv-node-17-deployment.yml index 4dfdcbe204..476514b747 100644 --- a/.k8/hetzner-stage/ssv-node-17-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-17-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-17 diff --git a/.k8/hetzner-stage/ssv-node-18-deployment.yml b/.k8/hetzner-stage/ssv-node-18-deployment.yml index 3a6cc86755..c50e3a869a 100644 --- a/.k8/hetzner-stage/ssv-node-18-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-18-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-18 diff --git a/.k8/hetzner-stage/ssv-node-19-deployment.yml b/.k8/hetzner-stage/ssv-node-19-deployment.yml index 6afc020c66..a5e0fff55a 100644 --- a/.k8/hetzner-stage/ssv-node-19-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-19-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-19 diff --git a/.k8/hetzner-stage/ssv-node-2-deployment.yml b/.k8/hetzner-stage/ssv-node-2-deployment.yml index 3e7c411852..38158a10d5 100644 --- a/.k8/hetzner-stage/ssv-node-2-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-2-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-2 diff --git a/.k8/hetzner-stage/ssv-node-20-deployment.yml b/.k8/hetzner-stage/ssv-node-20-deployment.yml index e4a1bbe9dc..2c22aa5d10 100644 --- a/.k8/hetzner-stage/ssv-node-20-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-20-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-20 diff --git a/.k8/hetzner-stage/ssv-node-21-deployment.yml b/.k8/hetzner-stage/ssv-node-21-deployment.yml index e91e607a6b..cebae4fbe7 100644 --- a/.k8/hetzner-stage/ssv-node-21-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-21-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-21 diff --git a/.k8/hetzner-stage/ssv-node-22-deployment.yml b/.k8/hetzner-stage/ssv-node-22-deployment.yml index 587cfcb02f..425703ca22 100644 --- a/.k8/hetzner-stage/ssv-node-22-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-22-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-22 diff --git a/.k8/hetzner-stage/ssv-node-23-deployment.yml b/.k8/hetzner-stage/ssv-node-23-deployment.yml index 2b8bcf79fd..203b439712 100644 --- a/.k8/hetzner-stage/ssv-node-23-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-23-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-23 diff --git a/.k8/hetzner-stage/ssv-node-24-deployment.yml b/.k8/hetzner-stage/ssv-node-24-deployment.yml index 200c013aa5..5a8d052145 100644 --- a/.k8/hetzner-stage/ssv-node-24-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-24-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-24 diff --git a/.k8/hetzner-stage/ssv-node-25-deployment.yml b/.k8/hetzner-stage/ssv-node-25-deployment.yml index 32570b1800..f09b90cd66 100644 --- a/.k8/hetzner-stage/ssv-node-25-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-25-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-25 diff --git a/.k8/hetzner-stage/ssv-node-26-deployment.yml b/.k8/hetzner-stage/ssv-node-26-deployment.yml index e1931ba6b4..0bfde7769a 100644 --- a/.k8/hetzner-stage/ssv-node-26-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-26-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-26 diff --git a/.k8/hetzner-stage/ssv-node-27-deployment.yml b/.k8/hetzner-stage/ssv-node-27-deployment.yml index cbda5608a0..1dc139c85a 100644 --- a/.k8/hetzner-stage/ssv-node-27-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-27-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-27 diff --git a/.k8/hetzner-stage/ssv-node-28-deployment.yml b/.k8/hetzner-stage/ssv-node-28-deployment.yml index dd3365c183..ac89f6e95d 100644 --- a/.k8/hetzner-stage/ssv-node-28-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-28-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-28 diff --git a/.k8/hetzner-stage/ssv-node-29-deployment.yml b/.k8/hetzner-stage/ssv-node-29-deployment.yml index 759c621ae6..1193a78621 100644 --- a/.k8/hetzner-stage/ssv-node-29-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-29-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-29 diff --git a/.k8/hetzner-stage/ssv-node-3-deployment.yml b/.k8/hetzner-stage/ssv-node-3-deployment.yml index 1fe286bfce..18fbc20c03 100644 --- a/.k8/hetzner-stage/ssv-node-3-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-3-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-3 diff --git a/.k8/hetzner-stage/ssv-node-30-deployment.yml b/.k8/hetzner-stage/ssv-node-30-deployment.yml index eed6293f41..4a5c58ab27 100644 --- a/.k8/hetzner-stage/ssv-node-30-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-30-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-30 diff --git a/.k8/hetzner-stage/ssv-node-31-deployment.yml b/.k8/hetzner-stage/ssv-node-31-deployment.yml index decc10d037..00fd954c05 100644 --- a/.k8/hetzner-stage/ssv-node-31-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-31-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-31 diff --git a/.k8/hetzner-stage/ssv-node-32-deployment.yml b/.k8/hetzner-stage/ssv-node-32-deployment.yml index 32dcbc1587..36f1090ec3 100644 --- a/.k8/hetzner-stage/ssv-node-32-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-32-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-32 diff --git a/.k8/hetzner-stage/ssv-node-33-deployment.yml b/.k8/hetzner-stage/ssv-node-33-deployment.yml index 7bb8ee072e..47a0b113f6 100644 --- a/.k8/hetzner-stage/ssv-node-33-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-33-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-33 diff --git a/.k8/hetzner-stage/ssv-node-34-deployment.yml b/.k8/hetzner-stage/ssv-node-34-deployment.yml index 5ec7a5c1b6..387a834820 100644 --- a/.k8/hetzner-stage/ssv-node-34-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-34-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-34 diff --git a/.k8/hetzner-stage/ssv-node-35-deployment.yml b/.k8/hetzner-stage/ssv-node-35-deployment.yml index 6430c698f5..043ddafb9b 100644 --- a/.k8/hetzner-stage/ssv-node-35-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-35-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-35 diff --git a/.k8/hetzner-stage/ssv-node-36-deployment.yml b/.k8/hetzner-stage/ssv-node-36-deployment.yml index a91c4fd23a..b2c2e0a89d 100644 --- a/.k8/hetzner-stage/ssv-node-36-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-36-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-36 diff --git a/.k8/hetzner-stage/ssv-node-37-deployment.yml b/.k8/hetzner-stage/ssv-node-37-deployment.yml index ef6fe88f03..25b640e23e 100644 --- a/.k8/hetzner-stage/ssv-node-37-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-37-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-37 diff --git a/.k8/hetzner-stage/ssv-node-38-deployment.yml b/.k8/hetzner-stage/ssv-node-38-deployment.yml index c2949533e8..7f4858f2de 100644 --- a/.k8/hetzner-stage/ssv-node-38-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-38-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-38 diff --git a/.k8/hetzner-stage/ssv-node-39-deployment.yml b/.k8/hetzner-stage/ssv-node-39-deployment.yml index 9b5e0dd6d5..322bca8ede 100644 --- a/.k8/hetzner-stage/ssv-node-39-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-39-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-39 diff --git a/.k8/hetzner-stage/ssv-node-4-deployment.yml b/.k8/hetzner-stage/ssv-node-4-deployment.yml index e14bf0186d..0f713f256e 100644 --- a/.k8/hetzner-stage/ssv-node-4-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-4-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-4 diff --git a/.k8/hetzner-stage/ssv-node-40-deployment.yml b/.k8/hetzner-stage/ssv-node-40-deployment.yml index ab0f8f974a..baa40ea8b1 100644 --- a/.k8/hetzner-stage/ssv-node-40-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-40-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-40 diff --git a/.k8/hetzner-stage/ssv-node-41-deployment.yml b/.k8/hetzner-stage/ssv-node-41-deployment.yml index cc177afcf1..a066f20316 100644 --- a/.k8/hetzner-stage/ssv-node-41-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-41-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-41 diff --git a/.k8/hetzner-stage/ssv-node-42-deployment.yml b/.k8/hetzner-stage/ssv-node-42-deployment.yml index 635b268042..9a90886eda 100644 --- a/.k8/hetzner-stage/ssv-node-42-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-42-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-42 diff --git a/.k8/hetzner-stage/ssv-node-43-deployment.yml b/.k8/hetzner-stage/ssv-node-43-deployment.yml index 4731455412..c6c08613de 100644 --- a/.k8/hetzner-stage/ssv-node-43-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-43-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-43 diff --git a/.k8/hetzner-stage/ssv-node-44-deployment.yml b/.k8/hetzner-stage/ssv-node-44-deployment.yml index b9b8b0c5a4..b533b6bcfc 100644 --- a/.k8/hetzner-stage/ssv-node-44-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-44-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-44 diff --git a/.k8/hetzner-stage/ssv-node-45-deployment.yml b/.k8/hetzner-stage/ssv-node-45-deployment.yml index 6636204199..dd4e94430d 100644 --- a/.k8/hetzner-stage/ssv-node-45-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-45-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-45 diff --git a/.k8/hetzner-stage/ssv-node-46-deployment.yml b/.k8/hetzner-stage/ssv-node-46-deployment.yml index 9abe08db3b..8ce5fc8625 100644 --- a/.k8/hetzner-stage/ssv-node-46-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-46-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-46 diff --git a/.k8/hetzner-stage/ssv-node-47-deployment.yml b/.k8/hetzner-stage/ssv-node-47-deployment.yml index 89964d30fb..20f13789b7 100644 --- a/.k8/hetzner-stage/ssv-node-47-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-47-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-47 diff --git a/.k8/hetzner-stage/ssv-node-48-deployment.yml b/.k8/hetzner-stage/ssv-node-48-deployment.yml index 843835dd40..e750831e12 100644 --- a/.k8/hetzner-stage/ssv-node-48-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-48-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-48 diff --git a/.k8/hetzner-stage/ssv-node-49-deployment.yml b/.k8/hetzner-stage/ssv-node-49-deployment.yml index 5a557185dc..350802f021 100644 --- a/.k8/hetzner-stage/ssv-node-49-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-49-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-49 diff --git a/.k8/hetzner-stage/ssv-node-5-deployment.yml b/.k8/hetzner-stage/ssv-node-5-deployment.yml index 94d184dec0..c94a30acf9 100644 --- a/.k8/hetzner-stage/ssv-node-5-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-5-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-5 diff --git a/.k8/hetzner-stage/ssv-node-50-deployment.yml b/.k8/hetzner-stage/ssv-node-50-deployment.yml index 0099320434..4e2bbebce8 100644 --- a/.k8/hetzner-stage/ssv-node-50-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-50-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-50 diff --git a/.k8/hetzner-stage/ssv-node-51-deployment.yml b/.k8/hetzner-stage/ssv-node-51-deployment.yml index 7933ca7218..7e46ea6560 100644 --- a/.k8/hetzner-stage/ssv-node-51-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-51-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-51 diff --git a/.k8/hetzner-stage/ssv-node-52-deployment.yml b/.k8/hetzner-stage/ssv-node-52-deployment.yml index 46a23039c7..c676691f8c 100644 --- a/.k8/hetzner-stage/ssv-node-52-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-52-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-52 diff --git a/.k8/hetzner-stage/ssv-node-53-deployment.yml b/.k8/hetzner-stage/ssv-node-53-deployment.yml index 373b3fd9a5..678301bc85 100644 --- a/.k8/hetzner-stage/ssv-node-53-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-53-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-53 diff --git a/.k8/hetzner-stage/ssv-node-54-deployment.yml b/.k8/hetzner-stage/ssv-node-54-deployment.yml index fa81104af3..c91ec66e42 100644 --- a/.k8/hetzner-stage/ssv-node-54-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-54-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-54 diff --git a/.k8/hetzner-stage/ssv-node-55-deployment.yml b/.k8/hetzner-stage/ssv-node-55-deployment.yml index 0c5f96d861..f2b44873e0 100644 --- a/.k8/hetzner-stage/ssv-node-55-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-55-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-55 diff --git a/.k8/hetzner-stage/ssv-node-56-deployment.yml b/.k8/hetzner-stage/ssv-node-56-deployment.yml index 4980e56786..bdb312eb7e 100644 --- a/.k8/hetzner-stage/ssv-node-56-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-56-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-56 diff --git a/.k8/hetzner-stage/ssv-node-57-deployment.yml b/.k8/hetzner-stage/ssv-node-57-deployment.yml index 6fea9bd5f3..3eff5b03c4 100644 --- a/.k8/hetzner-stage/ssv-node-57-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-57-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-57 diff --git a/.k8/hetzner-stage/ssv-node-58-deployment.yml b/.k8/hetzner-stage/ssv-node-58-deployment.yml index ba1175da79..cdaf3bcb23 100644 --- a/.k8/hetzner-stage/ssv-node-58-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-58-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-58 diff --git a/.k8/hetzner-stage/ssv-node-59-deployment.yml b/.k8/hetzner-stage/ssv-node-59-deployment.yml index 2232660448..b7b1861792 100644 --- a/.k8/hetzner-stage/ssv-node-59-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-59-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-59 diff --git a/.k8/hetzner-stage/ssv-node-6-deployment.yml b/.k8/hetzner-stage/ssv-node-6-deployment.yml index 945c0a7779..3bfbc7ed26 100644 --- a/.k8/hetzner-stage/ssv-node-6-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-6-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-6 diff --git a/.k8/hetzner-stage/ssv-node-60-deployment.yml b/.k8/hetzner-stage/ssv-node-60-deployment.yml index 28536a9fd9..a7a7285a6d 100644 --- a/.k8/hetzner-stage/ssv-node-60-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-60-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-60 diff --git a/.k8/hetzner-stage/ssv-node-61-deployment.yml b/.k8/hetzner-stage/ssv-node-61-deployment.yml index a4802318f7..6ac244e496 100644 --- a/.k8/hetzner-stage/ssv-node-61-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-61-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-61 diff --git a/.k8/hetzner-stage/ssv-node-62-deployment.yml b/.k8/hetzner-stage/ssv-node-62-deployment.yml index 3ceb7303cf..d257378b74 100644 --- a/.k8/hetzner-stage/ssv-node-62-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-62-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-62 diff --git a/.k8/hetzner-stage/ssv-node-63-deployment.yml b/.k8/hetzner-stage/ssv-node-63-deployment.yml index e445668038..43912423b9 100644 --- a/.k8/hetzner-stage/ssv-node-63-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-63-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-63 diff --git a/.k8/hetzner-stage/ssv-node-64-deployment.yml b/.k8/hetzner-stage/ssv-node-64-deployment.yml index 41622ca0be..3a9f0fa5e0 100644 --- a/.k8/hetzner-stage/ssv-node-64-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-64-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-64 diff --git a/.k8/hetzner-stage/ssv-node-65-deployment.yml b/.k8/hetzner-stage/ssv-node-65-deployment.yml index 5390b92509..837cff925a 100644 --- a/.k8/hetzner-stage/ssv-node-65-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-65-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-65 diff --git a/.k8/hetzner-stage/ssv-node-66-deployment.yml b/.k8/hetzner-stage/ssv-node-66-deployment.yml index d6e86a35bc..f76842606c 100644 --- a/.k8/hetzner-stage/ssv-node-66-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-66-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-66 diff --git a/.k8/hetzner-stage/ssv-node-67-deployment.yml b/.k8/hetzner-stage/ssv-node-67-deployment.yml index 047e8c1b84..d9305f5293 100644 --- a/.k8/hetzner-stage/ssv-node-67-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-67-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-67 diff --git a/.k8/hetzner-stage/ssv-node-68-deployment.yml b/.k8/hetzner-stage/ssv-node-68-deployment.yml index 777a5ca07a..566fcdc221 100644 --- a/.k8/hetzner-stage/ssv-node-68-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-68-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-68 diff --git a/.k8/hetzner-stage/ssv-node-69-deployment.yml b/.k8/hetzner-stage/ssv-node-69-deployment.yml index 9d7fd2bbaa..29f507ea95 100644 --- a/.k8/hetzner-stage/ssv-node-69-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-69-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-69 diff --git a/.k8/hetzner-stage/ssv-node-7-deployment.yml b/.k8/hetzner-stage/ssv-node-7-deployment.yml index 358fa28811..8493eb8870 100644 --- a/.k8/hetzner-stage/ssv-node-7-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-7-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-7 diff --git a/.k8/hetzner-stage/ssv-node-70-deployment.yml b/.k8/hetzner-stage/ssv-node-70-deployment.yml index 5649051e6c..a501a099ed 100644 --- a/.k8/hetzner-stage/ssv-node-70-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-70-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-70 diff --git a/.k8/hetzner-stage/ssv-node-71-deployment.yml b/.k8/hetzner-stage/ssv-node-71-deployment.yml index ea98ca411c..b6c1bfa74b 100644 --- a/.k8/hetzner-stage/ssv-node-71-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-71-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-71 diff --git a/.k8/hetzner-stage/ssv-node-72-deployment.yml b/.k8/hetzner-stage/ssv-node-72-deployment.yml index ba1a8d2f07..33c5a2d0ce 100644 --- a/.k8/hetzner-stage/ssv-node-72-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-72-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-72 diff --git a/.k8/hetzner-stage/ssv-node-8-deployment.yml b/.k8/hetzner-stage/ssv-node-8-deployment.yml index a19ef9795b..1f13447479 100644 --- a/.k8/hetzner-stage/ssv-node-8-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-8-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-8 diff --git a/.k8/hetzner-stage/ssv-node-9-deployment.yml b/.k8/hetzner-stage/ssv-node-9-deployment.yml index c2868e46c5..04f979521c 100644 --- a/.k8/hetzner-stage/ssv-node-9-deployment.yml +++ b/.k8/hetzner-stage/ssv-node-9-deployment.yml @@ -115,7 +115,7 @@ spec: - name: PUBSUB_TRACE value: 'false' - name: BUILDER_PROPOSALS - value: "false" + value: "true" volumeMounts: - mountPath: /data name: ssv-node-9 diff --git a/Dockerfile b/Dockerfile index 0a71622f41..0ee5f04362 100644 --- a/Dockerfile +++ b/Dockerfile @@ -60,7 +60,7 @@ RUN apk -v --update add \ ca-certificates=20230506-r0 \ bash=5.2.15-r5 \ make=4.4.1-r1 \ - bind-tools=9.18.19-r0 && \ + bind-tools=9.18.24-r0 && \ rm /var/cache/apk/* COPY --from=builder /go/bin/ssvnode /go/bin/ssvnode diff --git a/Makefile b/Makefile index 134f09b166..97c6be1e22 100644 --- a/Makefile +++ b/Makefile @@ -1,14 +1,14 @@ -ifndef $(GOPATH) +ifndef GOPATH GOPATH=$(shell go env GOPATH) export GOPATH endif -ifndef $(HOST_ADDRESS) +ifndef HOST_ADDRESS HOST_ADDRESS=$(shell dig @resolver4.opendns.com myip.opendns.com +short) export HOST_ADDRESS endif -ifndef $(BUILD_PATH) +ifndef BUILD_PATH BUILD_PATH="/go/bin/ssvnode" export BUILD_PATH endif diff --git a/beacon/goclient/goclient.go b/beacon/goclient/goclient.go index 60a25aab91..ed67f5bce8 100644 --- a/beacon/goclient/goclient.go +++ b/beacon/goclient/goclient.go @@ -79,6 +79,7 @@ type NodeClient string const ( NodeLighthouse NodeClient = "lighthouse" NodePrysm NodeClient = "prysm" + NodeNimbus NodeClient = "nimbus" NodeUnknown NodeClient = "unknown" ) @@ -90,6 +91,8 @@ func ParseNodeClient(version string) NodeClient { return NodeLighthouse case strings.Contains(version, "prysm"): return NodePrysm + case strings.Contains(version, "nimbus"): + return NodeNimbus default: return NodeUnknown } @@ -114,6 +117,7 @@ type Client interface { eth2client.ProposalProvider eth2client.ProposalSubmitter eth2client.BlindedProposalProvider + eth2client.V3ProposalProvider eth2client.BlindedProposalSubmitter eth2client.DomainProvider eth2client.SyncCommitteeMessagesSubmitter diff --git a/beacon/goclient/proposer.go b/beacon/goclient/proposer.go index 609316aacb..a1dc95a688 100644 --- a/beacon/goclient/proposer.go +++ b/beacon/goclient/proposer.go @@ -101,8 +101,16 @@ func (gc *goClient) GetBeaconBlock(slot phase0.Slot, graffitiBytes, randao []byt } } -// GetBlindedBeaconBlock returns blinded beacon block by the given slot, graffiti, and randao. func (gc *goClient) GetBlindedBeaconBlock(slot phase0.Slot, graffitiBytes, randao []byte) (ssz.Marshaler, spec.DataVersion, error) { + if gc.nodeClient == NodePrysm { + gc.log.Debug("using V3 endpoint for prysm blinded block") + return gc.V3Proposal(slot, graffitiBytes, randao) + } + return gc.DefaultGetBlindedBeaconBlock(slot, graffitiBytes, randao) +} + +// GetBlindedBeaconBlock returns blinded beacon block by the given slot, graffiti, and randao. +func (gc *goClient) DefaultGetBlindedBeaconBlock(slot phase0.Slot, graffitiBytes, randao []byte) (ssz.Marshaler, spec.DataVersion, error) { sig := phase0.BLSSignature{} copy(sig[:], randao[:]) @@ -157,6 +165,95 @@ func (gc *goClient) GetBlindedBeaconBlock(slot phase0.Slot, graffitiBytes, randa } } +func (gc *goClient) V3Proposal(slot phase0.Slot, graffitiBytes, randao []byte) (ssz.Marshaler, spec.DataVersion, error) { + sig := phase0.BLSSignature{} + copy(sig[:], randao[:]) + + graffiti := [32]byte{} + copy(graffiti[:], graffitiBytes[:]) + + reqStart := time.Now() + v3ProposalResp, err := gc.client.V3Proposal(gc.ctx, &api.V3ProposalOpts{ + Slot: slot, + RandaoReveal: sig, + Graffiti: graffiti, + SkipRandaoVerification: false, + }) + if err != nil { + return nil, DataVersionNil, fmt.Errorf("failed to get v3 proposal: %w", err) + } + if v3ProposalResp == nil { + return nil, DataVersionNil, fmt.Errorf("v3 proposal response is nil") + } + if v3ProposalResp.Data == nil { + return nil, DataVersionNil, fmt.Errorf("v3 proposal data is nil") + } + + metricsProposerDataRequest.Observe(time.Since(reqStart).Seconds()) + beaconBlock := v3ProposalResp.Data + + if beaconBlock.ExecutionPayloadBlinded { + switch beaconBlock.Version { + case spec.DataVersionCapella: + if beaconBlock.BlindedCapella == nil { + return nil, DataVersionNil, fmt.Errorf("capella blinded block is nil") + } + if beaconBlock.BlindedCapella.Body == nil { + return nil, DataVersionNil, fmt.Errorf("capella blinded block body is nil") + } + if beaconBlock.BlindedCapella.Body.ExecutionPayloadHeader == nil { + return nil, DataVersionNil, fmt.Errorf("capella blinded block execution payload header is nil") + } + return beaconBlock.BlindedCapella, beaconBlock.Version, nil + case spec.DataVersionDeneb: + if beaconBlock.BlindedDeneb == nil { + return nil, DataVersionNil, fmt.Errorf("deneb blinded block contents is nil") + } + if beaconBlock.BlindedDeneb.Body == nil { + return nil, DataVersionNil, fmt.Errorf("deneb blinded block body is nil") + } + if beaconBlock.BlindedDeneb.Body.ExecutionPayloadHeader == nil { + return nil, DataVersionNil, fmt.Errorf("deneb blinded block execution payload header is nil") + } + return beaconBlock.BlindedDeneb, beaconBlock.Version, nil + default: + return nil, DataVersionNil, fmt.Errorf("beacon blinded block version %s not supported", beaconBlock.Version) + } + } + + switch beaconBlock.Version { + case spec.DataVersionCapella: + if beaconBlock.Capella == nil { + return nil, DataVersionNil, fmt.Errorf("capella block is nil") + } + if beaconBlock.Capella.Body == nil { + return nil, DataVersionNil, fmt.Errorf("capella block body is nil") + } + if beaconBlock.Capella.Body.ExecutionPayload == nil { + return nil, DataVersionNil, fmt.Errorf("capella block execution payload is nil") + } + return beaconBlock.Capella, beaconBlock.Version, nil + case spec.DataVersionDeneb: + if beaconBlock.Deneb == nil { + return nil, DataVersionNil, fmt.Errorf("deneb block contents is nil") + } + if beaconBlock.Deneb.Block == nil { + return nil, DataVersionNil, fmt.Errorf("deneb block is nil") + } + if beaconBlock.Deneb.Block.Body == nil { + return nil, DataVersionNil, fmt.Errorf("deneb block body is nil") + } + if beaconBlock.Deneb.Block.Body.ExecutionPayload == nil { + return nil, DataVersionNil, fmt.Errorf("deneb block execution payload is nil") + } + return beaconBlock.Deneb, beaconBlock.Version, nil + + default: + return nil, DataVersionNil, fmt.Errorf("beacon block version %s not supported", beaconBlock.Version) + } + +} + func (gc *goClient) SubmitBlindedBeaconBlock(block *api.VersionedBlindedProposal, sig phase0.BLSSignature) error { signedBlock := &api.VersionedSignedBlindedProposal{ Version: block.Version, diff --git a/eth/contract/contract.abi b/eth/contract/contract.abi index f6df7b0a6b..e955d04b14 100644 --- a/eth/contract/contract.abi +++ b/eth/contract/contract.abi @@ -1,1717 +1,1782 @@ [ - { - "inputs": [], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { - "inputs": [], - "name": "ApprovalNotWithinTimeframe", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotOwner", - "type": "error" - }, - { - "inputs": [], - "name": "CallerNotWhitelisted", - "type": "error" - }, - { - "inputs": [], - "name": "ClusterAlreadyEnabled", - "type": "error" - }, - { - "inputs": [], - "name": "ClusterDoesNotExists", - "type": "error" - }, - { - "inputs": [], - "name": "ClusterIsLiquidated", - "type": "error" - }, - { - "inputs": [], - "name": "ClusterNotLiquidatable", - "type": "error" - }, - { - "inputs": [], - "name": "ExceedValidatorLimit", - "type": "error" - }, - { - "inputs": [], - "name": "FeeExceedsIncreaseLimit", - "type": "error" - }, - { - "inputs": [], - "name": "FeeIncreaseNotAllowed", - "type": "error" - }, - { - "inputs": [], - "name": "FeeTooHigh", - "type": "error" - }, - { - "inputs": [], - "name": "FeeTooLow", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectClusterState", - "type": "error" - }, - { - "inputs": [], - "name": "IncorrectValidatorState", - "type": "error" - }, - { - "inputs": [], - "name": "InsufficientBalance", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidOperatorIdsLength", - "type": "error" - }, - { - "inputs": [], - "name": "InvalidPublicKeyLength", - "type": "error" - }, - { - "inputs": [], - "name": "MaxValueExceeded", - "type": "error" - }, - { - "inputs": [], - "name": "NewBlockPeriodIsBelowMinimum", - "type": "error" - }, - { - "inputs": [], - "name": "NoFeeDeclared", - "type": "error" - }, - { - "inputs": [], - "name": "NotAuthorized", - "type": "error" - }, - { - "inputs": [], - "name": "OperatorAlreadyExists", - "type": "error" - }, - { - "inputs": [], - "name": "OperatorDoesNotExist", - "type": "error" - }, - { - "inputs": [], - "name": "OperatorsListNotUnique", - "type": "error" - }, - { - "inputs": [], - "name": "SameFeeChangeNotAllowed", - "type": "error" - }, - { - "inputs": [], - "name": "TargetModuleDoesNotExist", - "type": "error" - }, - { - "inputs": [], - "name": "TokenTransferFailed", - "type": "error" - }, - { - "inputs": [], - "name": "UnsortedOperatorsList", - "type": "error" - }, - { - "inputs": [], - "name": "ValidatorAlreadyExists", - "type": "error" - }, - { - "inputs": [], - "name": "ValidatorDoesNotExist", - "type": "error" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "address", - "name": "previousAdmin", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "newAdmin", - "type": "address" - } - ], - "name": "AdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "beacon", - "type": "address" - } - ], - "name": "BeaconUpgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "ClusterDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "ClusterLiquidated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "ClusterReactivated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "ClusterWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "value", - "type": "uint64" - } - ], - "name": "DeclareOperatorFeePeriodUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "value", - "type": "uint64" - } - ], - "name": "ExecuteOperatorFeePeriodUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "address", - "name": "recipientAddress", - "type": "address" - } - ], - "name": "FeeRecipientAddressUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint8", - "name": "version", - "type": "uint8" - } - ], - "name": "Initialized", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "value", - "type": "uint64" - } - ], - "name": "LiquidationThresholdPeriodUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "MinimumLiquidationCollateralUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "recipient", - "type": "address" - } - ], - "name": "NetworkEarningsWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "oldFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "newFee", - "type": "uint256" - } - ], - "name": "NetworkFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "OperatorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - } - ], - "name": "OperatorFeeDeclarationCancelled", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "OperatorFeeDeclared", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "blockNumber", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "OperatorFeeExecuted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "value", - "type": "uint64" - } - ], - "name": "OperatorFeeIncreaseLimitUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint64", - "name": "maxFee", - "type": "uint64" - } - ], - "name": "OperatorMaximumFeeUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - } - ], - "name": "OperatorRemoved", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "address", - "name": "whitelisted", - "type": "address" - } - ], - "name": "OperatorWhitelistUpdated", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": true, - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "value", - "type": "uint256" - } - ], - "name": "OperatorWithdrawn", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferStarted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "previousOwner", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "OwnershipTransferred", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "implementation", - "type": "address" - } - ], - "name": "Upgraded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "shares", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "ValidatorAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - } - ], - "name": "ValidatorExited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "address", - "name": "owner", - "type": "address" - }, - { - "indexed": false, - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "indexed": false, - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "ValidatorRemoved", - "type": "event" - }, - { - "stateMutability": "nonpayable", - "type": "fallback" - }, - { - "inputs": [], - "name": "acceptOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - } - ], - "name": "cancelDeclaredOperatorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "declareOperatorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "clusterOwner", - "type": "address" - }, - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - } - ], - "name": "executeOperatorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - } - ], - "name": "exitValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "getVersion", - "outputs": [ - { - "internalType": "string", - "name": "version", - "type": "string" - } - ], - "stateMutability": "pure", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "contract IERC20", - "name": "token_", - "type": "address" - }, - { - "internalType": "contract ISSVOperators", - "name": "ssvOperators_", - "type": "address" - }, - { - "internalType": "contract ISSVClusters", - "name": "ssvClusters_", - "type": "address" - }, - { - "internalType": "contract ISSVDAO", - "name": "ssvDAO_", - "type": "address" - }, - { - "internalType": "contract ISSVViews", - "name": "ssvViews_", - "type": "address" - }, - { - "internalType": "uint64", - "name": "minimumBlocksBeforeLiquidation_", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "minimumLiquidationCollateral_", - "type": "uint256" - }, - { - "internalType": "uint32", - "name": "validatorsPerOperatorLimit_", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "declareOperatorFeePeriod_", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "executeOperatorFeePeriod_", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "operatorMaxFeeIncrease_", - "type": "uint64" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "clusterOwner", - "type": "address" - }, - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "liquidate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "owner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "pendingOwner", - "outputs": [ - { - "internalType": "address", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "proxiableUUID", - "outputs": [ - { - "internalType": "bytes32", - "name": "", - "type": "bytes32" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "reactivate", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "reduceOperatorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "registerOperator", - "outputs": [ - { - "internalType": "uint64", - "name": "id", - "type": "uint64" - } - ], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "internalType": "bytes", - "name": "sharesData", - "type": "bytes" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "registerValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - } - ], - "name": "removeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes", - "name": "publicKey", - "type": "bytes" - }, - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "removeValidator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "renounceOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "recipientAddress", - "type": "address" - } - ], - "name": "setFeeRecipientAddress", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "internalType": "address", - "name": "whitelisted", - "type": "address" - } - ], - "name": "setOperatorWhitelist", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newOwner", - "type": "address" - } - ], - "name": "transferOwnership", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "timeInSeconds", - "type": "uint64" - } - ], - "name": "updateDeclareOperatorFeePeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "timeInSeconds", - "type": "uint64" - } - ], - "name": "updateExecuteOperatorFeePeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "blocks", - "type": "uint64" - } - ], - "name": "updateLiquidationThresholdPeriod", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "maxFee", - "type": "uint64" - } - ], - "name": "updateMaximumOperatorFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "updateMinimumLiquidationCollateral", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "enum SSVModules", - "name": "moduleId", - "type": "uint8" - }, - { - "internalType": "address", - "name": "moduleAddress", - "type": "address" - } - ], - "name": "updateModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "fee", - "type": "uint256" - } - ], - "name": "updateNetworkFee", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "percentage", - "type": "uint64" - } - ], - "name": "updateOperatorFeeIncreaseLimit", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - } - ], - "name": "upgradeTo", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "address", - "name": "newImplementation", - "type": "address" - }, - { - "internalType": "bytes", - "name": "data", - "type": "bytes" - } - ], - "name": "upgradeToAndCall", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64[]", - "name": "operatorIds", - "type": "uint64[]" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - }, - { - "components": [ - { - "internalType": "uint32", - "name": "validatorCount", - "type": "uint32" - }, - { - "internalType": "uint64", - "name": "networkFeeIndex", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "index", - "type": "uint64" - }, - { - "internalType": "bool", - "name": "active", - "type": "bool" - }, - { - "internalType": "uint256", - "name": "balance", - "type": "uint256" - } - ], - "internalType": "struct ISSVNetworkCore.Cluster", - "name": "cluster", - "type": "tuple" - } - ], - "name": "withdraw", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - } - ], - "name": "withdrawAllOperatorEarnings", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawNetworkEarnings", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint64", - "name": "operatorId", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "withdrawOperatorEarnings", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - } -] \ No newline at end of file + { + "inputs": [], + "stateMutability": "nonpayable", + "type": "constructor" + }, + { + "inputs": [], + "name": "ApprovalNotWithinTimeframe", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotOwner", + "type": "error" + }, + { + "inputs": [], + "name": "CallerNotWhitelisted", + "type": "error" + }, + { + "inputs": [], + "name": "ClusterAlreadyEnabled", + "type": "error" + }, + { + "inputs": [], + "name": "ClusterDoesNotExists", + "type": "error" + }, + { + "inputs": [], + "name": "ClusterIsLiquidated", + "type": "error" + }, + { + "inputs": [], + "name": "ClusterNotLiquidatable", + "type": "error" + }, + { + "inputs": [], + "name": "ExceedValidatorLimit", + "type": "error" + }, + { + "inputs": [], + "name": "FeeExceedsIncreaseLimit", + "type": "error" + }, + { + "inputs": [], + "name": "FeeIncreaseNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "FeeTooHigh", + "type": "error" + }, + { + "inputs": [], + "name": "FeeTooLow", + "type": "error" + }, + { + "inputs": [], + "name": "IncorrectClusterState", + "type": "error" + }, + { + "inputs": [], + "name": "IncorrectValidatorState", + "type": "error" + }, + { + "inputs": [], + "name": "InsufficientBalance", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidOperatorIdsLength", + "type": "error" + }, + { + "inputs": [], + "name": "InvalidPublicKeyLength", + "type": "error" + }, + { + "inputs": [], + "name": "MaxValueExceeded", + "type": "error" + }, + { + "inputs": [], + "name": "NewBlockPeriodIsBelowMinimum", + "type": "error" + }, + { + "inputs": [], + "name": "NoFeeDeclared", + "type": "error" + }, + { + "inputs": [], + "name": "NotAuthorized", + "type": "error" + }, + { + "inputs": [], + "name": "OperatorAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "OperatorDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "OperatorsListNotUnique", + "type": "error" + }, + { + "inputs": [], + "name": "PublicKeysSharesLengthMismatch", + "type": "error" + }, + { + "inputs": [], + "name": "SameFeeChangeNotAllowed", + "type": "error" + }, + { + "inputs": [], + "name": "TargetModuleDoesNotExist", + "type": "error" + }, + { + "inputs": [], + "name": "TokenTransferFailed", + "type": "error" + }, + { + "inputs": [], + "name": "UnsortedOperatorsList", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorAlreadyExists", + "type": "error" + }, + { + "inputs": [], + "name": "ValidatorDoesNotExist", + "type": "error" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "address", + "name": "previousAdmin", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "newAdmin", + "type": "address" + } + ], + "name": "AdminChanged", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "beacon", + "type": "address" + } + ], + "name": "BeaconUpgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "ClusterDeposited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "ClusterLiquidated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "ClusterReactivated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "ClusterWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "value", + "type": "uint64" + } + ], + "name": "DeclareOperatorFeePeriodUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "value", + "type": "uint64" + } + ], + "name": "ExecuteOperatorFeePeriodUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipientAddress", + "type": "address" + } + ], + "name": "FeeRecipientAddressUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint8", + "name": "version", + "type": "uint8" + } + ], + "name": "Initialized", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "value", + "type": "uint64" + } + ], + "name": "LiquidationThresholdPeriodUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "MinimumLiquidationCollateralUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "address", + "name": "recipient", + "type": "address" + } + ], + "name": "NetworkEarningsWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint256", + "name": "oldFee", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "newFee", + "type": "uint256" + } + ], + "name": "NetworkFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "OperatorAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + } + ], + "name": "OperatorFeeDeclarationCancelled", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "OperatorFeeDeclared", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "blockNumber", + "type": "uint256" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "OperatorFeeExecuted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "value", + "type": "uint64" + } + ], + "name": "OperatorFeeIncreaseLimitUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": false, + "internalType": "uint64", + "name": "maxFee", + "type": "uint64" + } + ], + "name": "OperatorMaximumFeeUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + } + ], + "name": "OperatorRemoved", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "address", + "name": "whitelisted", + "type": "address" + } + ], + "name": "OperatorWhitelistUpdated", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": true, + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "indexed": false, + "internalType": "uint256", + "name": "value", + "type": "uint256" + } + ], + "name": "OperatorWithdrawn", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferStarted", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "previousOwner", + "type": "address" + }, + { + "indexed": true, + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "OwnershipTransferred", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "implementation", + "type": "address" + } + ], + "name": "Upgraded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "shares", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "ValidatorAdded", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + } + ], + "name": "ValidatorExited", + "type": "event" + }, + { + "anonymous": false, + "inputs": [ + { + "indexed": true, + "internalType": "address", + "name": "owner", + "type": "address" + }, + { + "indexed": false, + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "indexed": false, + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "indexed": false, + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "ValidatorRemoved", + "type": "event" + }, + { + "stateMutability": "nonpayable", + "type": "fallback" + }, + { + "inputs": [], + "name": "acceptOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes[]", + "name": "publicKeys", + "type": "bytes[]" + }, + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "internalType": "bytes[]", + "name": "sharesData", + "type": "bytes[]" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "bulkRegisterValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + } + ], + "name": "cancelDeclaredOperatorFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "declareOperatorFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clusterOwner", + "type": "address" + }, + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "deposit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + } + ], + "name": "executeOperatorFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + } + ], + "name": "exitValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "getVersion", + "outputs": [ + { + "internalType": "string", + "name": "version", + "type": "string" + } + ], + "stateMutability": "pure", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "contract IERC20", + "name": "token_", + "type": "address" + }, + { + "internalType": "contract ISSVOperators", + "name": "ssvOperators_", + "type": "address" + }, + { + "internalType": "contract ISSVClusters", + "name": "ssvClusters_", + "type": "address" + }, + { + "internalType": "contract ISSVDAO", + "name": "ssvDAO_", + "type": "address" + }, + { + "internalType": "contract ISSVViews", + "name": "ssvViews_", + "type": "address" + }, + { + "internalType": "uint64", + "name": "minimumBlocksBeforeLiquidation_", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "minimumLiquidationCollateral_", + "type": "uint256" + }, + { + "internalType": "uint32", + "name": "validatorsPerOperatorLimit_", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "declareOperatorFeePeriod_", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "executeOperatorFeePeriod_", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "operatorMaxFeeIncrease_", + "type": "uint64" + } + ], + "name": "initialize", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "clusterOwner", + "type": "address" + }, + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "liquidate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "owner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "pendingOwner", + "outputs": [ + { + "internalType": "address", + "name": "", + "type": "address" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [], + "name": "proxiableUUID", + "outputs": [ + { + "internalType": "bytes32", + "name": "", + "type": "bytes32" + } + ], + "stateMutability": "view", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "reactivate", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "reduceOperatorFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "registerOperator", + "outputs": [ + { + "internalType": "uint64", + "name": "id", + "type": "uint64" + } + ], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "internalType": "bytes", + "name": "shares", + "type": "bytes" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "registerValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + } + ], + "name": "removeOperator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "bytes", + "name": "publicKey", + "type": "bytes" + }, + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "removeValidator", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [], + "name": "renounceOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "recipientAddress", + "type": "address" + } + ], + "name": "setFeeRecipientAddress", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "internalType": "address", + "name": "whitelisted", + "type": "address" + } + ], + "name": "setOperatorWhitelist", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newOwner", + "type": "address" + } + ], + "name": "transferOwnership", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "timeInSeconds", + "type": "uint64" + } + ], + "name": "updateDeclareOperatorFeePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "timeInSeconds", + "type": "uint64" + } + ], + "name": "updateExecuteOperatorFeePeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "blocks", + "type": "uint64" + } + ], + "name": "updateLiquidationThresholdPeriod", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "maxFee", + "type": "uint64" + } + ], + "name": "updateMaximumOperatorFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "updateMinimumLiquidationCollateral", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "enum SSVModules", + "name": "moduleId", + "type": "uint8" + }, + { + "internalType": "address", + "name": "moduleAddress", + "type": "address" + } + ], + "name": "updateModule", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "fee", + "type": "uint256" + } + ], + "name": "updateNetworkFee", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "percentage", + "type": "uint64" + } + ], + "name": "updateOperatorFeeIncreaseLimit", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + } + ], + "name": "upgradeTo", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "address", + "name": "newImplementation", + "type": "address" + }, + { + "internalType": "bytes", + "name": "data", + "type": "bytes" + } + ], + "name": "upgradeToAndCall", + "outputs": [], + "stateMutability": "payable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64[]", + "name": "operatorIds", + "type": "uint64[]" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + }, + { + "components": [ + { + "internalType": "uint32", + "name": "validatorCount", + "type": "uint32" + }, + { + "internalType": "uint64", + "name": "networkFeeIndex", + "type": "uint64" + }, + { + "internalType": "uint64", + "name": "index", + "type": "uint64" + }, + { + "internalType": "bool", + "name": "active", + "type": "bool" + }, + { + "internalType": "uint256", + "name": "balance", + "type": "uint256" + } + ], + "internalType": "struct ISSVNetworkCore.Cluster", + "name": "cluster", + "type": "tuple" + } + ], + "name": "withdraw", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + } + ], + "name": "withdrawAllOperatorEarnings", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawNetworkEarnings", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + }, + { + "inputs": [ + { + "internalType": "uint64", + "name": "operatorId", + "type": "uint64" + }, + { + "internalType": "uint256", + "name": "amount", + "type": "uint256" + } + ], + "name": "withdrawOperatorEarnings", + "outputs": [], + "stateMutability": "nonpayable", + "type": "function" + } + ] \ No newline at end of file diff --git a/eth/contract/contract.go b/eth/contract/contract.go index 2a300b23c0..e0c2605faa 100644 --- a/eth/contract/contract.go +++ b/eth/contract/contract.go @@ -40,7 +40,7 @@ type ISSVNetworkCoreCluster struct { // ContractMetaData contains all meta data concerning the Contract contract. var ContractMetaData = &bind.MetaData{ - ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalNotWithinTimeframe\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterDoesNotExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterIsLiquidated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterNotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedValidatorLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeExceedsIncreaseLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeIncreaseNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectClusterState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectValidatorState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOperatorIdsLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPublicKeyLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxValueExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewBlockPeriodIsBelowMinimum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoFeeDeclared\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorsListNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SameFeeChangeNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetModuleDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsortedOperatorsList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorDoesNotExist\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterLiquidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterReactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"DeclareOperatorFeePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"ExecuteOperatorFeePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"FeeRecipientAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"LiquidationThresholdPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"MinimumLiquidationCollateralUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"NetworkEarningsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"NetworkFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"OperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"OperatorFeeDeclarationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"OperatorFeeDeclared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"OperatorFeeExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"OperatorFeeIncreaseLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxFee\",\"type\":\"uint64\"}],\"name\":\"OperatorMaximumFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"OperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"whitelisted\",\"type\":\"address\"}],\"name\":\"OperatorWhitelistUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"OperatorWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"shares\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ValidatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ValidatorRemoved\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"cancelDeclaredOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"declareOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"clusterOwner\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"executeOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"contractISSVOperators\",\"name\":\"ssvOperators_\",\"type\":\"address\"},{\"internalType\":\"contractISSVClusters\",\"name\":\"ssvClusters_\",\"type\":\"address\"},{\"internalType\":\"contractISSVDAO\",\"name\":\"ssvDAO_\",\"type\":\"address\"},{\"internalType\":\"contractISSVViews\",\"name\":\"ssvViews_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"minimumBlocksBeforeLiquidation_\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"minimumLiquidationCollateral_\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validatorsPerOperatorLimit_\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"declareOperatorFeePeriod_\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"executeOperatorFeePeriod_\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"operatorMaxFeeIncrease_\",\"type\":\"uint64\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"clusterOwner\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"liquidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"reactivate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"reduceOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"registerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes\",\"name\":\"sharesData\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"setFeeRecipientAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"whitelisted\",\"type\":\"address\"}],\"name\":\"setOperatorWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timeInSeconds\",\"type\":\"uint64\"}],\"name\":\"updateDeclareOperatorFeePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timeInSeconds\",\"type\":\"uint64\"}],\"name\":\"updateExecuteOperatorFeePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blocks\",\"type\":\"uint64\"}],\"name\":\"updateLiquidationThresholdPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxFee\",\"type\":\"uint64\"}],\"name\":\"updateMaximumOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"updateMinimumLiquidationCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumSSVModules\",\"name\":\"moduleId\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"name\":\"updateModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"updateNetworkFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"percentage\",\"type\":\"uint64\"}],\"name\":\"updateOperatorFeeIncreaseLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"withdrawAllOperatorEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNetworkEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawOperatorEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", + ABI: "[{\"inputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"constructor\"},{\"inputs\":[],\"name\":\"ApprovalNotWithinTimeframe\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotOwner\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"CallerNotWhitelisted\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterAlreadyEnabled\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterDoesNotExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterIsLiquidated\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ClusterNotLiquidatable\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ExceedValidatorLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeExceedsIncreaseLimit\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeIncreaseNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeTooHigh\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"FeeTooLow\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectClusterState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"IncorrectValidatorState\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InsufficientBalance\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidOperatorIdsLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"InvalidPublicKeyLength\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"MaxValueExceeded\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NewBlockPeriodIsBelowMinimum\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NoFeeDeclared\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"NotAuthorized\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"OperatorsListNotUnique\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"PublicKeysSharesLengthMismatch\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"SameFeeChangeNotAllowed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TargetModuleDoesNotExist\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"TokenTransferFailed\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"UnsortedOperatorsList\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorAlreadyExists\",\"type\":\"error\"},{\"inputs\":[],\"name\":\"ValidatorDoesNotExist\",\"type\":\"error\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"address\",\"name\":\"previousAdmin\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"newAdmin\",\"type\":\"address\"}],\"name\":\"AdminChanged\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"beacon\",\"type\":\"address\"}],\"name\":\"BeaconUpgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterDeposited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterLiquidated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterReactivated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ClusterWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"DeclareOperatorFeePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"ExecuteOperatorFeePeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"FeeRecipientAddressUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint8\",\"name\":\"version\",\"type\":\"uint8\"}],\"name\":\"Initialized\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"LiquidationThresholdPeriodUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"MinimumLiquidationCollateralUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"recipient\",\"type\":\"address\"}],\"name\":\"NetworkEarningsWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"oldFee\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"newFee\",\"type\":\"uint256\"}],\"name\":\"NetworkFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"OperatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"OperatorFeeDeclarationCancelled\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"OperatorFeeDeclared\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"blockNumber\",\"type\":\"uint256\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"OperatorFeeExecuted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"value\",\"type\":\"uint64\"}],\"name\":\"OperatorFeeIncreaseLimitUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":false,\"internalType\":\"uint64\",\"name\":\"maxFee\",\"type\":\"uint64\"}],\"name\":\"OperatorMaximumFeeUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"OperatorRemoved\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"address\",\"name\":\"whitelisted\",\"type\":\"address\"}],\"name\":\"OperatorWhitelistUpdated\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"indexed\":false,\"internalType\":\"uint256\",\"name\":\"value\",\"type\":\"uint256\"}],\"name\":\"OperatorWithdrawn\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferStarted\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"previousOwner\",\"type\":\"address\"},{\"indexed\":true,\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"OwnershipTransferred\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"implementation\",\"type\":\"address\"}],\"name\":\"Upgraded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"shares\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ValidatorAdded\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"}],\"name\":\"ValidatorExited\",\"type\":\"event\"},{\"anonymous\":false,\"inputs\":[{\"indexed\":true,\"internalType\":\"address\",\"name\":\"owner\",\"type\":\"address\"},{\"indexed\":false,\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"indexed\":false,\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"indexed\":false,\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"ValidatorRemoved\",\"type\":\"event\"},{\"stateMutability\":\"nonpayable\",\"type\":\"fallback\"},{\"inputs\":[],\"name\":\"acceptOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes[]\",\"name\":\"publicKeys\",\"type\":\"bytes[]\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes[]\",\"name\":\"sharesData\",\"type\":\"bytes[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"bulkRegisterValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"cancelDeclaredOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"declareOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"clusterOwner\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"deposit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"executeOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"}],\"name\":\"exitValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"getVersion\",\"outputs\":[{\"internalType\":\"string\",\"name\":\"version\",\"type\":\"string\"}],\"stateMutability\":\"pure\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"contractIERC20\",\"name\":\"token_\",\"type\":\"address\"},{\"internalType\":\"contractISSVOperators\",\"name\":\"ssvOperators_\",\"type\":\"address\"},{\"internalType\":\"contractISSVClusters\",\"name\":\"ssvClusters_\",\"type\":\"address\"},{\"internalType\":\"contractISSVDAO\",\"name\":\"ssvDAO_\",\"type\":\"address\"},{\"internalType\":\"contractISSVViews\",\"name\":\"ssvViews_\",\"type\":\"address\"},{\"internalType\":\"uint64\",\"name\":\"minimumBlocksBeforeLiquidation_\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"minimumLiquidationCollateral_\",\"type\":\"uint256\"},{\"internalType\":\"uint32\",\"name\":\"validatorsPerOperatorLimit_\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"declareOperatorFeePeriod_\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"executeOperatorFeePeriod_\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"operatorMaxFeeIncrease_\",\"type\":\"uint64\"}],\"name\":\"initialize\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"clusterOwner\",\"type\":\"address\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"liquidate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"owner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"pendingOwner\",\"outputs\":[{\"internalType\":\"address\",\"name\":\"\",\"type\":\"address\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"proxiableUUID\",\"outputs\":[{\"internalType\":\"bytes32\",\"name\":\"\",\"type\":\"bytes32\"}],\"stateMutability\":\"view\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"reactivate\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"reduceOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"registerOperator\",\"outputs\":[{\"internalType\":\"uint64\",\"name\":\"id\",\"type\":\"uint64\"}],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"bytes\",\"name\":\"shares\",\"type\":\"bytes\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"registerValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"removeOperator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"bytes\",\"name\":\"publicKey\",\"type\":\"bytes\"},{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"removeValidator\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[],\"name\":\"renounceOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"recipientAddress\",\"type\":\"address\"}],\"name\":\"setFeeRecipientAddress\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"address\",\"name\":\"whitelisted\",\"type\":\"address\"}],\"name\":\"setOperatorWhitelist\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newOwner\",\"type\":\"address\"}],\"name\":\"transferOwnership\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timeInSeconds\",\"type\":\"uint64\"}],\"name\":\"updateDeclareOperatorFeePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"timeInSeconds\",\"type\":\"uint64\"}],\"name\":\"updateExecuteOperatorFeePeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"blocks\",\"type\":\"uint64\"}],\"name\":\"updateLiquidationThresholdPeriod\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"maxFee\",\"type\":\"uint64\"}],\"name\":\"updateMaximumOperatorFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"updateMinimumLiquidationCollateral\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"enumSSVModules\",\"name\":\"moduleId\",\"type\":\"uint8\"},{\"internalType\":\"address\",\"name\":\"moduleAddress\",\"type\":\"address\"}],\"name\":\"updateModule\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"fee\",\"type\":\"uint256\"}],\"name\":\"updateNetworkFee\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"percentage\",\"type\":\"uint64\"}],\"name\":\"updateOperatorFeeIncreaseLimit\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"}],\"name\":\"upgradeTo\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"address\",\"name\":\"newImplementation\",\"type\":\"address\"},{\"internalType\":\"bytes\",\"name\":\"data\",\"type\":\"bytes\"}],\"name\":\"upgradeToAndCall\",\"outputs\":[],\"stateMutability\":\"payable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64[]\",\"name\":\"operatorIds\",\"type\":\"uint64[]\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"},{\"components\":[{\"internalType\":\"uint32\",\"name\":\"validatorCount\",\"type\":\"uint32\"},{\"internalType\":\"uint64\",\"name\":\"networkFeeIndex\",\"type\":\"uint64\"},{\"internalType\":\"uint64\",\"name\":\"index\",\"type\":\"uint64\"},{\"internalType\":\"bool\",\"name\":\"active\",\"type\":\"bool\"},{\"internalType\":\"uint256\",\"name\":\"balance\",\"type\":\"uint256\"}],\"internalType\":\"structISSVNetworkCore.Cluster\",\"name\":\"cluster\",\"type\":\"tuple\"}],\"name\":\"withdraw\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"}],\"name\":\"withdrawAllOperatorEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawNetworkEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"},{\"inputs\":[{\"internalType\":\"uint64\",\"name\":\"operatorId\",\"type\":\"uint64\"},{\"internalType\":\"uint256\",\"name\":\"amount\",\"type\":\"uint256\"}],\"name\":\"withdrawOperatorEarnings\",\"outputs\":[],\"stateMutability\":\"nonpayable\",\"type\":\"function\"}]", } // ContractABI is the input ABI used to generate the binding from. @@ -334,6 +334,27 @@ func (_Contract *ContractTransactorSession) AcceptOwnership() (*types.Transactio return _Contract.Contract.AcceptOwnership(&_Contract.TransactOpts) } +// BulkRegisterValidator is a paid mutator transaction binding the contract method 0x22f18bf5. +// +// Solidity: function bulkRegisterValidator(bytes[] publicKeys, uint64[] operatorIds, bytes[] sharesData, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() +func (_Contract *ContractTransactor) BulkRegisterValidator(opts *bind.TransactOpts, publicKeys [][]byte, operatorIds []uint64, sharesData [][]byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { + return _Contract.contract.Transact(opts, "bulkRegisterValidator", publicKeys, operatorIds, sharesData, amount, cluster) +} + +// BulkRegisterValidator is a paid mutator transaction binding the contract method 0x22f18bf5. +// +// Solidity: function bulkRegisterValidator(bytes[] publicKeys, uint64[] operatorIds, bytes[] sharesData, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() +func (_Contract *ContractSession) BulkRegisterValidator(publicKeys [][]byte, operatorIds []uint64, sharesData [][]byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { + return _Contract.Contract.BulkRegisterValidator(&_Contract.TransactOpts, publicKeys, operatorIds, sharesData, amount, cluster) +} + +// BulkRegisterValidator is a paid mutator transaction binding the contract method 0x22f18bf5. +// +// Solidity: function bulkRegisterValidator(bytes[] publicKeys, uint64[] operatorIds, bytes[] sharesData, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() +func (_Contract *ContractTransactorSession) BulkRegisterValidator(publicKeys [][]byte, operatorIds []uint64, sharesData [][]byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { + return _Contract.Contract.BulkRegisterValidator(&_Contract.TransactOpts, publicKeys, operatorIds, sharesData, amount, cluster) +} + // CancelDeclaredOperatorFee is a paid mutator transaction binding the contract method 0x23d68a6d. // // Solidity: function cancelDeclaredOperatorFee(uint64 operatorId) returns() @@ -546,23 +567,23 @@ func (_Contract *ContractTransactorSession) RegisterOperator(publicKey []byte, f // RegisterValidator is a paid mutator transaction binding the contract method 0x06e8fb9c. // -// Solidity: function registerValidator(bytes publicKey, uint64[] operatorIds, bytes sharesData, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() -func (_Contract *ContractTransactor) RegisterValidator(opts *bind.TransactOpts, publicKey []byte, operatorIds []uint64, sharesData []byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { - return _Contract.contract.Transact(opts, "registerValidator", publicKey, operatorIds, sharesData, amount, cluster) +// Solidity: function registerValidator(bytes publicKey, uint64[] operatorIds, bytes shares, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() +func (_Contract *ContractTransactor) RegisterValidator(opts *bind.TransactOpts, publicKey []byte, operatorIds []uint64, shares []byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { + return _Contract.contract.Transact(opts, "registerValidator", publicKey, operatorIds, shares, amount, cluster) } // RegisterValidator is a paid mutator transaction binding the contract method 0x06e8fb9c. // -// Solidity: function registerValidator(bytes publicKey, uint64[] operatorIds, bytes sharesData, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() -func (_Contract *ContractSession) RegisterValidator(publicKey []byte, operatorIds []uint64, sharesData []byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { - return _Contract.Contract.RegisterValidator(&_Contract.TransactOpts, publicKey, operatorIds, sharesData, amount, cluster) +// Solidity: function registerValidator(bytes publicKey, uint64[] operatorIds, bytes shares, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() +func (_Contract *ContractSession) RegisterValidator(publicKey []byte, operatorIds []uint64, shares []byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { + return _Contract.Contract.RegisterValidator(&_Contract.TransactOpts, publicKey, operatorIds, shares, amount, cluster) } // RegisterValidator is a paid mutator transaction binding the contract method 0x06e8fb9c. // -// Solidity: function registerValidator(bytes publicKey, uint64[] operatorIds, bytes sharesData, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() -func (_Contract *ContractTransactorSession) RegisterValidator(publicKey []byte, operatorIds []uint64, sharesData []byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { - return _Contract.Contract.RegisterValidator(&_Contract.TransactOpts, publicKey, operatorIds, sharesData, amount, cluster) +// Solidity: function registerValidator(bytes publicKey, uint64[] operatorIds, bytes shares, uint256 amount, (uint32,uint64,uint64,bool,uint256) cluster) returns() +func (_Contract *ContractTransactorSession) RegisterValidator(publicKey []byte, operatorIds []uint64, shares []byte, amount *big.Int, cluster ISSVNetworkCoreCluster) (*types.Transaction, error) { + return _Contract.Contract.RegisterValidator(&_Contract.TransactOpts, publicKey, operatorIds, shares, amount, cluster) } // RemoveOperator is a paid mutator transaction binding the contract method 0x2e168e0e. diff --git a/eth/contract/generate.go b/eth/contract/generate.go index 7036d660e7..69f55510b2 100644 --- a/eth/contract/generate.go +++ b/eth/contract/generate.go @@ -1,6 +1,6 @@ // Package contract generates the contract bindings for v1 contract. package contract -// contract.abi is taken from https://github.com/bloxapp/ssv-network/blob/contract-abi/docs/dev/v1.0.0.rc5/abi/SSVNetwork.json +// contract.abi is taken from https://github.com/bloxapp/ssv-network/blob/contract-abi/docs/mainnet/v1.0.2/abi/SSVNetwork.json //go:generate abigen --abi contract.abi --pkg contract --out contract.go //go:generate abigen --abi operator_public_key.abi --pkg contract --out operator_public_key.go --type OperatorPublicKey diff --git a/eth/ethtest/eth_e2e_test.go b/eth/ethtest/eth_e2e_test.go index 3c838116a6..1be160af80 100644 --- a/eth/ethtest/eth_e2e_test.go +++ b/eth/ethtest/eth_e2e_test.go @@ -244,8 +244,7 @@ func TestEthExecLayer(t *testing.T) { // Wait until the state is changed time.Sleep(time.Millisecond * 300) - clusterID, err := ssvtypes.ComputeClusterIDHash(testAddrAlice.Bytes(), []uint64{1, 2, 3, 4}) - require.NoError(t, err) + clusterID := ssvtypes.ComputeClusterIDHash(testAddrAlice, []uint64{1, 2, 3, 4}) shares := nodeStorage.Shares().List(nil, registrystorage.ByClusterID(clusterID)) require.NotEmpty(t, shares) @@ -260,8 +259,7 @@ func TestEthExecLayer(t *testing.T) { { validatorCtrl.EXPECT().ReactivateCluster(gomock.Any(), gomock.Any(), gomock.Any()).AnyTimes() - clusterID, err := ssvtypes.ComputeClusterIDHash(testAddrAlice.Bytes(), []uint64{1, 2, 3, 4}) - require.NoError(t, err) + clusterID := ssvtypes.ComputeClusterIDHash(testAddrAlice, []uint64{1, 2, 3, 4}) shares := nodeStorage.Shares().List(nil, registrystorage.ByClusterID(clusterID)) require.NotEmpty(t, shares) diff --git a/eth/eventhandler/handlers.go b/eth/eventhandler/handlers.go index 9db24f6840..b992e265c9 100644 --- a/eth/eventhandler/handlers.go +++ b/eth/eventhandler/handlers.go @@ -533,11 +533,7 @@ func (eh *EventHandler) processClusterEvent( operatorIDs []uint64, toLiquidate bool, ) ([]*ssvtypes.SSVShare, []string, error) { - clusterID, err := ssvtypes.ComputeClusterIDHash(owner.Bytes(), operatorIDs) - if err != nil { - return nil, nil, fmt.Errorf("could not compute share cluster id: %w", err) - } - + clusterID := ssvtypes.ComputeClusterIDHash(owner, operatorIDs) shares := eh.nodeStorage.Shares().List(txn, registrystorage.ByClusterID(clusterID)) toUpdate := make([]*ssvtypes.SSVShare, 0) updatedPubKeys := make([]string, 0) @@ -554,7 +550,7 @@ func (eh *EventHandler) processClusterEvent( } if len(toUpdate) > 0 { - if err = eh.nodeStorage.Shares().Save(txn, toUpdate...); err != nil { + if err := eh.nodeStorage.Shares().Save(txn, toUpdate...); err != nil { return nil, nil, fmt.Errorf("could not save validator shares: %w", err) } } diff --git a/go.mod b/go.mod index fd3d0dc56a..18c7879f5d 100644 --- a/go.mod +++ b/go.mod @@ -8,6 +8,7 @@ require ( github.com/bloxapp/eth2-key-manager v1.4.0 github.com/bloxapp/ssv-spec v0.3.6 github.com/btcsuite/btcd/btcec/v2 v2.3.2 + github.com/carlmjohnson/requests v0.23.5 github.com/cespare/xxhash/v2 v2.2.0 github.com/cornelk/hashmap v1.0.8 github.com/dgraph-io/badger/v4 v4.1.0 @@ -207,7 +208,7 @@ require ( go.uber.org/dig v1.17.0 // indirect go.uber.org/fx v1.19.2 // indirect golang.org/x/crypto v0.18.0 // indirect - golang.org/x/net v0.10.0 // indirect + golang.org/x/net v0.15.0 // indirect golang.org/x/sys v0.16.0 // indirect golang.org/x/term v0.16.0 // indirect golang.org/x/time v0.3.0 // indirect @@ -227,4 +228,4 @@ replace github.com/google/flatbuffers => github.com/google/flatbuffers v1.11.0 replace github.com/dgraph-io/ristretto => github.com/dgraph-io/ristretto v0.1.1-0.20211108053508-297c39e6640f -replace github.com/attestantio/go-eth2-client => github.com/moshe-blox/go-eth2-client v0.7.2-0.20240204094454-17f5c145f39f +replace github.com/attestantio/go-eth2-client => github.com/y0sher/go-eth2-client v0.0.0-20240225155350-c396641b4956 diff --git a/go.sum b/go.sum index d9a21ac708..24a5a4f67a 100644 --- a/go.sum +++ b/go.sum @@ -63,6 +63,8 @@ github.com/btcsuite/btcd/btcec/v2 v2.3.2 h1:5n0X6hX0Zk+6omWcihdYvdAlGf2DfasC0GMf github.com/btcsuite/btcd/btcec/v2 v2.3.2/go.mod h1:zYzJ8etWJQIv1Ogk7OzpWjowwOdXY1W/17j2MW85J04= github.com/btcsuite/btcd/chaincfg/chainhash v1.0.1 h1:q0rUy8C/TYNBQS1+CGKw68tLOFYSNEs0TFnxxnS9+4U= github.com/buger/jsonparser v0.0.0-20181115193947-bf1c66bbce23/go.mod h1:bbYlZJ7hK1yFx9hf58LP0zeX7UjIGs20ufpu3evjr+s= +github.com/carlmjohnson/requests v0.23.5 h1:NPANcAofwwSuC6SIMwlgmHry2V3pLrSqRiSBKYbNHHA= +github.com/carlmjohnson/requests v0.23.5/go.mod h1:zG9P28thdRnN61aD7iECFhH5iGGKX2jIjKQD9kqYH+o= github.com/census-instrumentation/opencensus-proto v0.2.1/go.mod h1:f6KPmirojxKA12rnyqOA5BBL4O983OfeGPqjHWSTneU= github.com/cespare/cp v1.1.1 h1:nCb6ZLdB7NRaqsm91JtQTAme2SKJzXVsdPIPkyJr1MU= github.com/cespare/xxhash/v2 v2.1.1/go.mod h1:VGX0DQ3Q6kWi7AoAeZDth3/j3BFtOZR5XLFGgcrjCOs= @@ -542,8 +544,6 @@ github.com/modern-go/reflect2 v0.0.0-20180701023420-4b7aa43c6742/go.mod h1:bx2lN github.com/modern-go/reflect2 v1.0.1/go.mod h1:bx2lNnkwVCuqBIxFjflWJWanXIb3RllmbCylyMrvgv0= github.com/modern-go/reflect2 v1.0.2 h1:xBagoLtFs94CBntxluKeaWgTMpvLxC4ur3nMaC9Gz0M= github.com/mohae/deepcopy v0.0.0-20170929034955-c48cc78d4826 h1:RWengNIwukTxcDr9M+97sNutRR1RKhG96O6jWumTTnw= -github.com/moshe-blox/go-eth2-client v0.7.2-0.20240204094454-17f5c145f39f h1:nKkhGuanOtsXIb3o60L89bf9fMLnC/sVO5r37W4GFjQ= -github.com/moshe-blox/go-eth2-client v0.7.2-0.20240204094454-17f5c145f39f/go.mod h1:TTz7YF6w4z6ahvxKiHuGPn6DbQn7gH6HPuWm/DEQeGE= github.com/moul/http2curl v1.0.0/go.mod h1:8UbvGypXm98wA/IqH45anm5Y2Z6ep6O31QGOAZ3H0fQ= github.com/mr-tron/base58 v1.1.2/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= github.com/mr-tron/base58 v1.1.3/go.mod h1:BinMc/sQntlIE1frQmRFPUoPA1Zkr8VRgBdjWI2mNwc= @@ -828,6 +828,8 @@ github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673 h1:bAn7/zixMGCfxrRT github.com/xrash/smetrics v0.0.0-20201216005158-039620a65673/go.mod h1:N3UwUGtsrSj3ccvlPHLoLsHnpR27oXr4ZE984MbSER8= github.com/xtaci/kcp-go v5.4.20+incompatible/go.mod h1:bN6vIwHQbfHaHtFpEssmWsN45a+AZwO7eyRCmEIbtvE= github.com/xtaci/lossyconn v0.0.0-20190602105132-8df528c0c9ae/go.mod h1:gXtu8J62kEgmN++bm9BVICuT/e8yiLI2KFobd/TRFsE= +github.com/y0sher/go-eth2-client v0.0.0-20240225155350-c396641b4956 h1:YmgOT2TcUkz3SJfPMXwbaumgrmpcYo4OPlR6v2IMRWs= +github.com/y0sher/go-eth2-client v0.0.0-20240225155350-c396641b4956/go.mod h1:TTz7YF6w4z6ahvxKiHuGPn6DbQn7gH6HPuWm/DEQeGE= github.com/yalp/jsonpath v0.0.0-20180802001716-5cc68e5049a0/go.mod h1:/LWChgwKmvncFJFHJ7Gvn9wZArjbV5/FppcK2fKk/tI= github.com/yudai/gojsondiff v1.0.0/go.mod h1:AY32+k2cwILAkW1fbgxQ5mUmMiZFgLIV+FBNExI05xg= github.com/yudai/golcs v0.0.0-20170316035057-ecda9a501e82/go.mod h1:lgjkn3NuSvDfVJdfcVVdX+jpBxNmX4rDAzaS45IcYoM= @@ -938,8 +940,8 @@ golang.org/x/net v0.0.0-20210428140749-89ef3d95e781/go.mod h1:OJAsFXCWl8Ukc7SiCT golang.org/x/net v0.0.0-20211008194852-3b03d305991f/go.mod h1:9nx3DQGgdP8bBQD5qxJ1jj9UTztislL4KSBs9R2vV5Y= golang.org/x/net v0.0.0-20220225172249-27dd8689420f/go.mod h1:CfG3xpIq0wQ8r1q4Su4UZFWDARRcnwPjda9FqA0JpMk= golang.org/x/net v0.0.0-20220607020251-c690dde0001d/go.mod h1:XRhObCWvk6IyKnWLug+ECip1KBveYUHfp+8e9klMJ9c= -golang.org/x/net v0.10.0 h1:X2//UzNDwYmtCLn7To6G58Wr6f5ahEAQgKNzv9Y951M= -golang.org/x/net v0.10.0/go.mod h1:0qNGK6F8kojg2nk9dLZ2mShWaEBan6FAoqfSigmmuDg= +golang.org/x/net v0.15.0 h1:ugBLEUaxABaB5AJqW9enI0ACdci2RUd4eP51NTBvuJ8= +golang.org/x/net v0.15.0/go.mod h1:idbUs1IY1+zTqbi8yxTbhexhEEk5ur9LInksu6HrEpk= golang.org/x/oauth2 v0.0.0-20170912212905-13449ad91cb2/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20180821212333-d2e6202438be/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= golang.org/x/oauth2 v0.0.0-20181017192945-9dcd33a902f4/go.mod h1:N/0e6XlmueqKjAGxoOufVs8QHGRruUQn6yWY3a++T0U= diff --git a/monitoring/grafana/dashboard_msg_validation.json b/monitoring/grafana/dashboard_msg_validation.json index 8ea0bd8f08..b3376fe3b1 100644 --- a/monitoring/grafana/dashboard_msg_validation.json +++ b/monitoring/grafana/dashboard_msg_validation.json @@ -1,9 +1,49 @@ { + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], + "__elements": {}, + "__requires": [ + { + "type": "panel", + "id": "gauge", + "name": "Gauge", + "version": "" + }, + { + "type": "grafana", + "id": "grafana", + "name": "Grafana", + "version": "10.1.5" + }, + { + "type": "datasource", + "id": "prometheus", + "name": "Prometheus", + "version": "1.0.0" + }, + { + "type": "panel", + "id": "timeseries", + "name": "Time series", + "version": "" + } + ], "annotations": { "list": [ { "builtIn": 1, - "datasource": "-- Grafana --", + "datasource": { + "type": "datasource", + "uid": "grafana" + }, "enable": true, "hide": true, "iconColor": "rgba(0, 211, 255, 1)", @@ -21,15 +61,27 @@ "editable": true, "fiscalYearStartMonth": 0, "graphTooltip": 0, - "id": 144, - "iteration": 1695134055974, + "id": null, "links": [], "liveNow": false, "panels": [ + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 0 + }, + "id": 28, + "panels": [], + "title": "Message Validation", + "type": "row" + }, { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -37,6 +89,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -48,6 +102,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -82,7 +137,7 @@ "h": 8, "w": 12, "x": 0, - "y": 0 + "y": 1 }, "id": 12, "interval": "5m", @@ -90,17 +145,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_size_count{instance=~\"$instance.*\"}[$__interval]))", @@ -112,7 +169,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"ignored\"}[$__interval]))", @@ -124,7 +181,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"rejected\"}[$__interval]))", @@ -140,7 +197,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -151,6 +208,8 @@ "seriesBy": "last" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -162,6 +221,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 0, "pointSize": 5, @@ -197,7 +257,7 @@ "h": 8, "w": 12, "x": 12, - "y": 0 + "y": 1 }, "id": 3, "interval": "5m", @@ -209,17 +269,19 @@ "mean" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"rejected\"}[$__interval]))\n/\nsum(rate(ssv_message_validation{instance=~\"$instance.*\"}[$__interval]))", @@ -233,7 +295,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"ignored\"}[$__interval]))\n/\nsum(rate(ssv_message_validation{instance=~\"$instance.*\"}[$__interval]))", @@ -265,7 +327,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -274,6 +336,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -285,6 +349,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -319,7 +384,7 @@ "h": 8, "w": 12, "x": 0, - "y": 8 + "y": 9 }, "id": 20, "interval": "5m", @@ -330,17 +395,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"ignored\"}[$__interval])) by (role) / sum(rate(ssv_message_validation{instance=~\"$instance.*\"}[$__interval])) by (role)", @@ -371,7 +438,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -380,6 +447,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -391,6 +460,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -426,7 +496,7 @@ "h": 8, "w": 12, "x": 12, - "y": 8 + "y": 9 }, "id": 22, "interval": "5m", @@ -437,17 +507,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"rejected\"}[$__interval])) by (role) / sum(rate(ssv_message_validation{instance=~\"$instance.*\"}[$__interval])) by (role)", @@ -478,7 +550,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -487,6 +559,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -498,6 +572,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -532,7 +607,7 @@ "h": 8, "w": 12, "x": 0, - "y": 16 + "y": 17 }, "id": 23, "interval": "5m", @@ -543,17 +618,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"ignored\"}[$__interval])) by (round) \n/ \nsum(rate(ssv_message_validation{instance=~\"$instance.*\"}[$__interval])) by (round)", @@ -584,7 +661,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -593,6 +670,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -604,6 +683,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -638,7 +718,7 @@ "h": 8, "w": 12, "x": 12, - "y": 16 + "y": 17 }, "id": 24, "interval": "5m", @@ -649,17 +729,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation{instance=~\"$instance.*\", status=\"rejected\"}[$__interval])) by (round) \n/ \nsum(rate(ssv_message_validation{instance=~\"$instance.*\"}[$__interval])) by (round)", @@ -690,7 +772,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -698,6 +780,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -709,6 +793,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -737,46 +822,13 @@ ] } }, - "overrides": [ - { - "__systemRef": "hideSeriesFrom", - "matcher": { - "id": "byNames", - "options": { - "mode": "exclude", - "names": [ - "duplicated proposal with different data", - "late message", - "message round is too far from estimated", - "no duty for this epoch", - "round is too high for this role", - "signer has already advanced to a later slot", - "too many messages of same type per round", - "unknown validator", - "validator is not attesting" - ], - "prefix": "All except:", - "readOnly": true - } - }, - "properties": [ - { - "id": "custom.hideFrom", - "value": { - "legend": false, - "tooltip": false, - "viz": true - } - } - ] - } - ] + "overrides": [] }, "gridPos": { "h": 8, "w": 24, "x": 0, - "y": 24 + "y": 25 }, "id": 4, "interval": "5m", @@ -788,18 +840,20 @@ ], "displayMode": "table", "placement": "right", + "showLegend": true, "sortBy": "Max", "sortDesc": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(increase(ssv_message_validation{instance=~\"$instance.*\", reason!=\"\"}[$__interval])) by (reason)", @@ -816,7 +870,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -824,6 +878,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -835,6 +891,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -869,7 +926,7 @@ "h": 8, "w": 24, "x": 0, - "y": 32 + "y": 33 }, "id": 5, "interval": "5m", @@ -880,17 +937,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(increase(ssv_message_validation_ssv_type{instance=~\"$instance.*\", type!=\"\"}[$__interval])) by (type)", @@ -907,7 +966,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -915,6 +974,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -926,6 +987,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -960,7 +1022,7 @@ "h": 8, "w": 24, "x": 0, - "y": 40 + "y": 41 }, "id": 6, "interval": "5m", @@ -971,17 +1033,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(increase(ssv_message_validation_consensus_type{instance=~\"$instance.*\", type!=\"\"}[$__interval])) by (type)", @@ -998,7 +1062,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -1006,6 +1070,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1017,6 +1083,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1051,7 +1118,7 @@ "h": 8, "w": 24, "x": 0, - "y": 48 + "y": 49 }, "id": 7, "interval": "5m", @@ -1062,17 +1129,19 @@ "max" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(increase(ssv_message_validation_consensus_type{instance=~\"$instance.*\", type=\"commit\", signers=\"1\"}[$__interval])) by (signers)", @@ -1085,7 +1154,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(sum(increase(ssv_message_validation_consensus_type{instance=~\"$instance.*\", type=\"commit\", signers!=\"1\"}[$__interval])) by (signers))", @@ -1101,7 +1170,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -1110,6 +1179,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1121,6 +1192,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1154,7 +1226,7 @@ "h": 8, "w": 24, "x": 0, - "y": 56 + "y": 57 }, "id": 19, "interval": "5m", @@ -1164,17 +1236,19 @@ "last" ], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_in_committee{instance=~\"$instance.*\"}[$__interval]))", @@ -1186,7 +1260,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "rate(ssv_message_non_committee{instance=~\"$instance.*\", decided=\"decided\"}[$__interval])", @@ -1198,7 +1272,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_non_committee{instance=~\"$instance.*\", decided=\"non-decided\"}[$__interval]))", @@ -1214,7 +1288,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -1222,6 +1296,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1233,6 +1309,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1266,7 +1343,7 @@ "h": 8, "w": 24, "x": 0, - "y": 64 + "y": 65 }, "id": 9, "interval": "5m", @@ -1274,17 +1351,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_size_sum{instance=~\"$instance.*\"}[$__interval])) / sum(rate(ssv_message_size_count{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1296,7 +1375,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.01, rate(ssv_message_size_bucket{instance=~\"$instance.*\"}[$__interval]))", @@ -1308,7 +1387,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.05, rate(ssv_message_size_bucket{instance=~\"$instance.*\"}[$__interval]))", @@ -1320,7 +1399,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.5, rate(ssv_message_size_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1332,7 +1411,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.95, rate(ssv_message_size_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1344,7 +1423,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.99, rate(ssv_message_size_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1360,7 +1439,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "Over panel interval", "fieldConfig": { @@ -1369,6 +1448,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1380,6 +1461,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1413,7 +1495,7 @@ "h": 8, "w": 24, "x": 0, - "y": 72 + "y": 73 }, "id": 13, "interval": "5m", @@ -1421,17 +1503,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_size_sum{instance=~\"$instance.*\"}[$__interval]))", @@ -1447,7 +1531,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -1455,6 +1539,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1466,6 +1552,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1500,7 +1587,7 @@ "h": 8, "w": 24, "x": 0, - "y": 80 + "y": 81 }, "id": 14, "interval": "5m", @@ -1508,17 +1595,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_validation_duration_seconds_sum{instance=~\"$instance.*\"}[$__interval])) / sum(rate(ssv_message_validation_duration_seconds_count{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1530,7 +1619,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.01, rate(ssv_message_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))", @@ -1542,7 +1631,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.05, rate(ssv_message_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))", @@ -1554,7 +1643,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.5, rate(ssv_message_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1566,7 +1655,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.95, rate(ssv_message_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1578,7 +1667,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.99, rate(ssv_message_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1594,7 +1683,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -1602,6 +1691,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1613,6 +1704,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1647,7 +1739,7 @@ "h": 8, "w": 24, "x": 0, - "y": 88 + "y": 89 }, "id": 15, "interval": "5m", @@ -1655,17 +1747,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_signature_validation_duration_seconds_sum{instance=~\"$instance.*\"}[$__interval])) / sum(rate(ssv_signature_validation_duration_seconds_count{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1677,7 +1771,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.01, rate(ssv_signature_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))", @@ -1689,7 +1783,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.05, rate(ssv_signature_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))", @@ -1701,7 +1795,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.5, rate(ssv_signature_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1713,7 +1807,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.95, rate(ssv_signature_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1725,7 +1819,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.99, rate(ssv_signature_validation_duration_seconds_bucket{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1741,7 +1835,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "description": "", "fieldConfig": { @@ -1750,6 +1844,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1761,6 +1857,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1794,7 +1891,7 @@ "h": 8, "w": 24, "x": 0, - "y": 96 + "y": 97 }, "id": 17, "interval": "5m", @@ -1802,17 +1899,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_queue_incoming{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1824,7 +1923,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_queue_outgoing{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1836,7 +1935,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_queue_drops{instance=~\"$instance.*\"}[$__interval]))\n", @@ -1852,7 +1951,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -1860,6 +1959,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1871,6 +1972,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -1904,7 +2006,7 @@ "h": 8, "w": 24, "x": 0, - "y": 104 + "y": 105 }, "id": 18, "interval": "5m", @@ -1912,17 +2014,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "ssv_message_queue_size{instance=~\"$instance.*\"}", @@ -1934,7 +2038,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "ssv_message_queue_capacity{instance=~\"$instance.*\"}", @@ -1952,7 +2056,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "fieldConfig": { "defaults": { @@ -1960,6 +2064,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -1971,6 +2077,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2005,7 +2112,7 @@ "h": 8, "w": 24, "x": 0, - "y": 112 + "y": 113 }, "id": 16, "interval": "5m", @@ -2013,17 +2120,19 @@ "legend": { "calcs": [], "displayMode": "table", - "placement": "right" + "placement": "right", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "sum(rate(ssv_message_time_in_queue_seconds_sum{instance=~\"$instance.*\"}[$__interval])) by (instance)\n/\nsum(rate(ssv_message_size_count{instance=~\"$instance.*\"}[$__interval])) by (instance)\n", @@ -2035,7 +2144,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.01, sum(rate(ssv_message_time_in_queue_seconds_bucket{instance=~\"$instance.*\"}[$__interval])) by (le, instance))\n", @@ -2047,7 +2156,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.05, sum(rate(ssv_message_time_in_queue_seconds_bucket{instance=~\"$instance.*\"}[$__interval])) by (le, instance))\n", @@ -2059,7 +2168,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.5, sum(rate(ssv_message_time_in_queue_seconds_bucket{instance=~\"$instance.*\"}[$__interval])) by (le, instance))\n", @@ -2071,7 +2180,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.95, sum(rate(ssv_message_time_in_queue_seconds_bucket{instance=~\"$instance.*\"}[$__interval])) by (le, instance))\n", @@ -2083,7 +2192,7 @@ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "$datasource" }, "exemplar": true, "expr": "histogram_quantile(0.99, sum(rate(ssv_message_time_in_queue_seconds_bucket{instance=~\"$instance.*\"}[$__interval])) by (le, instance))\n", @@ -2095,81 +2204,1161 @@ ], "title": "Message time in queue (seconds)", "type": "timeseries" - } - ], - "refresh": "", - "schemaVersion": 34, - "style": "dark", - "tags": [], - "templating": { - "list": [ - { - "current": { - "selected": true, - "text": "ssv-node-v2-4", - "value": "ssv-node-v2-4" - }, - "hide": 1, - "includeAll": false, - "multi": false, - "name": "instance", - "options": [ - { - "selected": false, - "text": "ssv-node-v2-1", - "value": "ssv-node-v2-1" + }, + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" }, - { - "selected": false, - "text": "ssv-node-v2-2", - "value": "ssv-node-v2-2" + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, - { - "selected": false, - "text": "ssv-node-v2-3", - "value": "ssv-node-v2-3" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 24, + "x": 0, + "y": 121 + }, + "id": 25, + "interval": "5m", + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "$datasource" }, - { - "selected": true, - "text": "ssv-node-v2-4", - "value": "ssv-node-v2-4" + "editorMode": "code", + "exemplar": true, + "expr": "sum(ssv_message_validation_rsa_checks{instance=~\"$instance.*\"})", + "hide": false, + "interval": "", + "legendFormat": "Count", + "range": true, + "refId": "A" + } + ], + "title": "RSA checks", + "type": "timeseries" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 129 + }, + "id": 27, + "panels": [], + "title": "Messages Increase Rate", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "fixedColor": "dark-green", + "mode": "fixed" }, - { - "selected": false, - "text": "ssv-node-v2-5", - "value": "ssv-node-v2-5" + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 8, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, - { - "selected": false, - "text": "ssv-node-v2-6", - "value": "ssv-node-v2-6" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 130 + }, + "id": 26, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - { - "selected": false, - "text": "ssv-node-v2-7", - "value": "ssv-node-v2-7" + "editorMode": "code", + "expr": "increase(ssv_message_validation_rsa_checks{instance=~\"$instance\"}[2m])", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "RSA Signatures checks per 2m ", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Increase of RSA signatures verifications in 2m ", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" }, - { - "selected": false, - "text": "ssv-node-v2-8", - "value": "ssv-node-v2-8" - } - ], - "query": "ssv-node-v2-1,ssv-node-v2-2,ssv-node-v2-3,ssv-node-v2-4,ssv-node-v2-5,ssv-node-v2-6,ssv-node-v2-7,ssv-node-v2-8", + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 130 + }, + "id": 30, + "options": { + "legend": { + "calcs": [ + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true, + "sortBy": "Min", + "sortDesc": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "increase(ssv_message_validation_rsa_checks{}[2m])", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "RSA Signatures Verifications per 2m [Common]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 2, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 138 + }, + "id": 29, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "increase(ssv_signature_verifications{instance=~\"$instance\"}[2m])", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "BLS Signatures Verifications per 2m", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "VerifyByOperators func executions per 2m all common", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 138 + }, + "id": 31, + "options": { + "legend": { + "calcs": [ + "max", + "min" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "increase(ssv_signature_verifications{}[5m])", + "instant": false, + "legendFormat": "{{pod}}", + "range": true, + "refId": "A" + } + ], + "title": "BLS Signatures Verifications per 2m [Common]", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 146 + }, + "id": 32, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(ssv_instances_started{instance=~\"$instance\"}[5m])) by (role, instance)", + "instant": false, + "legendFormat": "{{role}}", + "range": true, + "refId": "A" + } + ], + "title": "Instances Created by role increase per 5m", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 1, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [ + { + "__systemRef": "hideSeriesFrom", + "matcher": { + "id": "byNames", + "options": { + "mode": "exclude", + "names": [ + "Instances decided" + ], + "prefix": "All except:", + "readOnly": true + } + }, + "properties": [ + { + "id": "custom.hideFrom", + "value": { + "legend": false, + "tooltip": false, + "viz": true + } + } + ] + } + ] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 146 + }, + "id": 34, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(ssv_instances_started{instance=~\"$instance\"}[5m]))", + "instant": false, + "legendFormat": "Instances started", + "range": true, + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(ssv_instances_decided{instance=~\"$instance\"}[5m]))", + "hide": false, + "instant": false, + "legendFormat": "Instances decided", + "range": true, + "refId": "B" + } + ], + "title": "QBFT Instances State ", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 154 + }, + "id": 33, + "options": { + "legend": { + "calcs": [], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "sum(increase(ssv_instances_decided{instance=~\"$instance\"}[5m])) by (role, pod)", + "instant": false, + "legendFormat": "{{role}}", + "range": true, + "refId": "A" + } + ], + "title": "Instances decided by role increase per 5m", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "decimals": 4, + "mappings": [], + "max": 1, + "min": 0, + "noValue": "🤷", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red", + "value": null + }, + { + "color": "orange", + "value": 0.8 + }, + { + "color": "green", + "value": 0.9 + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 154 + }, + "id": 35, + "options": { + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "(sum(increase(ssv_instances_decided{instance=~\"$instance\"}[5m])) by (pod) ) / (sum(increase(ssv_instances_started{instance=~\"$instance\"}[5m])) by (pod))", + "hide": false, + "instant": false, + "legendFormat": "__auto", + "range": true, + "refId": "A" + } + ], + "title": "QBFT Instances Decided / Instances Stated rate", + "type": "gauge" + }, + { + "collapsed": false, + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 162 + }, + "id": 36, + "panels": [], + "title": "Scoring", + "type": "row" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 0, + "y": 163 + }, + "id": 38, + "options": { + "legend": { + "calcs": [ + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "ssv:p2p:pubsub:score:inspect{instance=~\"$instance\"}", + "instant": false, + "legendFormat": "{{pid}}", + "range": true, + "refId": "A" + } + ], + "title": "Total score", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Invalid message deliveries by peer", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green", + "value": null + }, + { + "color": "red", + "value": 80 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 8, + "w": 12, + "x": 12, + "y": 163 + }, + "id": 37, + "options": { + "legend": { + "calcs": [ + "max", + "min" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "editorMode": "code", + "expr": "ssv:p2p:pubsub:score:invalid_message_deliveries{instance=~\"$instance\"}", + "instant": false, + "legendFormat": "{{pid}}", + "range": true, + "refId": "A" + } + ], + "title": "P4 counter - Invalid message deliveries by peer", + "type": "timeseries" + } + ], + "refresh": "", + "schemaVersion": 38, + "style": "dark", + "tags": [], + "templating": { + "list": [ + { + "current": {}, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "definition": "label_values(ssv_message_size_count,instance)", + "description": "", + "hide": 0, + "includeAll": false, + "multi": false, + "name": "instance", + "options": [], + "query": { + "qryType": 1, + "query": "label_values(ssv_message_size_count,instance)", + "refId": "instance" + }, + "refresh": 2, + "regex": "", + "skipUrlSync": false, + "sort": 0, + "type": "query" + }, + { + "current": { + "selected": true, + "text": "Prometheus", + "value": "EwBd0u7Sk" + }, + "hide": 0, + "includeAll": false, + "multi": false, + "name": "datasource", + "options": [], + "query": "prometheus", "queryValue": "", + "refresh": 1, + "regex": "", "skipUrlSync": false, - "type": "custom" + "type": "datasource" } ] }, "time": { - "from": "now-24h", + "from": "now-15m", "to": "now" }, "timepicker": {}, "timezone": "", "title": "Message Validation", "uid": "DppaYPgSk", - "version": 42, + "version": 45, "weekStart": "" } \ No newline at end of file diff --git a/monitoring/grafana/dashboard_ssv_node.json b/monitoring/grafana/dashboard_ssv_node.json index 8cd88a8d37..a00ce19dbd 100644 --- a/monitoring/grafana/dashboard_ssv_node.json +++ b/monitoring/grafana/dashboard_ssv_node.json @@ -1,4 +1,14 @@ { + "__inputs": [ + { + "name": "DS_PROMETHEUS", + "label": "Prometheus", + "description": "", + "type": "datasource", + "pluginId": "prometheus", + "pluginName": "Prometheus" + } + ], "__elements": {}, "__requires": [ { @@ -11,7 +21,7 @@ "type": "grafana", "id": "grafana", "name": "Grafana", - "version": "10.2.0" + "version": "10.1.5" }, { "type": "panel", @@ -74,7 +84,7 @@ "liveNow": false, "panels": [ { - "collapsed": false, + "collapsed": true, "datasource": { "type": "prometheus", "uid": "${datasource}" @@ -86,2119 +96,2116 @@ "y": 0 }, "id": 20, - "targets": [ + "panels": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" - }, - "refId": "A" - } - ], - "title": "Node Health", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Current status of the beacon, ETH1 and SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "uid": "${DS_PROMETHEUS}" }, - "mappings": [ - { - "options": { - "0": { - "index": 0, - "text": "Unknown" - }, - "1": { - "index": 1, - "text": "Syncing" - }, - "2": { - "index": 2, - "text": "OK" - } - }, - "type": "value" - } - ], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "#EAB839", - "value": 1 + "description": "Current status of the beacon, ETH1 and SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" }, - { - "color": "green", - "value": 2 + "mappings": [ + { + "options": { + "0": { + "index": 0, + "text": "Unknown" + }, + "1": { + "index": 1, + "text": "Syncing" + }, + "2": { + "index": 2, + "text": "OK" + } + }, + "type": "value" + } + ], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "green", + "value": 2 + } + ] } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "SSV Operator" }, - "properties": [ + "overrides": [ { - "id": "mappings", - "value": [ + "matcher": { + "id": "byName", + "options": "SSV Operator" + }, + "properties": [ { - "options": { - "0": { - "color": "red", - "index": 2, - "text": "Down" - }, - "1": { - "color": "yellow", - "index": 1, - "text": "Error" - }, - "2": { - "color": "green", - "index": 0, - "text": "Up" + "id": "mappings", + "value": [ + { + "options": { + "0": { + "color": "red", + "index": 2, + "text": "Down" + }, + "1": { + "color": "yellow", + "index": 1, + "text": "Error" + }, + "2": { + "color": "green", + "index": 0, + "text": "Up" + } + }, + "type": "value" } - }, - "type": "value" + ] + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "green", + "value": 2 + } + ] + } } ] + } + ] + }, + "gridPos": { + "h": 5, + "w": 12, + "x": 0, + "y": 17 + }, + "id": 42, + "options": { + "minVizHeight": 75, + "minVizWidth": 75, + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "showThresholdLabels": false, + "showThresholdMarkers": true, + "text": {} + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { + "editorMode": "code", + "exemplar": false, + "expr": "ssv_beacon_status{instance=~\"$instance.*\"}", + "instant": true, + "interval": "", + "legendFormat": "Beacon", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "ssv_eth1_status{instance=~\"$instance.*\"}", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "ETH1", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "(ssv_node_status{instance=~\"$instance.*\"} + 1) or (absent(ssv_node_status{instance=~\"$instance.*\"}) * 0)", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "SSV Operator", + "refId": "C" + } + ], + "title": "Current Health Status", + "type": "gauge" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Health status of the beacon node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 8, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "0": { "color": "red", - "value": null + "index": 0, + "text": "Unknown" }, - { - "color": "#EAB839", - "value": 1 + "1": { + "color": "yellow", + "index": 1, + "text": "Syncing" }, - { + "2": { "color": "green", - "value": 2 + "index": 2, + "text": "OK" } - ] + }, + "type": "value" } + ], + "max": 2, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "green", + "value": 2 + } + ] } - ] - } - ] - }, - "gridPos": { - "h": 5, - "w": 12, - "x": 0, - "y": 1 - }, - "id": 42, - "options": { - "minVizHeight": 75, - "minVizWidth": 75, - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 12, + "y": 17 + }, + "id": 48, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.0.4", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ssv_beacon_status{instance=~\"$instance.*\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } ], - "fields": "", - "values": false + "title": "Beacon Node Health", + "type": "timeseries" }, - "showThresholdLabels": false, - "showThresholdMarkers": true, - "text": {} - }, - "pluginVersion": "10.2.0", - "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, - "editorMode": "code", - "exemplar": false, - "expr": "ssv_beacon_status{instance=~\"$instance.*\"}", - "instant": true, - "interval": "", - "legendFormat": "Beacon", - "refId": "A" + "description": "Health status of the ETH1 node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 8, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "0": { + "color": "super-light-red", + "index": 0, + "text": "Unknown" + }, + "1": { + "color": "yellow", + "index": 1, + "text": "Syncing" + }, + "2": { + "color": "green", + "index": 2, + "text": "OK" + } + }, + "type": "value" + } + ], + "max": 2, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "#EAB839", + "value": 1 + }, + { + "color": "green", + "value": 2 + } + ] + } + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 16, + "y": 17 + }, + "id": 46, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.0.4", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ssv_eth1_status{instance=~\"$instance.*\"}", + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "ETH1 Node Health", + "type": "timeseries" }, { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, - "exemplar": false, - "expr": "ssv_eth1_status{instance=~\"$instance.*\"}", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "ETH1", - "refId": "B" - }, + "description": "Health status of the SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 8, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [ + { + "options": { + "0": { + "color": "red", + "index": 2, + "text": "Down" + }, + "1": { + "color": "yellow", + "index": 1, + "text": "Error" + }, + "2": { + "color": "green", + "index": 0, + "text": "Up" + } + }, + "type": "value" + } + ], + "max": 2, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "none" + }, + "overrides": [] + }, + "gridPos": { + "h": 5, + "w": 4, + "x": 20, + "y": 17 + }, + "id": 44, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": false + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "pluginVersion": "8.0.4", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ssv_node_status{instance=~\"$instance.*\"} + 1", + "format": "time_series", + "instant": false, + "interval": "", + "legendFormat": "{{pod}}", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "absent(ssv_node_status{instance=~\"$instance.*\"}) * 0", + "hide": false, + "interval": "", + "legendFormat": "", + "refId": "B" + } + ], + "title": "SSV Operator Node Health", + "type": "timeseries" + } + ], + "targets": [ { "datasource": { "type": "prometheus", "uid": "${datasource}" }, - "exemplar": false, - "expr": "(ssv_node_status{instance=~\"$instance.*\"} + 1) or (absent(ssv_node_status{instance=~\"$instance.*\"}) * 0)", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "SSV Operator", - "refId": "C" + "refId": "A" } ], - "title": "Current Health Status", - "type": "gauge" + "title": "Node Health", + "type": "row" }, { + "collapsed": true, "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "prometheus" }, - "description": "Health status of the beacon node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 8, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 1 + }, + "id": 18, + "panels": [ + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "decimals": 2, + "description": "RAM memory usage of the SSV operator node", + "editable": true, + "error": false, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 10, + "w": 8, + "x": 0, + "y": 18 + }, + "hiddenSeries": false, + "id": 16, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "hideEmpty": false, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "sideWidth": 200, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "paceLength": 10, + "percentage": false, + "pluginVersion": "10.1.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ { - "options": { - "0": { - "color": "red", - "index": 0, - "text": "Unknown" - }, - "1": { - "color": "yellow", - "index": 1, - "text": "Syncing" - }, - "2": { - "color": "green", - "index": 2, - "text": "OK" - } + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "type": "value" + "exemplar": true, + "expr": "sum (container_memory_working_set_bytes{image!=\"\", pod=~\"$instance.*\"}) by (pod)", + "format": "time_series", + "hide": false, + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ pod }}", + "metric": "container_memory_usage:sort_desc", + "refId": "A", + "step": 10 } ], - "max": 2, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null + "thresholds": [], + "timeRegions": [], + "title": "Memory Usage (RAM)", + "tooltip": { + "msResolution": false, + "shared": true, + "sort": 2, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:65", + "format": "bytes", + "logBase": 1, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:66", + "format": "short", + "logBase": 1, + "show": false + } + ], + "yaxis": { + "align": false + } + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Go memory usage of the SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" }, - { - "color": "#EAB839", - "value": 1 + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "decbytes" + }, + "overrides": [] + }, + "gridPos": { + "h": 10, + "w": 8, + "x": 8, + "y": 18 + }, + "id": 14, + "options": { + "legend": { + "calcs": [ + "min", + "max", + "mean", + "lastNotNull" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "go_memstats_sys_bytes{instance=~\"$instance.*\"}", + "interval": "", + "legendFormat": "sys_bytes", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "go_memstats_heap_idle_bytes{instance=~\"$instance.*\"}", + "hide": false, + "interval": "", + "legendFormat": "heap_idle_bytes", + "refId": "B" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "go_memstats_heap_inuse_bytes{instance=~\"$instance.*\"}", + "hide": false, + "interval": "", + "legendFormat": "heap_inuse_bytes", + "refId": "C" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, + "exemplar": true, + "expr": "go_memstats_stack_inuse_bytes{instance=~\"$instance.*\"}", + "hide": false, + "interval": "", + "legendFormat": "stack_inuse_bytes", + "refId": "D" + } + ], + "title": "Memory (Go)", + "type": "timeseries" + }, + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of go routines running on the SSV operator node", + "fieldConfig": { + "defaults": {}, + "overrides": [ { - "color": "green", - "value": 2 + "matcher": { + "id": "byName", + "options": "Value #A" + }, + "properties": [ + { + "id": "displayName", + "value": "SSV Node" + } + ] } ] + }, + "fill": 1, + "fillGradient": 0, + "gridPos": { + "h": 10, + "w": 8, + "x": 16, + "y": 18 + }, + "hiddenSeries": false, + "id": 22, + "legend": { + "alignAsTable": true, + "avg": false, + "current": true, + "max": true, + "min": true, + "show": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 1, + "nullPointMode": "null", + "options": { + "alertThreshold": true + }, + "percentage": false, + "pluginVersion": "10.1.5", + "pointradius": 2, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": false, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "go_goroutines{instance=~\"$instance.*\"}", + "format": "table", + "interval": "", + "legendFormat": "{{ pod }}", + "refId": "A" + } + ], + "thresholds": [], + "timeRegions": [], + "title": "Goroutines", + "tooltip": { + "shared": true, + "sort": 0, + "value_type": "individual" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:66", + "format": "short", + "logBase": 1, + "min": "0", + "show": true + }, + { + "$$hashKey": "object:67", + "format": "short", + "logBase": 1, + "show": true + } + ], + "yaxis": { + "align": false } }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 12, - "y": 1 - }, - "id": 48, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false + { + "aliasColors": {}, + "bars": false, + "dashLength": 10, + "dashes": false, + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "decimals": 3, + "description": "CPU usage of the SSV operator node", + "editable": true, + "error": false, + "fieldConfig": { + "defaults": { + "unit": "none" + }, + "overrides": [] + }, + "fill": 0, + "fillGradient": 0, + "grid": {}, + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 28 + }, + "height": "", + "hiddenSeries": false, + "id": 24, + "legend": { + "alignAsTable": true, + "avg": true, + "current": true, + "max": true, + "min": false, + "rightSide": false, + "show": true, + "sort": "current", + "sortDesc": true, + "total": false, + "values": true + }, + "lines": true, + "linewidth": 2, + "links": [], + "nullPointMode": "connected", + "options": { + "alertThreshold": true + }, + "paceLength": 10, + "percentage": false, + "pluginVersion": "10.1.5", + "pointradius": 5, + "points": false, + "renderer": "flot", + "seriesOverrides": [], + "spaceLength": 10, + "stack": false, + "steppedLine": true, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\", pod=~\"$instance.*\"}[1m])) by (pod)", + "format": "time_series", + "hide": false, + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "{{ pod }}", + "metric": "container_cpu", + "refId": "A", + "step": 10 + } + ], + "thresholds": [], + "timeRegions": [], + "title": "CPU Usage", + "tooltip": { + "msResolution": true, + "shared": true, + "sort": 2, + "value_type": "cumulative" + }, + "type": "graph", + "xaxis": { + "mode": "time", + "show": true, + "values": [] + }, + "yaxes": [ + { + "$$hashKey": "object:179", + "format": "none", + "label": "cores", + "logBase": 1, + "show": true + }, + { + "$$hashKey": "object:180", + "format": "short", + "logBase": 1, + "show": false + } + ], + "yaxis": { + "align": false + } }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.0.4", - "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "ssv_beacon_status{instance=~\"$instance.*\"}", - "interval": "", - "legendFormat": "", - "refId": "A" - } - ], - "title": "Beacon Node Health", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Health status of the ETH1 node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" + "uid": "${DS_PROMETHEUS}" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 8, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" + "description": "Hard drive memory usage of the SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 5, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "decbytes" }, - "thresholdsStyle": { - "mode": "off" + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 8, + "y": 28 + }, + "id": 26, + "options": { + "legend": { + "calcs": [ + "max", + "min", + "last" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" } }, - "mappings": [ + "targets": [ { - "options": { - "0": { - "color": "super-light-red", - "index": 0, - "text": "Unknown" + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "((kubelet_volume_stats_used_bytes{persistentvolumeclaim=\"$instance\"} / kubelet_volume_stats_capacity_bytes{persistentvolumeclaim=\"$instance\"}) * 100)", + "hide": true, + "interval": "", + "legendFormat": "", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "kubelet_volume_stats_used_bytes{persistentvolumeclaim=\"$instance\"}", + "format": "time_series", + "hide": false, + "instant": false, + "interval": "", + "intervalFactor": 1, + "legendFormat": "{{persistentvolumeclaim}}", + "refId": "B" + } + ], + "title": "Disk Usage", + "transformations": [], + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Network input and output usage of the SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 10, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 2, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" }, - "1": { - "color": "yellow", - "index": 1, - "text": "Syncing" + "showPoints": "never", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" }, - "2": { - "color": "green", - "index": 2, - "text": "OK" + "thresholdsStyle": { + "mode": "off" } }, - "type": "value" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + }, + "unit": "Bps" + }, + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 8, + "x": 16, + "y": 28 + }, + "id": 28, + "links": [], + "options": { + "legend": { + "calcs": [ + "min", + "mean", + "max" + ], + "displayMode": "table", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" } - ], - "max": 2, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null + }, + "pluginVersion": "8.3.4", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - { - "color": "#EAB839", - "value": 1 + "exemplar": true, + "expr": "sum (rate (container_network_receive_bytes_total{pod=~\"$instance.*\"}[1m])) by (pod)", + "hide": false, + "instant": false, + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "in {{pod}}", + "metric": "network", + "refId": "A", + "step": 10 + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - { - "color": "green", - "value": 2 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 16, - "y": 1 - }, - "id": 46, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" + "exemplar": true, + "expr": "sum (rate (container_network_transmit_bytes_total{pod=~\"$instance.*\"}[1m])) by (pod)", + "hide": false, + "instant": false, + "interval": "10s", + "intervalFactor": 1, + "legendFormat": "out {{pod}}", + "metric": "network", + "refId": "B", + "step": 10 + } + ], + "title": "Network I/O (1m rate)", + "type": "timeseries" } - }, - "pluginVersion": "8.0.4", + ], "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "prometheus" }, - "exemplar": true, - "expr": "ssv_eth1_status{instance=~\"$instance.*\"}", - "interval": "", - "legendFormat": "", "refId": "A" } ], - "title": "ETH1 Node Health", - "type": "timeseries" + "title": "Resource Usage", + "type": "row" }, { + "collapsed": true, "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "prometheus" }, - "description": "Health status of the SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" + "gridPos": { + "h": 1, + "w": 24, + "x": 0, + "y": 2 + }, + "id": 12, + "panels": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 8, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false + "description": "Number of connected peers to the SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "mappings": [], + "noValue": "No Peers", + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "red" + }, + { + "color": "#EAB839", + "value": 2 + }, + { + "color": "green", + "value": 3 + } + ] + } }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [ - { - "options": { - "0": { - "color": "red", - "index": 2, - "text": "Down" - }, - "1": { - "color": "yellow", - "index": 1, - "text": "Error" - }, - "2": { - "color": "green", - "index": 0, - "text": "Up" - } - }, - "type": "value" - } - ], - "max": 2, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "none" - }, - "overrides": [] - }, - "gridPos": { - "h": 5, - "w": 4, - "x": 20, - "y": 1 - }, - "id": 44, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": false - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.0.4", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "ssv_node_status{instance=~\"$instance.*\"} + 1", - "format": "time_series", - "instant": false, - "interval": "", - "legendFormat": "{{pod}}", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "absent(ssv_node_status{instance=~\"$instance.*\"}) * 0", - "hide": false, - "interval": "", - "legendFormat": "", - "refId": "B" - } - ], - "title": "SSV Operator Node Health", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 6 - }, - "id": 18, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "refId": "A" - } - ], - "title": "Resource Usage", - "type": "row" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "decimals": 2, - "description": "RAM memory usage of the SSV operator node", - "editable": true, - "error": false, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 10, - "w": 8, - "x": 0, - "y": 7 - }, - "hiddenSeries": false, - "id": 16, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "hideEmpty": false, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "sideWidth": 200, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "10.2.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum (container_memory_working_set_bytes{image!=\"\", pod=~\"$instance.*\"}) by (pod)", - "format": "time_series", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "{{ pod }}", - "metric": "container_memory_usage:sort_desc", - "refId": "A", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Memory Usage (RAM)", - "tooltip": { - "msResolution": false, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:65", - "format": "bytes", - "logBase": 1, - "min": "0", - "show": true - }, - { - "$$hashKey": "object:66", - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Go memory usage of the SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 10, - "w": 8, - "x": 8, - "y": 7 - }, - "id": 14, - "options": { - "legend": { - "calcs": [ - "min", - "max", - "mean", - "lastNotNull" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "go_memstats_sys_bytes{instance=~\"$instance.*\"}", - "interval": "", - "legendFormat": "sys_bytes", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "go_memstats_heap_idle_bytes{instance=~\"$instance.*\"}", - "hide": false, - "interval": "", - "legendFormat": "heap_idle_bytes", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "go_memstats_heap_inuse_bytes{instance=~\"$instance.*\"}", - "hide": false, - "interval": "", - "legendFormat": "heap_inuse_bytes", - "refId": "C" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "go_memstats_stack_inuse_bytes{instance=~\"$instance.*\"}", - "hide": false, - "interval": "", - "legendFormat": "stack_inuse_bytes", - "refId": "D" - } - ], - "title": "Memory (Go)", - "type": "timeseries" - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Number of go routines running on the SSV operator node", - "fieldConfig": { - "defaults": {}, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Value #A" - }, - "properties": [ - { - "id": "displayName", - "value": "SSV Node" - } - ] - } - ] - }, - "fill": 1, - "fillGradient": 0, - "gridPos": { - "h": 10, - "w": 8, - "x": 16, - "y": 7 - }, - "hiddenSeries": false, - "id": 22, - "legend": { - "alignAsTable": true, - "avg": false, - "current": true, - "max": true, - "min": true, - "show": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 1, - "nullPointMode": "null", - "options": { - "alertThreshold": true - }, - "percentage": false, - "pluginVersion": "10.2.0", - "pointradius": 2, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": false, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "go_goroutines{instance=~\"$instance.*\"}", - "format": "table", - "interval": "", - "legendFormat": "{{ pod }}", - "refId": "A" - } - ], - "thresholds": [], - "timeRegions": [], - "title": "Goroutines", - "tooltip": { - "shared": true, - "sort": 0, - "value_type": "individual" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:66", - "format": "short", - "logBase": 1, - "min": "0", - "show": true - }, - { - "$$hashKey": "object:67", - "format": "short", - "logBase": 1, - "show": true - } - ], - "yaxis": { - "align": false - } - }, - { - "aliasColors": {}, - "bars": false, - "dashLength": 10, - "dashes": false, - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "decimals": 3, - "description": "CPU usage of the SSV operator node", - "editable": true, - "error": false, - "fieldConfig": { - "defaults": { - "unit": "none" - }, - "overrides": [] - }, - "fill": 0, - "fillGradient": 0, - "grid": {}, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 17 - }, - "height": "", - "hiddenSeries": false, - "id": 24, - "legend": { - "alignAsTable": true, - "avg": true, - "current": true, - "max": true, - "min": false, - "rightSide": false, - "show": true, - "sort": "current", - "sortDesc": true, - "total": false, - "values": true - }, - "lines": true, - "linewidth": 2, - "links": [], - "nullPointMode": "connected", - "options": { - "alertThreshold": true - }, - "paceLength": 10, - "percentage": false, - "pluginVersion": "10.2.0", - "pointradius": 5, - "points": false, - "renderer": "flot", - "seriesOverrides": [], - "spaceLength": 10, - "stack": false, - "steppedLine": true, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum (rate (container_cpu_usage_seconds_total{image!=\"\", pod=~\"$instance.*\"}[1m])) by (pod)", - "format": "time_series", - "hide": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "{{ pod }}", - "metric": "container_cpu", - "refId": "A", - "step": 10 - } - ], - "thresholds": [], - "timeRegions": [], - "title": "CPU Usage", - "tooltip": { - "msResolution": true, - "shared": true, - "sort": 2, - "value_type": "cumulative" - }, - "type": "graph", - "xaxis": { - "mode": "time", - "show": true, - "values": [] - }, - "yaxes": [ - { - "$$hashKey": "object:179", - "format": "none", - "label": "cores", - "logBase": 1, - "show": true - }, - { - "$$hashKey": "object:180", - "format": "short", - "logBase": 1, - "show": false - } - ], - "yaxis": { - "align": false - } - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Hard drive memory usage of the SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 5, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "decbytes" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 8, - "y": 17 - }, - "id": 26, - "options": { - "legend": { - "calcs": [ - "max", - "min", - "last" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "((kubelet_volume_stats_used_bytes{persistentvolumeclaim=\"$instance\"} / kubelet_volume_stats_capacity_bytes{persistentvolumeclaim=\"$instance\"}) * 100)", - "hide": true, - "interval": "", - "legendFormat": "", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "kubelet_volume_stats_used_bytes{persistentvolumeclaim=\"$instance\"}", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "intervalFactor": 1, - "legendFormat": "{{persistentvolumeclaim}}", - "refId": "B" - } - ], - "title": "Disk Usage", - "transformations": [], - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Network input and output usage of the SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 10, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 2, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "never", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - }, - { - "color": "red", - "value": 80 - } - ] - }, - "unit": "Bps" - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 16, - "y": 17 - }, - "id": 28, - "links": [], - "options": { - "legend": { - "calcs": [ - "min", - "mean", - "max" - ], - "displayMode": "table", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "pluginVersion": "8.3.4", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum (rate (container_network_receive_bytes_total{pod=~\"$instance.*\"}[1m])) by (pod)", - "hide": false, - "instant": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "in {{pod}}", - "metric": "network", - "refId": "A", - "step": 10 - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "sum (rate (container_network_transmit_bytes_total{pod=~\"$instance.*\"}[1m])) by (pod)", - "hide": false, - "instant": false, - "interval": "10s", - "intervalFactor": 1, - "legendFormat": "out {{pod}}", - "metric": "network", - "refId": "B", - "step": 10 - } - ], - "title": "Network I/O (1m rate)", - "type": "timeseries" - }, - { - "collapsed": false, - "datasource": { - "type": "prometheus", - "uid": "prometheus" - }, - "gridPos": { - "h": 1, - "w": 24, - "x": 0, - "y": 26 - }, - "id": 12, - "panels": [], - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "prometheus" + "overrides": [] }, - "refId": "A" - } - ], - "title": "Network Discovery", - "type": "row" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Number of connected peers to the SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "gridPos": { + "h": 11, + "w": 4, + "x": 0, + "y": 19 }, - "mappings": [], - "noValue": "No Peers", - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "red", - "value": null - }, - { - "color": "#EAB839", - "value": 2 + "id": 52, + "options": { + "colorMode": "value", + "graphMode": "area", + "justifyMode": "auto", + "orientation": "auto", + "reduceOptions": { + "calcs": [ + "lastNotNull" + ], + "fields": "", + "values": false + }, + "text": {}, + "textMode": "auto" + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - { - "color": "green", - "value": 3 - } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 4, - "x": 0, - "y": 27 - }, - "id": 52, - "options": { - "colorMode": "value", - "graphMode": "area", - "justifyMode": "auto", - "orientation": "auto", - "reduceOptions": { - "calcs": [ - "lastNotNull" - ], - "fields": "", - "values": false - }, - "text": {}, - "textMode": "auto" - }, - "pluginVersion": "10.2.0", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "ssv_p2p_all_connected_peers{instance=~\"$instance.*\"}", - "interval": "", - "legendFormat": "{{pubKey}}", - "refId": "A" - } - ], - "title": "Connected Peers", - "type": "stat" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Subnet peer distribution based on topic", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisBorderShow": false, - "axisCenteredZero": false, - "axisColorMode": "text", - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "insertNulls": false, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" - }, - "thresholdsStyle": { - "mode": "off" + "exemplar": true, + "expr": "ssv_p2p_all_connected_peers{instance=~\"$instance.*\"}", + "interval": "", + "legendFormat": "{{pubKey}}", + "refId": "A" } - }, - "decimals": 0, - "mappings": [], - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green", - "value": null - } - ] - }, - "unit": "short" - }, - "overrides": [] - }, - "gridPos": { - "h": 11, - "w": 20, - "x": 4, - "y": 27 - }, - "id": 57, - "options": { - "legend": { - "calcs": [ - "lastNotNull", - "max", - "mean" ], - "displayMode": "table", - "placement": "right", - "showLegend": true + "title": "Connected Peers", + "type": "stat" }, - "tooltip": { - "mode": "single", - "sort": "none" - } - }, - "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "ssv_p2p_connected_peers{instance=~\"$instance.*\"}", - "interval": "", - "legendFormat": "{{pubKey}}", - "refId": "A" - } - ], - "title": "Subnet Peers Distribution ", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Subnet peers breakdown table of the SSV operator node", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "uid": "${DS_PROMETHEUS}" }, - "custom": { - "align": "center", - "cellOptions": { - "type": "color-text" + "description": "Subnet peer distribution based on topic", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "decimals": 0, + "mappings": [], + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "short" }, - "width": 150 + "overrides": [] }, - "mappings": [], - "max": 15, - "min": 0, - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "#ccccdc" - } - ] - } + "gridPos": { + "h": 11, + "w": 20, + "x": 4, + "y": 19 + }, + "id": 57, + "options": { + "legend": { + "calcs": [ + "lastNotNull", + "max", + "mean" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "ssv_p2p_connected_peers{instance=~\"$instance.*\"}", + "interval": "", + "legendFormat": "{{pubKey}}", + "refId": "A" + } + ], + "title": "Subnet Peers Distribution ", + "type": "timeseries" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "subnet" - }, - "properties": [ - { - "id": "custom.cellOptions", - "value": { - "type": "auto" - } + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Subnet peers breakdown table of the SSV operator node", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" }, - { - "id": "unit", - "value": "short" + "custom": { + "align": "center", + "cellOptions": { + "type": "color-text" + }, + "inspect": false, + "width": 150 + }, + "mappings": [], + "max": 15, + "min": 0, + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "#ccccdc" + } + ] } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Value #C" }, - "properties": [ - { - "id": "custom.width", - "value": 100 - }, + "overrides": [ { - "id": "thresholds", - "value": { - "mode": "absolute", - "steps": [ - { - "color": "#ccccdc" - }, - { - "color": "#ccccdc", - "value": 1 + "matcher": { + "id": "byName", + "options": "subnet" + }, + "properties": [ + { + "id": "custom.cellOptions", + "value": { + "type": "auto" } - ] - } + }, + { + "id": "unit", + "value": "short" + } + ] }, { - "id": "mappings", - "value": [ + "matcher": { + "id": "byName", + "options": "Value #C" + }, + "properties": [ + { + "id": "custom.width", + "value": 100 + }, + { + "id": "thresholds", + "value": { + "mode": "absolute", + "steps": [ + { + "color": "#ccccdc" + }, + { + "color": "#ccccdc", + "value": 1 + } + ] + } + }, { - "options": { - "0": { - "index": 0, - "text": "False" - }, - "1": { - "index": 1, - "text": "True" + "id": "mappings", + "value": [ + { + "options": { + "0": { + "index": 0, + "text": "False" + }, + "1": { + "index": 1, + "text": "True" + } + }, + "type": "value" } - }, - "type": "value" + ] } ] } ] - } - ] - }, - "gridPos": { - "h": 9, - "w": 8, - "x": 0, - "y": 38 - }, - "id": 54, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" - ], - "show": false - }, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "8.3.4", - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": false, - "expr": "ssv:network:subnets:known{instance=~\"$instance.*\"}", - "format": "table", - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" }, - "exemplar": false, - "expr": "ssv:network:subnets:connected{instance=~\"$instance.*\"}", - "format": "table", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" + "gridPos": { + "h": 9, + "w": 8, + "x": 0, + "y": 30 }, - "exemplar": false, - "expr": "ssv:network:subnets:my{instance=~\"$instance.*\"}", - "format": "table", - "hide": false, - "instant": true, - "interval": "", - "legendFormat": "", - "refId": "C" - } - ], - "title": "Subnets Peers Count", - "transformations": [ - { - "id": "seriesToColumns", - "options": { - "byField": "subnet" - } - }, - { - "id": "organize", + "id": 54, "options": { - "excludeByName": { - "Time 1": true, - "Time 2": true, - "Time 3": true, - "Value #C": false, - "__name__ 1": true, - "__name__ 2": true, - "__name__ 3": true, - "instance 1": true, - "instance 2": true, - "instance 3": true, - "job 1": true, - "job 2": true, - "job 3": true + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "ssv:network:subnets:known{instance=~\"$instance.*\"}", + "format": "table", + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "A" }, - "indexByName": { - "Time 1": 2, - "Time 2": 7, - "Time 3": 12, - "Value #A": 6, - "Value #B": 11, - "Value #C": 1, - "__name__ 1": 3, - "__name__ 2": 8, - "__name__ 3": 13, - "instance 1": 4, - "instance 2": 9, - "instance 3": 14, - "job 1": 5, - "job 2": 10, - "job 3": 15, - "subnet": 0 + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "ssv:network:subnets:connected{instance=~\"$instance.*\"}", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "B" }, - "renameByName": { - "Time 2": "", - "Value #A": "Known Peers (DHT)", - "Value #B": "Connected Peers", - "Value #C": "Subscribed", - "__name__ 3": "", - "subnet": "Subnet" + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": false, + "expr": "ssv:network:subnets:my{instance=~\"$instance.*\"}", + "format": "table", + "hide": false, + "instant": true, + "interval": "", + "legendFormat": "", + "refId": "C" } - } - } - ], - "type": "table" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "The discovery rate of the subnet peers.\nFound is rate per second of nodes that were found with discovery. Rejected is rate per second of nodes that were found with discovery but rejected because of limit or subnet", - "fieldConfig": { - "defaults": { - "color": { - "mode": "palette-classic" - }, - "custom": { - "axisLabel": "", - "axisPlacement": "auto", - "barAlignment": 0, - "drawStyle": "line", - "fillOpacity": 0, - "gradientMode": "none", - "hideFrom": { - "legend": false, - "tooltip": false, - "viz": false - }, - "lineInterpolation": "linear", - "lineWidth": 1, - "pointSize": 5, - "scaleDistribution": { - "type": "linear" - }, - "showPoints": "auto", - "spanNulls": false, - "stacking": { - "group": "A", - "mode": "none" + ], + "title": "Subnets Peers Count", + "transformations": [ + { + "id": "seriesToColumns", + "options": { + "byField": "subnet" + } }, - "thresholdsStyle": { - "mode": "off" - } - }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - }, - { - "color": "red", - "value": 80 + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": true, + "Time 2": true, + "Time 3": true, + "Value #C": false, + "__name__ 1": true, + "__name__ 2": true, + "__name__ 3": true, + "instance 1": true, + "instance 2": true, + "instance 3": true, + "job 1": true, + "job 2": true, + "job 3": true + }, + "indexByName": { + "Time 1": 2, + "Time 2": 7, + "Time 3": 12, + "Value #A": 6, + "Value #B": 11, + "Value #C": 1, + "__name__ 1": 3, + "__name__ 2": 8, + "__name__ 3": 13, + "instance 1": 4, + "instance 2": 9, + "instance 3": 14, + "job 1": 5, + "job 2": 10, + "job 3": 15, + "subnet": 0 + }, + "renameByName": { + "Time 2": "", + "Value #A": "Known Peers (DHT)", + "Value #B": "Connected Peers", + "Value #C": "Subscribed", + "__name__ 3": "", + "subnet": "Subnet" + } } - ] - } - }, - "overrides": [] - }, - "gridPos": { - "h": 9, - "w": 16, - "x": 8, - "y": 38 - }, - "id": 59, - "options": { - "legend": { - "calcs": [], - "displayMode": "list", - "placement": "bottom", - "showLegend": true - }, - "tooltip": { - "mode": "single" - } - }, - "targets": [ - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "rate(ssv:network:discovery:found{instance=~\"$instance.*\"}[5m])", - "interval": "", - "legendFormat": "Found", - "refId": "A" + } + ], + "type": "table" }, { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "exemplar": true, - "expr": "rate(ssv:network:discovery:rejected{instance=~\"$instance.*\"}[5m])", - "hide": false, - "interval": "", - "legendFormat": "Rejected", - "refId": "B" - } - ], - "title": "Peers Discovery Rate", - "type": "timeseries" - }, - { - "datasource": { - "type": "prometheus", - "uid": "${datasource}" - }, - "description": "Table breakdown of all the SSV operator nodes", - "fieldConfig": { - "defaults": { - "color": { - "mode": "thresholds" + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" }, - "custom": { - "align": "center", - "cellOptions": { - "type": "auto" + "description": "The discovery rate of the subnet peers.\nFound is rate per second of nodes that were found with discovery. Rejected is rate per second of nodes that were found with discovery but rejected because of limit or subnet", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" + }, + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } }, - "filterable": true + "overrides": [] }, - "mappings": [], - "thresholds": { - "mode": "absolute", - "steps": [ - { - "color": "green" - } - ] + "gridPos": { + "h": 9, + "w": 16, + "x": 8, + "y": 30 }, - "unit": "index" + "id": 59, + "options": { + "legend": { + "calcs": [], + "displayMode": "list", + "placement": "bottom", + "showLegend": true + }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "rate(ssv:network:discovery:found{instance=~\"$instance.*\"}[5m])", + "interval": "", + "legendFormat": "Found", + "refId": "A" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "rate(ssv:network:discovery:rejected{instance=~\"$instance.*\"}[5m])", + "hide": false, + "interval": "", + "legendFormat": "Rejected", + "refId": "B" + } + ], + "title": "Peers Discovery Rate", + "type": "timeseries" }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "Index (last)" + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Table breakdown of all the SSV operator nodes", + "fieldConfig": { + "defaults": { + "color": { + "mode": "thresholds" + }, + "custom": { + "align": "center", + "cellOptions": { + "type": "auto" + }, + "filterable": true, + "inspect": false + }, + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + } + ] + }, + "unit": "index" }, - "properties": [ + "overrides": [ { - "id": "custom.width", - "value": 83 + "matcher": { + "id": "byName", + "options": "Index (last)" + }, + "properties": [ + { + "id": "custom.width", + "value": 83 + }, + { + "id": "displayName", + "value": "Operator Id's" + }, + { + "id": "unit", + "value": "short" + } + ] }, { - "id": "displayName", - "value": "Operator Id's" + "matcher": { + "id": "byName", + "options": "Last Seen (last)" + }, + "properties": [ + { + "id": "custom.width", + "value": 189 + } + ] }, { - "id": "unit", - "value": "short" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Last Seen (last)" - }, - "properties": [ - { - "id": "custom.width", - "value": 189 - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Name (last)" - }, - "properties": [ + "matcher": { + "id": "byName", + "options": "Name (last)" + }, + "properties": [ + { + "id": "custom.width", + "value": 159 + }, + { + "id": "displayName", + "value": "Name" + } + ] + }, { - "id": "custom.width", - "value": 159 + "matcher": { + "id": "byName", + "options": "Node Version (last)" + }, + "properties": [ + { + "id": "custom.width", + "value": 153 + }, + { + "id": "displayName", + "value": "Node Version" + } + ] }, { - "id": "displayName", - "value": "Name" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Node Version (last)" - }, - "properties": [ + "matcher": { + "id": "byName", + "options": "Node Type (last)" + }, + "properties": [ + { + "id": "custom.width", + "value": 159 + }, + { + "id": "displayName", + "value": "Node Type" + } + ] + }, { - "id": "custom.width", - "value": 153 + "matcher": { + "id": "byName", + "options": "Peer ID (last)" + }, + "properties": [ + { + "id": "displayName", + "value": "Peer ID" + } + ] }, { - "id": "displayName", - "value": "Node Version" - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Node Type (last)" - }, - "properties": [ + "matcher": { + "id": "byName", + "options": "Last Seen (last)" + }, + "properties": [ + { + "id": "displayName", + "value": "Last Seen" + } + ] + }, { - "id": "custom.width", - "value": 159 + "matcher": { + "id": "byName", + "options": "Operator Id's" + }, + "properties": [ + { + "id": "custom.width", + "value": 137 + } + ] }, { - "id": "displayName", - "value": "Node Type" + "matcher": { + "id": "byName", + "options": "Peer ID" + }, + "properties": [ + { + "id": "custom.width", + "value": 841 + } + ] } ] }, - { - "matcher": { - "id": "byName", - "options": "Peer ID (last)" - }, - "properties": [ - { - "id": "displayName", - "value": "Peer ID" - } - ] + "gridPos": { + "h": 13, + "w": 24, + "x": 0, + "y": 39 }, - { - "matcher": { - "id": "byName", - "options": "Last Seen (last)" + "id": 64, + "options": { + "cellHeight": "sm", + "footer": { + "countRows": false, + "fields": "", + "reducer": [ + "sum" + ], + "show": false + }, + "frameIndex": 1, + "showHeader": true, + "sortBy": [] + }, + "pluginVersion": "10.1.5", + "targets": [ + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "exemplar": true, + "expr": "rate(ssv:network:peers_identity{instance=~\"$instance.*\"}[5m])", + "format": "table", + "hide": false, + "instant": false, + "interval": "", + "legendFormat": "", + "refId": "A" + } + ], + "title": "Node Info", + "transformations": [ + { + "id": "organize", + "options": { + "excludeByName": { + "Time 1": false, + "Time 2": true, + "Value": true, + "Value #A": true, + "Value #B": false, + "__name__": true, + "__name__ 1": true, + "__name__ 2": true, + "instance": true, + "instance 1": true, + "instance 2": true, + "job": true, + "job 1": true, + "job 2": true, + "pubKey": true + }, + "indexByName": { + "Time": 6, + "Value": 9, + "instance": 7, + "job": 8, + "operatorID": 0, + "operatorName": 1, + "pid": 5, + "pubKey": 4, + "type": 3, + "v": 2 + }, + "renameByName": { + "Time": "Last Seen", + "Time 1": "Last Seen", + "Time 2": "", + "Value #B": "Index", + "__name__ 1": "", + "job 2": "", + "name": "Name", + "operatorID": "Index", + "operatorName": "Name", + "pid": "Peer ID", + "pubKey": "Public Key (Hash)", + "type": "Node Type", + "v": "Node Version" + } + } }, - "properties": [ - { - "id": "displayName", - "value": "Last Seen" + { + "id": "groupBy", + "options": { + "fields": { + "Index": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "Last Seen": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "Name": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "Node Type": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "Node Version": { + "aggregations": [ + "last" + ], + "operation": "aggregate" + }, + "Peer ID": { + "aggregations": [ + "last" + ], + "operation": "groupby" + } + } } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Operator Id's" }, - "properties": [ - { - "id": "custom.width", - "value": 137 + { + "id": "organize", + "options": { + "excludeByName": {}, + "indexByName": { + "Index (last)": 1, + "Last Seen (last)": 5, + "Name (last)": 0, + "Node Type (last)": 3, + "Node Version (last)": 2, + "Peer ID": 4 + }, + "renameByName": {} } - ] - }, - { - "matcher": { - "id": "byName", - "options": "Peer ID" }, - "properties": [ - { - "id": "custom.width", - "value": 841 + { + "id": "sortBy", + "options": { + "fields": {}, + "sort": [ + { + "field": "Index (last)" + } + ] } - ] - } - ] - }, - "gridPos": { - "h": 13, - "w": 24, - "x": 0, - "y": 47 - }, - "id": 64, - "options": { - "footer": { - "fields": "", - "reducer": [ - "sum" + } ], - "show": false - }, - "frameIndex": 1, - "showHeader": true, - "sortBy": [] - }, - "pluginVersion": "8.3.4", + "type": "table" + } + ], "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "prometheus" }, - "exemplar": true, - "expr": "rate(ssv:network:peers_identity{instance=~\"$instance.*\"}[5m])", - "format": "table", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "", "refId": "A" } ], - "title": "Node Info", - "transformations": [ - { - "id": "organize", - "options": { - "excludeByName": { - "Time 1": false, - "Time 2": true, - "Value": true, - "Value #A": true, - "Value #B": false, - "__name__": true, - "__name__ 1": true, - "__name__ 2": true, - "instance": true, - "instance 1": true, - "instance 2": true, - "job": true, - "job 1": true, - "job 2": true, - "pubKey": true - }, - "indexByName": { - "Time": 6, - "Value": 9, - "instance": 7, - "job": 8, - "operatorID": 0, - "operatorName": 1, - "pid": 5, - "pubKey": 4, - "type": 3, - "v": 2 - }, - "renameByName": { - "Time": "Last Seen", - "Time 1": "Last Seen", - "Time 2": "", - "Value #B": "Index", - "__name__ 1": "", - "job 2": "", - "name": "Name", - "operatorID": "Index", - "operatorName": "Name", - "pid": "Peer ID", - "pubKey": "Public Key (Hash)", - "type": "Node Type", - "v": "Node Version" - } - } - }, - { - "id": "groupBy", - "options": { - "fields": { - "Index": { - "aggregations": [ - "last" - ], - "operation": "aggregate" - }, - "Last Seen": { - "aggregations": [ - "last" - ], - "operation": "aggregate" - }, - "Name": { - "aggregations": [ - "last" - ], - "operation": "aggregate" - }, - "Node Type": { - "aggregations": [ - "last" - ], - "operation": "aggregate" - }, - "Node Version": { - "aggregations": [ - "last" - ], - "operation": "aggregate" - }, - "Peer ID": { - "aggregations": [ - "last" - ], - "operation": "groupby" - } - } - } - }, - { - "id": "organize", - "options": { - "excludeByName": {}, - "indexByName": { - "Index (last)": 1, - "Last Seen (last)": 5, - "Name (last)": 0, - "Node Type (last)": 3, - "Node Version (last)": 2, - "Peer ID": 4 - }, - "renameByName": {} - } - }, - { - "id": "sortBy", - "options": { - "fields": {}, - "sort": [ - { - "field": "Index (last)" - } - ] - } - } - ], - "type": "table" + "title": "Network Discovery", + "type": "row" }, { "collapsed": false, @@ -2210,7 +2217,7 @@ "h": 1, "w": 24, "x": 0, - "y": 60 + "y": 3 }, "id": 2, "panels": [], @@ -2229,7 +2236,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "description": "Rate per second of inbound / outbound topic messages over the last 5 minutes", "fieldConfig": { @@ -2238,6 +2245,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2249,6 +2258,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2271,7 +2281,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "#EAB839", @@ -2286,7 +2297,7 @@ "h": 12, "w": 8, "x": 0, - "y": 61 + "y": 4 }, "id": 32, "options": { @@ -2297,7 +2308,8 @@ "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "pluginVersion": "8.3.4", @@ -2305,8 +2317,9 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, + "editorMode": "code", "exemplar": true, "expr": "sum (rate(ssv:p2p:pubsub:msg:in{instance=~\"$instance.*\"}[5m]))", "format": "time_series", @@ -2318,7 +2331,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum (rate(ssv:p2p:pubsub:msg:in{instance=~\"$instance.*\", msg_type=\"0\"}[5m]))", @@ -2332,7 +2345,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum (rate(ssv:p2p:pubsub:msg:in{instance=~\"$instance.*\", msg_type=\"1\"}[5m]))", @@ -2346,7 +2359,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum (rate(ssv:p2p:pubsub:msg:in{instance=~\"$instance.*\", msg_type=\"2\"}[5m]))", @@ -2360,7 +2373,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "sum (rate(ssv:p2p:pubsub:msg:out{instance=~\"$instance.*\"}[5m]))", @@ -2378,7 +2391,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "description": "Rate per second of incoming topic messages for every topic over the last 5 minutes", "fieldConfig": { @@ -2387,6 +2400,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2398,6 +2413,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2420,7 +2436,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2436,7 +2453,7 @@ "h": 12, "w": 8, "x": 8, - "y": 61 + "y": 4 }, "id": 34, "options": { @@ -2451,14 +2468,15 @@ "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate (ssv:p2p:pubsub:msg:in{instance=~\"$instance.*\"}[5m])", @@ -2473,7 +2491,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "description": "Rate per second of outgoing topic messages for every topic over the last 5 minutes.\nResponses are outgoing, for incoming requests.\nSuccessful Requests are outgoing.\nActive are outgoing requests.", "fieldConfig": { @@ -2482,6 +2500,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2493,6 +2513,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2514,7 +2535,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null }, { "color": "red", @@ -2530,7 +2552,7 @@ "h": 12, "w": 8, "x": 16, - "y": 61 + "y": 4 }, "id": 36, "options": { @@ -2545,14 +2567,15 @@ "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate (ssv:p2p:pubsub:msg:out{instance=~\"$instance.*\"}[5m])", @@ -2567,7 +2590,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "description": "Table breakdown for each stream protocol.\nResponses are outgoing, for incoming requests.\nSuccessful Requests are outgoing.\nActive Requests are outgoing.", "fieldConfig": { @@ -2579,14 +2602,16 @@ "align": "auto", "cellOptions": { "type": "auto" - } + }, + "inspect": false }, "mappings": [], "thresholds": { "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2622,11 +2647,13 @@ "h": 8, "w": 12, "x": 0, - "y": 73 + "y": 16 }, "id": 61, "options": { + "cellHeight": "sm", "footer": { + "countRows": false, "fields": "", "reducer": [ "sum" @@ -2636,12 +2663,12 @@ "showHeader": true, "sortBy": [] }, - "pluginVersion": "8.3.4", + "pluginVersion": "10.1.5", "targets": [ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": false, "expr": "ssv:p2p:streams:res{instance=~\"$instance.*\"}", @@ -2654,7 +2681,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": false, "expr": "ssv:p2p:streams:req:count{instance=~\"$instance.*\"}", @@ -2668,7 +2695,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": false, "expr": "ssv:p2p:streams:req:success{instance=~\"$instance.*\"}", @@ -2682,7 +2709,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": false, "expr": "ssv:p2p:streams:req:active{instance=~\"$instance.*\"}", @@ -2739,7 +2766,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "description": "Rate per second of requests, responses and active requests.\nResponses are outgoing, for incoming requests.\nSuccessful Requests are outgoing.\nActive are outgoing requests.", "fieldConfig": { @@ -2748,6 +2775,8 @@ "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, @@ -2759,6 +2788,7 @@ "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, @@ -2780,7 +2810,8 @@ "mode": "absolute", "steps": [ { - "color": "green" + "color": "green", + "value": null } ] } @@ -2791,7 +2822,7 @@ "h": 8, "w": 12, "x": 12, - "y": 73 + "y": 16 }, "id": 63, "options": { @@ -2802,7 +2833,8 @@ "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, "pluginVersion": "8.3.4", @@ -2810,7 +2842,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(ssv:p2p:streams:res{instance=~\"$instance.*\"}[5m])", @@ -2823,7 +2855,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(ssv:p2p:streams:req:count{instance=~\"$instance.*\"}[5m])", @@ -2837,7 +2869,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(ssv:p2p:streams:req:success{instance=~\"$instance.*\"}[5m])", @@ -2851,7 +2883,7 @@ { "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "exemplar": true, "expr": "rate(ssv:p2p:streams:req:active{instance=~\"$instance.*\"}[5m])", @@ -2868,47 +2900,48 @@ "type": "timeseries" }, { - "collapsed": true, + "collapsed": false, "gridPos": { "h": 1, "w": 24, "x": 0, - "y": 81 + "y": 24 }, "id": 67, "panels": [], - "title": "Vitals", + "title": "Peer Messages ", "type": "row" }, { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "${DS_PROMETHEUS}" }, - "description": "Rate per second of requests, responses and active requests.\nResponses are outgoing, for incoming requests.\nSuccessful Requests are outgoing.\nActive are outgoing requests.", "fieldConfig": { "defaults": { "color": { "mode": "palette-classic" }, "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", "axisLabel": "", "axisPlacement": "auto", "barAlignment": 0, - "drawStyle": "bars", - "fillOpacity": 100, + "drawStyle": "line", + "fillOpacity": 0, "gradientMode": "none", "hideFrom": { "legend": false, "tooltip": false, "viz": false }, + "insertNulls": false, "lineInterpolation": "linear", "lineWidth": 1, "pointSize": 5, "scaleDistribution": { - "log": 2, - "type": "log" + "type": "linear" }, "showPoints": "auto", "spanNulls": false, @@ -2925,187 +2958,155 @@ "mode": "absolute", "steps": [ { - "color": "#73BF69", - "value": null - } - ] - } - }, - "overrides": [ - { - "matcher": { - "id": "byName", - "options": "10ms" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "yellow", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "20ms" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "light-orange", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "100ms" - }, - "properties": [ - { - "id": "color", - "value": { - "fixedColor": "semi-dark-orange", - "mode": "fixed" - } - } - ] - }, - { - "matcher": { - "id": "byName", - "options": "5000ms" - }, - "properties": [ + "color": "green" + }, { - "id": "color", - "value": { - "fixedColor": "dark-red", - "mode": "fixed" - } + "color": "red", + "value": 80 } ] } - ] + }, + "overrides": [] }, "gridPos": { "h": 8, - "w": 12, + "w": 24, "x": 0, - "y": 82 + "y": 25 }, "id": 65, - "maxDataPoints": 25, "options": { "legend": { "calcs": [], "displayMode": "list", - "placement": "bottom" + "placement": "bottom", + "showLegend": true }, "tooltip": { - "mode": "single" + "mode": "single", + "sort": "none" } }, - "pluginVersion": "8.3.4", "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" - }, - "exemplar": true, - "expr": "sum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"5.0\"}[5m]))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "5ms", - "refId": "D" - }, - { - "datasource": { - "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "${DS_PROMETHEUS}" }, - "exemplar": true, - "expr": "sum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"10.0\"}[5m])) -\nsum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"5.0\"}[5m]))", - "format": "time_series", - "hide": false, + "editorMode": "code", + "expr": "increase(ssv_messages_received_total{instance=~\"$instance\"}[2m])", "instant": false, - "interval": "", - "legendFormat": "10ms", + "legendFormat": "{{pod}}", + "range": true, "refId": "A" - }, - { - "datasource": { - "type": "prometheus", - "uid": "eXfXfqH7z" + } + ], + "title": "Total messages received (instance per 2m)", + "type": "timeseries" + }, + { + "datasource": { + "type": "prometheus", + "uid": "${DS_PROMETHEUS}" + }, + "description": "Number of message received from each of the connected peer", + "fieldConfig": { + "defaults": { + "color": { + "mode": "palette-classic" }, - "exemplar": true, - "expr": "sum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"20.0\"}[5m])) -\nsum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"10.0\"}[5m]))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "20ms", - "refId": "B" - }, - { - "datasource": { - "type": "prometheus", - "uid": "eXfXfqH7z" + "custom": { + "axisCenteredZero": false, + "axisColorMode": "text", + "axisLabel": "", + "axisPlacement": "auto", + "barAlignment": 0, + "drawStyle": "line", + "fillOpacity": 0, + "gradientMode": "none", + "hideFrom": { + "legend": false, + "tooltip": false, + "viz": false + }, + "insertNulls": false, + "lineInterpolation": "linear", + "lineWidth": 1, + "pointSize": 5, + "scaleDistribution": { + "type": "linear" + }, + "showPoints": "auto", + "spanNulls": false, + "stacking": { + "group": "A", + "mode": "none" + }, + "thresholdsStyle": { + "mode": "off" + } }, - "exemplar": true, - "expr": "sum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"100.0\"}[5m])) -\nsum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"20.0\"}[5m]))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "100ms", - "refId": "C" + "mappings": [], + "thresholds": { + "mode": "absolute", + "steps": [ + { + "color": "green" + }, + { + "color": "red", + "value": 80 + } + ] + } }, - { - "datasource": { - "type": "prometheus", - "uid": "eXfXfqH7z" - }, - "exemplar": true, - "expr": "sum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"500.0\"}[5m])) -\nsum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"100.0\"}[5m]))", - "format": "time_series", - "hide": false, - "instant": false, - "interval": "", - "legendFormat": "500ms", - "refId": "E" + "overrides": [] + }, + "gridPos": { + "h": 9, + "w": 24, + "x": 0, + "y": 33 + }, + "id": 66, + "options": { + "legend": { + "calcs": [ + "max", + "min", + "sum" + ], + "displayMode": "table", + "placement": "right", + "showLegend": true }, + "tooltip": { + "mode": "single", + "sort": "none" + } + }, + "targets": [ { "datasource": { "type": "prometheus", - "uid": "eXfXfqH7z" + "uid": "${DS_PROMETHEUS}" }, - "exemplar": true, - "expr": "sum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"5000.0\"}[5m])) -\nsum(increase(slot_ticker_delay_milliseconds_bucket{instance=~\"$instance.*\", le=\"500.0\"}[5m]))", - "format": "time_series", - "hide": false, + "editorMode": "code", + "expr": "increase(ssv_messages_received_from_peer{instance=~\"$instance\"}[2m])", "instant": false, - "interval": "", - "legendFormat": "5000ms", - "refId": "F" + "legendFormat": "{{peer_id}}", + "range": true, + "refId": "A" } ], - "title": "Duty Execution Latency (5m)", - "transformations": [], + "title": "Message from peer (increase per 2m) ", "type": "timeseries" } ], "refresh": "", "schemaVersion": 38, + "style": "dark", "tags": [], "templating": { "list": [ @@ -3113,7 +3114,7 @@ "current": {}, "datasource": { "type": "prometheus", - "uid": "${datasource}" + "uid": "${DS_PROMETHEUS}" }, "definition": "label_values(ssv_beacon_status,instance)", "description": "", @@ -3134,7 +3135,11 @@ "type": "query" }, { - "current": {}, + "current": { + "selected": true, + "text": "Prometheus", + "value": "EwBd0u7Sk" + }, "hide": 0, "includeAll": false, "multi": false, @@ -3150,13 +3155,13 @@ ] }, "time": { - "from": "now-1h", + "from": "now-6h", "to": "now" }, "timepicker": {}, "timezone": "", "title": "Node Dashboard", "uid": "node_dashboard", - "version": 2, + "version": 3, "weekStart": "" } \ No newline at end of file diff --git a/operator/validator/controller.go b/operator/validator/controller.go index 0df7016375..993d7b7bc6 100644 --- a/operator/validator/controller.go +++ b/operator/validator/controller.go @@ -164,10 +164,10 @@ type controller struct { operatorData *registrystorage.OperatorData operatorDataMutex sync.RWMutex - validatorOptions validator.Options - validatorsMap *validatorsmap.ValidatorsMap - validatorStartFunc func(validator *validator.Validator) (bool, error) - initialValidatorSetup chan struct{} + validatorOptions validator.Options + validatorsMap *validatorsmap.ValidatorsMap + validatorStartFunc func(validator *validator.Validator) (bool, error) + committeeValidatorSetup chan struct{} metadataUpdateInterval time.Duration @@ -261,10 +261,10 @@ func NewController(logger *zap.Logger, options ControllerOptions) Controller { nonCommitteeValidators: ttlcache.New( ttlcache.WithTTL[spectypes.MessageID, *nonCommitteeValidator](time.Minute * 13), ), - metadataLastUpdated: make(map[string]time.Time), - indicesChange: make(chan struct{}), - validatorExitCh: make(chan duties.ExitDescriptor), - initialValidatorSetup: make(chan struct{}, 1), + metadataLastUpdated: make(map[string]time.Time), + indicesChange: make(chan struct{}), + validatorExitCh: make(chan duties.ExitDescriptor), + committeeValidatorSetup: make(chan struct{}, 1), messageValidator: options.MessageValidator, } @@ -415,6 +415,10 @@ func (c *controller) handleWorkerMessages(msg *queue.DecodedSSVMessage) error { // StartValidators loads all persisted shares and setup the corresponding validators func (c *controller) StartValidators() { if c.validatorOptions.Exporter { + // There are no committee validators to setup. + close(c.committeeValidatorSetup) + + // Setup non-committee validators. c.setupNonCommitteeValidators() return } @@ -435,7 +439,7 @@ func (c *controller) StartValidators() { allPubKeys = append(allPubKeys, share.ValidatorPubKey) } - // Start own validators. + // Setup committee validators. inited := c.setupValidators(ownShares) if len(inited) == 0 { // If no validators were started and therefore we're not subscribed to any subnets, @@ -444,9 +448,9 @@ func (c *controller) StartValidators() { c.logger.Error("failed to subscribe to random subnets", zap.Error(err)) } } + close(c.committeeValidatorSetup) - close(c.initialValidatorSetup) - + // Start validators. c.startValidators(inited) // Fetch metadata for all validators. @@ -665,7 +669,7 @@ func (c *controller) CommitteeActiveIndices(epoch phase0.Epoch) []phase0.Validat func (c *controller) AllActiveIndices(epoch phase0.Epoch, afterInit bool) []phase0.ValidatorIndex { if afterInit { - <-c.initialValidatorSetup + <-c.committeeValidatorSetup } shares := c.sharesStorage.List(nil, isShareActive(epoch)) indices := make([]phase0.ValidatorIndex, len(shares)) diff --git a/protocol/v2/ssv/runner/proposer.go b/protocol/v2/ssv/runner/proposer.go index 53451ea01a..4e5f0353ad 100644 --- a/protocol/v2/ssv/runner/proposer.go +++ b/protocol/v2/ssv/runner/proposer.go @@ -21,7 +21,6 @@ import ( "github.com/attestantio/go-eth2-client/spec" - "github.com/bloxapp/ssv/beacon/goclient" "github.com/bloxapp/ssv/logging/fields" "github.com/bloxapp/ssv/protocol/v2/qbft/controller" "github.com/bloxapp/ssv/protocol/v2/ssv/runner/metrics" @@ -112,19 +111,7 @@ func (r *ProposerRunner) ProcessPreConsensus(logger *zap.Logger, signedMsg *spec // get block data obj, ver, err = r.GetBeaconNode().GetBlindedBeaconBlock(duty.Slot, r.GetShare().Graffiti, fullSig) if err != nil { - // Prysm workaround: when Prysm can't retrieve an MEV block, it responds with an error - // saying the block isn't blinded, implying to request a standard block instead. - // https://github.com/prysmaticlabs/prysm/issues/12103 - if nodeClientProvider, ok := r.GetBeaconNode().(goclient.NodeClientProvider); ok && - nodeClientProvider.NodeClient() == goclient.NodePrysm { - logger.Debug("failed to get blinded beacon block, falling back to standard block") - obj, ver, err = r.GetBeaconNode().GetBeaconBlock(duty.Slot, r.GetShare().Graffiti, fullSig) - if err != nil { - return errors.Wrap(err, "failed falling back from blinded to standard beacon block") - } - } else { - return errors.Wrap(err, "failed to get blinded beacon block") - } + return errors.Wrap(err, "failed to get blinded beacon block") } } else { // get block data @@ -133,13 +120,13 @@ func (r *ProposerRunner) ProcessPreConsensus(logger *zap.Logger, signedMsg *spec return errors.Wrap(err, "failed to get beacon block") } } - + took := time.Since(start) // Log essentials about the retrieved block. blockSummary, summarizeErr := summarizeBlock(obj) logger.Info("🧊 got beacon block proposal", zap.String("block_hash", blockSummary.Hash.String()), zap.Bool("blinded", blockSummary.Blinded), - zap.Duration("took", time.Since(start)), + zap.Duration("took", took), zap.NamedError("summarize_err", summarizeErr)) byts, err := obj.MarshalSSZ() @@ -431,16 +418,17 @@ func summarizeBlock(block any) (summary blockSummary, err error) { return summary, fmt.Errorf("block is nil") } switch b := block.(type) { - case *api.VersionedBlindedProposal: - switch b.Version { - case spec.DataVersionCapella: - return summarizeBlock(b.Capella) - case spec.DataVersionDeneb: - return summarizeBlock(b.Deneb) - default: - return summary, fmt.Errorf("unsupported blinded block version %d", b.Version) + case *api.VersionedV3Proposal: + if b.ExecutionPayloadBlinded { + switch b.Version { + case spec.DataVersionCapella: + return summarizeBlock(b.BlindedCapella) + case spec.DataVersionDeneb: + return summarizeBlock(b.BlindedDeneb) + default: + return summary, fmt.Errorf("unsupported blinded block version %d", b.Version) + } } - case *api.VersionedProposal: switch b.Version { case spec.DataVersionCapella: return summarizeBlock(b.Capella) @@ -467,6 +455,9 @@ func summarizeBlock(block any) (summary blockSummary, err error) { summary.Hash = b.Body.ExecutionPayload.BlockHash summary.Version = spec.DataVersionDeneb + case *apiv1deneb.BlockContents: + return summarizeBlock(b.Block) + case *apiv1capella.BlindedBeaconBlock: if b == nil || b.Body == nil || b.Body.ExecutionPayloadHeader == nil { return summary, fmt.Errorf("block, body or execution payload header is nil") diff --git a/protocol/v2/types/ssvshare.go b/protocol/v2/types/ssvshare.go index 6dad2af123..23ae88bfd3 100644 --- a/protocol/v2/types/ssvshare.go +++ b/protocol/v2/types/ssvshare.go @@ -2,7 +2,6 @@ package types import ( "bytes" - "crypto/sha256" "encoding/binary" "encoding/gob" "fmt" @@ -11,6 +10,7 @@ import ( "github.com/attestantio/go-eth2-client/spec/bellatrix" spectypes "github.com/bloxapp/ssv-spec/types" "github.com/ethereum/go-ethereum/common" + "github.com/ethereum/go-ethereum/crypto" beaconprotocol "github.com/bloxapp/ssv/protocol/v2/blockchain/beacon" ) @@ -66,26 +66,23 @@ func (s *SSVShare) SetFeeRecipient(feeRecipient bellatrix.ExecutionAddress) { } // ComputeClusterIDHash will compute cluster ID hash with given owner address and operator ids -func ComputeClusterIDHash(ownerAddress []byte, operatorIds []uint64) ([]byte, error) { - // Create a new hash - hash := sha256.New() - - // Write the binary representation of the owner address to the hash - hash.Write(ownerAddress) - - // Sort the array in ascending order +func ComputeClusterIDHash(address common.Address, operatorIds []uint64) []byte { sort.Slice(operatorIds, func(i, j int) bool { return operatorIds[i] < operatorIds[j] }) - // Write the values to the hash + // Encode the address and operator IDs in the same way as Solidity's abi.encodePacked + var data []byte + data = append(data, address.Bytes()...) // Address is 20 bytes for _, id := range operatorIds { - if err := binary.Write(hash, binary.BigEndian, id); err != nil { - return nil, err - } + idBytes := make([]byte, 32) // Each ID should be 32 bytes + binary.BigEndian.PutUint64(idBytes[24:], id) // PutUint64 fills the last 8 bytes; rest are 0 + data = append(data, idBytes...) } - return hash.Sum(nil), nil + // Hash the data using keccak256 + hash := crypto.Keccak256(data) + return hash } func ComputeQuorumAndPartialQuorum(committeeSize int) (quorum uint64, partialQuorum uint64) { diff --git a/protocol/v2/types/ssvshare_test.go b/protocol/v2/types/ssvshare_test.go index 848f3b369e..e43af0622c 100644 --- a/protocol/v2/types/ssvshare_test.go +++ b/protocol/v2/types/ssvshare_test.go @@ -1,8 +1,11 @@ package types import ( + "encoding/hex" "testing" + "github.com/ethereum/go-ethereum/crypto" + spectypes "github.com/bloxapp/ssv-spec/types" "github.com/stretchr/testify/require" @@ -19,6 +22,22 @@ func TestSSVShare_BelongsToOperator(t *testing.T) { require.True(t, metadata.BelongsToOperator(1)) require.False(t, metadata.BelongsToOperator(2)) } +func TestSSVShare_ComputeClusterIDHash(t *testing.T) { + var ( + aliceClusterHash = "a341933234aa1e6dfd3b8d6677172bdcd0986b1e6afc2e84d321f154d9736717" + testKeyAlice, _ = crypto.HexToECDSA("b71c71a67e1177ad4e901695e1b4b9ee17ae16c6668d313eac2f96dbcda3f291") + testAddrAlice = crypto.PubkeyToAddress(testKeyAlice.PublicKey) + ) + + clusterHash := ComputeClusterIDHash(testAddrAlice, []uint64{3, 2, 1, 4}) + clusterHash2 := ComputeClusterIDHash(testAddrAlice, []uint64{4, 3, 1, 2}) + // Convert the hash to a hexadecimal string + hashString := hex.EncodeToString(clusterHash) + hashString2 := hex.EncodeToString(clusterHash2) + + require.Equal(t, aliceClusterHash, hashString) + require.Equal(t, aliceClusterHash, hashString2) +} func TestSSVShare_HasBeaconMetadata(t *testing.T) { tt := []struct { diff --git a/registry/storage/shares.go b/registry/storage/shares.go index 54963eb1d9..3741399b8b 100644 --- a/registry/storage/shares.go +++ b/registry/storage/shares.go @@ -220,7 +220,7 @@ func ByClusterID(clusterID []byte) SharesFilter { operatorIDs = append(operatorIDs, op.OperatorID) } - shareClusterID, _ := types.ComputeClusterIDHash(share.OwnerAddress.Bytes(), operatorIDs) + shareClusterID := types.ComputeClusterIDHash(share.OwnerAddress, operatorIDs) return bytes.Equal(shareClusterID, clusterID) } } diff --git a/scripts/spec-alignment/differ.config.yaml b/scripts/spec-alignment/differ.config.yaml index 5a2ebb268c..e2d87d8ef6 100644 --- a/scripts/spec-alignment/differ.config.yaml +++ b/scripts/spec-alignment/differ.config.yaml @@ -12,7 +12,8 @@ ApprovedChanges: ["256a3dc0f1eb7abf","22b66e9a63ba145b","12c1c3a1622fb7cc","1c44 "ae1b53fc580ce346","c117bd5db3eeabd6","d06552d71b9ca4cd","4cb333a88af66575","2a580187c312c79a","bf8cf93c55c1eadb","6d877e24991465e4", "b1c8e0148a4a755","2c25abb7c776bd54","a1754e08473bd1fa","4dbab14670fa155d","2a3667a499a23b16","930379d323dd95e8","65efe31656e8814f", "1270cef2e573f846","aeafb38ca9114f12","2a83e3384b45f2d7","91fbb874b3ce2570","74ad51ca63526e1e","defd8406641d53a5","efa21b9890ec787b", - "6bd22f1a688bbca8","6b29645373ffac35","cfd236570c82c478","e2b0e9c6454c1c08","d5ddc708de23543a","11f8f0ea5709e42e","172a32c59d6f082e"] + "6bd22f1a688bbca8","6b29645373ffac35","cfd236570c82c478","e2b0e9c6454c1c08","d5ddc708de23543a","11f8f0ea5709e42e","172a32c59d6f082e", + "63bbaffe74361d14"] IgnoredIdentifiers: - logger