Skip to content

Conversation

@nkryuchkov
Copy link
Contributor

@nkryuchkov nkryuchkov commented Jul 1, 2025

@codecov
Copy link

codecov bot commented Jul 1, 2025

Codecov Report

❌ Patch coverage is 75.00000% with 3 lines in your changes missing coverage. Please review.
✅ Project coverage is 57.2%. Comparing base (5e9a5ec) to head (0124a0f).
⚠️ Report is 1 commits behind head on stage.

Files with missing lines Patch % Lines
operator/validator/controller.go 75.0% 2 Missing and 1 partial ⚠️

☔ View full report in Codecov by Sentry.
📢 Have feedback on the report? Share it here.

🚀 New features to boost your workflow:
  • ❄️ Test Analytics: Detect flaky tests, report on failures, and find test suite problems.
  • 📦 JS Bundle Analysis: Save yourself from yourself by tracking and limiting bundle sizes in JS merges.

@nkryuchkov nkryuchkov changed the title majority fork protection protocol: majority fork protection Jul 4, 2025
@nkryuchkov nkryuchkov marked this pull request as ready for review July 4, 2025 20:37
Copy link
Contributor

Copilot AI left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Pull Request Overview

Integrate slashing protection data into value checks and refactor the existing value-checking infrastructure to use a unified ValueChecker interface.

  • Introduced SlashingProtectionData to carry source/target epochs for slashing protection.
  • Replaced legacy ValueCheckF functions with the ValueChecker interface (and VoteChecker for SP support).
  • Propagated spData through runners, QBFT instances, and the controller to enable SP-aware checks.

Reviewed Changes

Copilot reviewed 21 out of 21 changed files in this pull request and generated 1 comment.

Show a summary per file
File Description
protocol/v2/types/spdata.go Defines new SlashingProtectionData type
protocol/v2/ssv/value_check.go Refactors vote/proposer/aggregator checkers to use ValueChecker and SP data
protocol/v2/ssv/testing/runner.go Swaps ValueCheckF for ValueChecker in tests
protocol/v2/ssv/spectest/ssv_mapping_test.go Updates mapping test to use GetValChecker
protocol/v2/ssv/spectest/msg_processing_type.go Uses GetValChecker instead of GetValCheckF
protocol/v2/ssv/runner/voluntary_exit.go Renames method to GetValChecker
protocol/v2/ssv/runner/validator_registration.go Renames method to GetValChecker
protocol/v2/ssv/runner/sync_committee_aggregator.go Renames method to GetValChecker, updates decide call
protocol/v2/ssv/runner/runner_validations.go Calls CheckValue on ValueChecker
protocol/v2/ssv/runner/runner.go Extends decide with spData, uses GetValChecker
protocol/v2/ssv/runner/proposer.go Propagates spData to decide, renames getter
protocol/v2/ssv/runner/committee.go Builds SP data before decide, renames getter
protocol/v2/ssv/runner/aggregator.go Adds spData argument to decide, renames getter
protocol/v2/qbft/testing/utils.go Replaces ValueCheckF with ValueChecker in tests
protocol/v2/qbft/spectest/controller_type.go Passes nil SP data to StartNewInstance
protocol/v2/qbft/instance/round_change.go Switches to ValueChecker for round‐change logic
protocol/v2/qbft/instance/proposal.go Integrates SP data into proposal justification check
protocol/v2/qbft/instance/instance.go Stores spData in QBFT instance start
protocol/v2/qbft/controller/controller.go Extends StartNewInstance with spData parameter
protocol/v2/qbft/config.go Updates IConfig to expose GetValueChecker
operator/validator/controller.go Updates operator setup to use ValueChecker builders
Comments suppressed due to low confidence (4)

protocol/v2/ssv/value_check.go:53

  • Consider adding unit tests for CheckValueWithSP to verify the slashing protection logic, especially the source and target epoch checks.
func (v *voteChecker) CheckValueWithSP(value []byte, spData *ssvtypes.SlashingProtectionData) error {

protocol/v2/types/spdata.go:7

  • [nitpick] Add a doc comment for SlashingProtectionData to explain its purpose and how it should be used in slashing protection checks.
type SlashingProtectionData struct {

protocol/v2/types/spdata.go:1

  • [nitpick] The file name spdata.go is abbreviated. Consider renaming to slashing_protection_data.go to match the SlashingProtectionData struct name for clarity.
package types

protocol/v2/ssv/value_check.go:15

  • The dutyValueCheck function uses bytes.Equal but the bytes package is not imported. Add import "bytes" to the import block.
	"github.com/ssvlabs/ssv/ssvsigner/ekm"

MatusKysel
MatusKysel previously approved these changes Jul 14, 2025
Copy link
Contributor

@MatusKysel MatusKysel left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

LGTM

# Conflicts:
#	protocol/v2/qbft/instance/instance.go
#	protocol/v2/qbft/instance/proposal.go
#	protocol/v2/qbft/instance/round_change.go
@ssv-test-bot
Copy link

ssv-test-bot bot commented Sep 21, 2025

🟢 Test run for PR #2358

Branch: compare-qbft-value
Commit: 9d79916

Status

2025-09-21T14:58:37Z Starting test run
2025-09-21T14:58:39Z Test run submitted successfully for commit 9d79916
2025-09-21T14:58:40Z container image for commit 9d79916c07c6bd3e316c633d498c33b8b0e18810 is build and present in container registry
2025-09-21T14:58:41Z automatically allocated node range cluster=300,301,302,303 for test run on network=hoodi_stage
2025-09-21T14:58:42Z deploying commit 9d79916c07c6bd3e316c633d498c33b8b0e18810 to ssv nodes 300,301,302,303
2025-09-21T14:59:57Z commit 9d79916c07c6bd3e316c633d498c33b8b0e18810 is deployed to ssv nodes 300,301,302,303

Click to expand executor logs
═══════════════════════════════════════════════════════════════════════════════════════════════════════
                🧪  WELCOME TO Executor - SSV's Distributed Test Automation Execution Layer  🧪            

                                  ___ __  __ ___  ___  _   _  _____  ___   ___ 
                                 | __|\\ \\/ /| __|/ __|| | | ||_   _|/ _ \\ | _ \\
                                 | _|  >  < | _|| (__ | |_| |  | | | (_) ||   /
                                 |___|/_/\\_\\|___|\\___| \\___/   |_|  \\___/ |_|_\\
                                        

═══════════════════════════════════════════════════════════════════════════════════════════════════════
{"time":"2025-09-21T15:00:44.352235044Z","level":"INFO","msg":"🐳 Docker mode: Using environment variables for config generation"}
{"time":"2025-09-21T15:00:44.360950474Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-21T15:00:44.361060228Z","level":"INFO","msg":"📝 Requesting configuration generation from orchestrator API","network":"hoodi_stage","clusters":[300,301,302,303],"tests":"(sanity)"}
{"time":"2025-09-21T15:00:44.422533357Z","level":"INFO","msg":"✅ Configuration generated successfully via API","resource_usage_id":"d106cb8fd0583824dd0a787372605dd9"}
{"time":"2025-09-21T15:00:44.42370799Z","level":"INFO","msg":"🚀 EXECUTOR Initialized Successfully"}
{"time":"2025-09-21T15:00:44.423823049Z","level":"INFO","msg":"⚙️ Test configuration loaded","network":"hoodi_stage","nodes":[300,301,302,303],"test_type":{"Sanity":{"ShouldRun":true,"E2M":false,"BulkAmount":0},"Bulk":{"ShouldRun":false,"E2M":false,"BulkAmount":0},"Isolated":{"Tests":null}}}
{"time":"2025-09-21T15:00:48.747552157Z","level":"INFO","msg":"Generated operator pubkeys file","module":"scanner","path":"/app/shared/data/operators/operator-pubkeys-hoodi_stage.json"}
{"time":"2025-09-21T15:00:48.747770822Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"consensus"}
{"time":"2025-09-21T15:00:48.747813192Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"flow-emits"}
{"time":"2025-09-21T15:00:48.747874025Z","level":"INFO","msg":"Validation client initialized","module":"main","loki_enabled":true,"e2m_enabled":false}
{"time":"2025-09-21T15:00:48.747913566Z","level":"INFO","msg":"🔑 KEY STEP: Starting Isolated Tests Concurrently if exists...","module":"main"}
{"time":"2025-09-21T15:00:48.74799641Z","level":"INFO","msg":"🔑 KEY STEP: Starting Sanity Test Suite","module":"main"}
{"time":"2025-09-21T15:00:48.74822145Z","level":"INFO","msg":"No isolated tests configured, skipping","module":"main"}
{"time":"2025-09-21T15:00:48.798265323Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":300}
{"time":"2025-09-21T15:00:48.812544663Z","level":"INFO","msg":"Available slots","test":"sanity","node":300,"slots":3000}
{"time":"2025-09-21T15:00:48.812624686Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":301}
{"time":"2025-09-21T15:00:48.821097174Z","level":"INFO","msg":"Available slots","test":"sanity","node":301,"slots":399}
{"time":"2025-09-21T15:00:48.821176165Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":302}
{"time":"2025-09-21T15:00:48.828529144Z","level":"INFO","msg":"Available slots","test":"sanity","node":302,"slots":299}
{"time":"2025-09-21T15:00:48.828601202Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":303}
{"time":"2025-09-21T15:00:48.835922682Z","level":"INFO","msg":"Available slots","test":"sanity","node":303,"slots":717}
{"time":"2025-09-21T15:01:25.720635179Z","level":"INFO","msg":"Extracted keyshares path","test":"sanity","module":"keys","path":"/app/shared/data/keyshares/0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d.json"}
{"time":"2025-09-21T15:01:25.720744098Z","level":"INFO","msg":"Key shares file generated successfully","test":"sanity","keyshare_path":"/app/shared/data/keyshares/0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d.json"}
{"time":"2025-09-21T15:01:27.475744001Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99402893999200282400000000"}
{"time":"2025-09-21T15:01:27.475796972Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-09-21T15:01:27.475812163Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-09-21T15:01:27.479543685Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99402893999200282400000000"}
{"time":"2025-09-21T15:01:27.479574206Z","level":"INFO","msg":"Allowance","test":"sanity","module":"contract","allowance":"99402893999200282400000000"}
{"time":"2025-09-21T15:01:27.50730747Z","level":"INFO","msg":"Registering validator","test":"sanity","module":"contract","tx_hash":"0x506e9664d95bf009926ae4383b793e092fa8295ba0e98299c5221828763420fc"}
{"time":"2025-09-21T15:01:27.515654319Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x506e9664d95bf009926ae4383b793e092fa8295ba0e98299c5221828763420fc"}
{"time":"2025-09-21T15:01:37.524720328Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":2,"sleep":20,"tx_hash":"0x506e9664d95bf009926ae4383b793e092fa8295ba0e98299c5221828763420fc"}
{"time":"2025-09-21T15:01:57.53606021Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x506e9664d95bf009926ae4383b793e092fa8295ba0e98299c5221828763420fc"}
{"time":"2025-09-21T15:01:57.53622017Z","level":"INFO","msg":"✅ SUCCESS: Contract Register Successful","test":"sanity","txHash":"0x506e9664d95bf009926ae4383b793e092fa8295ba0e98299c5221828763420fc","block_hash":"0x6a42f83ecd98aec8b576faf524bd78be4425543fa1c86690cdab434807e6cd35"}
{"time":"2025-09-21T15:01:57.549272974Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":10,"attempt":1}
{"time":"2025-09-21T15:02:07.55964005Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":20,"attempt":2}
{"time":"2025-09-21T15:02:27.578220408Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":40,"attempt":3}
{"time":"2025-09-21T15:03:07.589741192Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":80,"attempt":4}
{"time":"2025-09-21T15:04:27.602065594Z","level":"INFO","msg":"Successfully retrieved validator index from exporter","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d"}
{"time":"2025-09-21T15:04:27.815468231Z","level":"INFO","msg":"Validator event validation successful","module":"main","module":"loki-validator","validated_validators":1,"event":"ValidatorAdded"}
{"time":"2025-09-21T15:04:27.815596425Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"registration"}
{"time":"2025-09-21T15:04:29.507431848Z","level":"INFO","msg":"Liquidating cluster","test":"sanity","module":"contract","tx_hash":"0xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34"}
{"time":"2025-09-21T15:04:29.510679764Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34"}
{"time":"2025-09-21T15:04:39.524141567Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34"}
{"time":"2025-09-21T15:04:39.52426939Z","level":"INFO","msg":"✅ SUCCESS: Cluster Liquidation Successful","test":"sanity","txHash":"0xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34","block_hash":"0x448216ce296fb692f5e5a1f13facc16142e373f9efb6ecfb31628d3ebfe79884"}
{"time":"2025-09-21T15:04:39.524410919Z","level":"INFO","msg":"Querying Loki for transaction hash validation","module":"main","module":"loki-validator","query":"{container=~\\"ssv-node-300|ssv-node-301|ssv-node-302|ssv-node-303\\"} |= \\"0xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34\\"","tx_hash":"0xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34"}
{"time":"2025-09-21T15:04:39.628906183Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1758456279,"end_unix":1758467079}
{"time":"2025-09-21T15:05:09.678080004Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1758456279,"end_unix":1758467109}
{"time":"2025-09-21T15:06:09.679672749Z","level":"ERROR","msg":"request failed","module":"HTTPRequester","error":"Get \\"https://loki.ops.ssvlabsinternal.com/loki/api/v1/query_range?query=%7Bcontainer%3D~%22ssv-node-300%7Cssv-node-301%7Cssv-node-302%7Cssv-node-303%22%7D+%7C%3D+%220xa6ec44b721e5a12d70a2ace88351ec76833cc8a6a75dd086546c4f6a678a9c34%22+%7C+json+%7C+line_format+%22%7B%7B.container%7D%7D%3A%7B%7B.msg%7D%7D%22&start=1758456279&end=1758467169&limit=1000\\": unexpected EOF","request attempt #":0}
{"time":"2025-09-21T15:06:09.790713015Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1758456279,"end_unix":1758467169}
{"time":"2025-09-21T15:07:39.912862014Z","level":"INFO","msg":"Event validation successful","module":"main","module":"loki-validator","valid_entries":4,"event":"ClusterLiquidated"}
{"time":"2025-09-21T15:07:39.912958287Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"liquidation"}
{"time":"2025-09-21T15:07:41.637489094Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99402893999200282400000000"}
{"time":"2025-09-21T15:07:41.637650007Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-09-21T15:07:41.637703483Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-09-21T15:07:41.96846008Z","level":"INFO","msg":"Reactivating cluster","test":"sanity","module":"contract","tx_hash":"0xbe0dd632ed9d834c5774babf230d70692ad6ba5fd2db02798994ba4936d9d940"}
{"time":"2025-09-21T15:07:41.974772828Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0xbe0dd632ed9d834c5774babf230d70692ad6ba5fd2db02798994ba4936d9d940"}
{"time":"2025-09-21T15:07:51.984533596Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0xbe0dd632ed9d834c5774babf230d70692ad6ba5fd2db02798994ba4936d9d940"}
{"time":"2025-09-21T15:07:51.98467579Z","level":"INFO","msg":"✅ SUCCESS: Cluster Reactivation Successful","test":"sanity","txHash":"0xbe0dd632ed9d834c5774babf230d70692ad6ba5fd2db02798994ba4936d9d940","block_hash":"0x9cf6d1dfc9d7b7ecd5fd70183372c146027eb4681aee5cd311ebe9491b0c7318"}
{"time":"2025-09-21T15:07:51.98489118Z","level":"INFO","msg":"Querying Loki for transaction hash validation","module":"main","module":"loki-validator","query":"{container=~\\"ssv-node-300|ssv-node-301|ssv-node-302|ssv-node-303\\"} |= \\"0xbe0dd632ed9d834c5774babf230d70692ad6ba5fd2db02798994ba4936d9d940\\"","tx_hash":"0xbe0dd632ed9d834c5774babf230d70692ad6ba5fd2db02798994ba4936d9d940"}
{"time":"2025-09-21T15:07:52.112887677Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1758456471,"end_unix":1758467271}
{"time":"2025-09-21T15:08:22.18854889Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1758456471,"end_unix":1758467302}
{"time":"2025-09-21T15:09:22.288531221Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1758456471,"end_unix":1758467362}
{"time":"2025-09-21T15:10:52.402461782Z","level":"INFO","msg":"Event validation successful","module":"main","module":"loki-validator","valid_entries":4,"event":"ClusterReactivated"}
{"time":"2025-09-21T15:10:52.402593193Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"reactivation"}
{"time":"2025-09-21T15:10:54.141626414Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99393893999200282400000000"}
{"time":"2025-09-21T15:10:54.141706636Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-09-21T15:10:54.141734173Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-09-21T15:10:54.655657065Z","level":"INFO","msg":"Removing validator","test":"sanity","module":"contract","tx_hash":"0x18d40c6540bc120631499041da995d8001b92e34642fd38abb37b8ea27aabb12"}
{"time":"2025-09-21T15:10:54.660788717Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x18d40c6540bc120631499041da995d8001b92e34642fd38abb37b8ea27aabb12"}
{"time":"2025-09-21T15:11:04.672710351Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":2,"sleep":20,"tx_hash":"0x18d40c6540bc120631499041da995d8001b92e34642fd38abb37b8ea27aabb12"}
{"time":"2025-09-21T15:11:24.697704486Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x18d40c6540bc120631499041da995d8001b92e34642fd38abb37b8ea27aabb12"}
{"time":"2025-09-21T15:11:24.697830862Z","level":"INFO","msg":"✅ SUCCESS: Contract Removal Successful","test":"sanity","blockHash":"0x6e84a68955adf195f7065f4a80a887f12664c3fb0481370acdcc9d0d2cbac5ee"}
{"time":"2025-09-21T15:11:24.856449763Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1758456684,"end_unix":1758467484}
{"time":"2025-09-21T15:11:54.921312112Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1758456684,"end_unix":1758467514}
{"time":"2025-09-21T15:12:54.969511033Z","level":"INFO","msg":"Validator event validation successful","module":"main","module":"loki-validator","validated_validators":1,"event":"ValidatorRemoved"}
{"time":"2025-09-21T15:12:54.969652035Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"removal"}
{"time":"2025-09-21T15:12:54.96979296Z","level":"INFO","msg":"✅ SUCCESS: Sanity Test Suite Completed Successfully","module":"main","register":{"Contract":true,"E2M":false,"Loki":true},"liquidate":{"Contract":true,"E2M":false,"Loki":true},"reactivate":{"Contract":true,"E2M":false,"Loki":true},"remove":{"Contract":true,"E2M":false,"Loki":true}}
{"time":"2025-09-21T15:12:54.96983287Z","level":"INFO","msg":"⏳ PROGRESS: Waiting for all tests to finish","module":"main"}
{"time":"2025-09-21T15:12:54.969921992Z","level":"INFO","msg":"✅ SUCCESS: All Test Suites Completed Successfully","module":"main","passed_suites":["sanity"],"skipped_suites":["isolated"]}
{"time":"2025-09-21T15:12:54.96997389Z","level":"INFO","msg":"🔑 KEY STEP: Starting resource teardown...","module":"main","usage_id":"d106cb8fd0583824dd0a787372605dd9"}
{"time":"2025-09-21T15:12:54.975887344Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","module":"main","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-09-21T15:12:54.976011828Z","level":"INFO","msg":"🧹 Requesting resource teardown","module":"main","usage_id":"d106cb8fd0583824dd0a787372605dd9"}
{"time":"2025-09-21T15:12:55.014112135Z","level":"INFO","msg":"✅ SUCCESS: Completed resource teardown successfully","module":"main","usage_id":"d106cb8fd0583824dd0a787372605dd9"}

2025-09-21T15:12:58Z The test run finished successfully

Result - 🟢 Success

# Conflicts:
#	protocol/v2/ssv/runner/runner.go
#	protocol/v2/ssv/runner/runner_validations.go
#	scripts/spec-alignment/differ.config.yaml
Copy link
Contributor

@iurii-ssv iurii-ssv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

I think we need to adjust the way we work with (pass around) ValueChecker to avoid the tight coupling between components involved - so we can work with this code later on in a simpler manner

@iurii-ssv iurii-ssv mentioned this pull request Sep 30, 2025
iurii-ssv and others added 4 commits October 7, 2025 16:51
* 2358: iurii refactor

* clarify what valCheck is

* fix linter

* fix spec tests

* cleanup

* fix marshaling spectest

* cleanup ValueChecker marshaling leftovers

---------

Co-authored-by: Nikita Kryuchkov <[email protected]>
iurii-ssv
iurii-ssv previously approved these changes Oct 7, 2025
Copy link
Contributor

@iurii-ssv iurii-ssv left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Looking good!

y0sher
y0sher previously approved these changes Oct 19, 2025
Copy link
Contributor

@y0sher y0sher left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

great job

@nkryuchkov nkryuchkov dismissed stale reviews from y0sher and iurii-ssv via 9513c9f October 23, 2025 14:23
@y0sher
Copy link
Contributor

y0sher commented Oct 25, 2025

/test tests=(sanity)

@ssv-test-bot
Copy link

ssv-test-bot bot commented Oct 25, 2025

🟢 Test run for PR #2358

Branch: compare-qbft-value
Commit: e40f16e

Status

2025-10-25T12:12:47Z Starting test run
2025-10-25T12:12:49Z Test run submitted successfully for commit e40f16e
2025-10-25T12:12:51Z container image for commit e40f16e0895e7985bee851a444e15107425a2594 is build and present in container registry
2025-10-25T12:12:52Z automatically allocated node range cluster=300,301,302,303 for test run on network=hoodi_stage
2025-10-25T12:12:53Z deploying commit e40f16e0895e7985bee851a444e15107425a2594 to ssv nodes 300,301,302,303
2025-10-25T12:13:53Z commit e40f16e0895e7985bee851a444e15107425a2594 is deployed to ssv nodes 300,301,302,303

Click to expand executor logs
═══════════════════════════════════════════════════════════════════════════════════════════════════════
                🧪  WELCOME TO Executor - SSV's Distributed Test Automation Execution Layer  🧪            

                                  ___ __  __ ___  ___  _   _  _____  ___   ___ 
                                 | __|\\ \\/ /| __|/ __|| | | ||_   _|/ _ \\ | _ \\
                                 | _|  >  < | _|| (__ | |_| |  | | | (_) ||   /
                                 |___|/_/\\_\\|___|\\___| \\___/   |_|  \\___/ |_|_\\
                                        

═══════════════════════════════════════════════════════════════════════════════════════════════════════
{"time":"2025-10-25T12:39:06.968071057Z","level":"INFO","msg":"🐳 Docker mode: Using environment variables for config generation"}
{"time":"2025-10-25T12:39:06.980129911Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-10-25T12:39:06.980223515Z","level":"INFO","msg":"📝 Requesting configuration generation from orchestrator API","network":"hoodi_stage","clusters":[300,301,302,303],"tests":"(sanity)"}
{"time":"2025-10-25T12:39:07.031668953Z","level":"INFO","msg":"✅ Configuration generated successfully via API","resource_usage_id":"a05053330c6dbae62d00cf6e7b319f80"}
{"time":"2025-10-25T12:39:07.03274041Z","level":"INFO","msg":"🚀 EXECUTOR Initialized Successfully"}
{"time":"2025-10-25T12:39:07.032866619Z","level":"INFO","msg":"⚙️ Test configuration loaded","network":"hoodi_stage","nodes":[300,301,302,303],"test_type":{"Sanity":{"ShouldRun":true,"E2M":false,"BulkAmount":0},"Bulk":{"ShouldRun":false,"E2M":false,"BulkAmount":0},"Isolated":{"Tests":null}}}
{"time":"2025-10-25T12:39:11.716477078Z","level":"INFO","msg":"Generated operator pubkeys file","module":"scanner","path":"/app/shared/data/operators/operator-pubkeys-hoodi_stage.json"}
{"time":"2025-10-25T12:39:11.716731511Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"consensus"}
{"time":"2025-10-25T12:39:11.71679255Z","level":"INFO","msg":"Registered parser","module":"main","component":"parser-client","parser_type":"flow-emits"}
{"time":"2025-10-25T12:39:11.716848563Z","level":"INFO","msg":"Validation client initialized","module":"main","loki_enabled":true,"e2m_enabled":false}
{"time":"2025-10-25T12:39:11.716884586Z","level":"INFO","msg":"🔑 KEY STEP: Starting Isolated Tests Concurrently if exists...","module":"main"}
{"time":"2025-10-25T12:39:11.716936714Z","level":"INFO","msg":"🔑 KEY STEP: Starting Sanity Test Suite","module":"main"}
{"time":"2025-10-25T12:39:11.717218554Z","level":"INFO","msg":"No isolated tests configured, skipping","module":"main"}
{"time":"2025-10-25T12:39:11.789974695Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":300}
{"time":"2025-10-25T12:39:11.801860964Z","level":"INFO","msg":"Available slots","test":"sanity","node":300,"slots":3000}
{"time":"2025-10-25T12:39:11.801950556Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":301}
{"time":"2025-10-25T12:39:11.808690776Z","level":"INFO","msg":"Available slots","test":"sanity","node":301,"slots":755}
{"time":"2025-10-25T12:39:11.808791318Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":302}
{"time":"2025-10-25T12:39:11.81858645Z","level":"INFO","msg":"Available slots","test":"sanity","node":302,"slots":451}
{"time":"2025-10-25T12:39:11.818690427Z","level":"INFO","msg":"Getting available slots","test":"sanity","node":303}
{"time":"2025-10-25T12:39:11.825620635Z","level":"INFO","msg":"Available slots","test":"sanity","node":303,"slots":1072}
{"time":"2025-10-25T12:40:48.785379947Z","level":"INFO","msg":"Extracted keyshares path","test":"sanity","module":"keys","path":"/app/shared/data/keyshares/0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d.json"}
{"time":"2025-10-25T12:40:48.785461847Z","level":"INFO","msg":"Key shares file generated successfully","test":"sanity","keyshare_path":"/app/shared/data/keyshares/0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d.json"}
{"time":"2025-10-25T12:40:51.346232613Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99204309999200282400000000"}
{"time":"2025-10-25T12:40:51.346336349Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-10-25T12:40:51.346404993Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-10-25T12:40:51.35085686Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99204309999200282400000000"}
{"time":"2025-10-25T12:40:51.350944437Z","level":"INFO","msg":"Allowance","test":"sanity","module":"contract","allowance":"99204309999200282400000000"}
{"time":"2025-10-25T12:40:51.688392162Z","level":"INFO","msg":"Registering validator","test":"sanity","module":"contract","tx_hash":"0x50e52f6234c91fca08a06879c8232ab780b1c533b1f6ac8a58e733709d8552a4"}
{"time":"2025-10-25T12:40:51.694247811Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x50e52f6234c91fca08a06879c8232ab780b1c533b1f6ac8a58e733709d8552a4"}
{"time":"2025-10-25T12:41:01.702781779Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":2,"sleep":20,"tx_hash":"0x50e52f6234c91fca08a06879c8232ab780b1c533b1f6ac8a58e733709d8552a4"}
{"time":"2025-10-25T12:41:21.709637185Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x50e52f6234c91fca08a06879c8232ab780b1c533b1f6ac8a58e733709d8552a4"}
{"time":"2025-10-25T12:41:21.709763689Z","level":"INFO","msg":"✅ SUCCESS: Contract Register Successful","test":"sanity","txHash":"0x50e52f6234c91fca08a06879c8232ab780b1c533b1f6ac8a58e733709d8552a4","block_hash":"0xb28b51fa267249462fd8536c707cae7c2a35b89c561a73010c3ebbe1512e4bbb"}
{"time":"2025-10-25T12:41:21.724254109Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":10,"attempt":1}
{"time":"2025-10-25T12:41:31.741324434Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":20,"attempt":2}
{"time":"2025-10-25T12:41:51.764168293Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":40,"attempt":3}
{"time":"2025-10-25T12:42:31.782034951Z","level":"INFO","msg":"Failed to get data for validator from exporter - retrying...","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d","timeToSleep":80,"attempt":4}
{"time":"2025-10-25T12:43:51.847815745Z","level":"INFO","msg":"Successfully retrieved validator index from exporter","test":"sanity","module":"helpers","pubkey":"0x88e97e72ea3a862b12b44028e65f2af490b8cc19d4b6f1915f1f80325cff9f02d8f5c6fd79f127c5fde7a90fcaa43b8d"}
{"time":"2025-10-25T12:43:52.70783362Z","level":"INFO","msg":"Validator event validation successful","module":"main","module":"loki-validator","validated_validators":1,"event":"ValidatorAdded"}
{"time":"2025-10-25T12:43:52.708041021Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"registration"}
{"time":"2025-10-25T12:43:55.24262328Z","level":"INFO","msg":"Liquidating cluster","test":"sanity","module":"contract","tx_hash":"0xfbe4858d2ee3859dae9b70a633ed01fd4aaf74beb415db8e92fc6311babc39a6"}
{"time":"2025-10-25T12:43:55.246210531Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0xfbe4858d2ee3859dae9b70a633ed01fd4aaf74beb415db8e92fc6311babc39a6"}
{"time":"2025-10-25T12:44:05.257210036Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0xfbe4858d2ee3859dae9b70a633ed01fd4aaf74beb415db8e92fc6311babc39a6"}
{"time":"2025-10-25T12:44:05.25740285Z","level":"INFO","msg":"✅ SUCCESS: Cluster Liquidation Successful","test":"sanity","txHash":"0xfbe4858d2ee3859dae9b70a633ed01fd4aaf74beb415db8e92fc6311babc39a6","block_hash":"0xeb405478e2e6782a96aaa83d62ffef64b88c4d16552cc1234f99694f20f72414"}
{"time":"2025-10-25T12:44:05.257562256Z","level":"INFO","msg":"Querying Loki for transaction hash validation","module":"main","module":"loki-validator","query":"{container=~\\"ssv-node-300|ssv-node-301|ssv-node-302|ssv-node-303\\"} |= \\"0xfbe4858d2ee3859dae9b70a633ed01fd4aaf74beb415db8e92fc6311babc39a6\\"","tx_hash":"0xfbe4858d2ee3859dae9b70a633ed01fd4aaf74beb415db8e92fc6311babc39a6"}
{"time":"2025-10-25T12:44:05.422038327Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1761385445,"end_unix":1761396245}
{"time":"2025-10-25T12:44:35.492377239Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1761385445,"end_unix":1761396275}
{"time":"2025-10-25T12:45:35.597288235Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1761385445,"end_unix":1761396335}
{"time":"2025-10-25T12:47:05.736276014Z","level":"INFO","msg":"Event validation successful","module":"main","module":"loki-validator","valid_entries":4,"event":"ClusterLiquidated"}
{"time":"2025-10-25T12:47:05.736390594Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"liquidation"}
{"time":"2025-10-25T12:47:08.398216281Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99204309999200282400000000"}
{"time":"2025-10-25T12:47:08.398325964Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-10-25T12:47:08.398360696Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-10-25T12:47:08.425780507Z","level":"INFO","msg":"Reactivating cluster","test":"sanity","module":"contract","tx_hash":"0xbed22408d172ce4741f5ed7a80a09202c50ae2d896e81db3a6ac422dfcea363e"}
{"time":"2025-10-25T12:47:08.429489393Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0xbed22408d172ce4741f5ed7a80a09202c50ae2d896e81db3a6ac422dfcea363e"}
{"time":"2025-10-25T12:47:18.443005152Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0xbed22408d172ce4741f5ed7a80a09202c50ae2d896e81db3a6ac422dfcea363e"}
{"time":"2025-10-25T12:47:18.443166223Z","level":"INFO","msg":"✅ SUCCESS: Cluster Reactivation Successful","test":"sanity","txHash":"0xbed22408d172ce4741f5ed7a80a09202c50ae2d896e81db3a6ac422dfcea363e","block_hash":"0x4d4d480826557563bcfa5cf3ea79fe68dbf53c112ee65e277b58043f15752259"}
{"time":"2025-10-25T12:47:18.443412893Z","level":"INFO","msg":"Querying Loki for transaction hash validation","module":"main","module":"loki-validator","query":"{container=~\\"ssv-node-300|ssv-node-301|ssv-node-302|ssv-node-303\\"} |= \\"0xbed22408d172ce4741f5ed7a80a09202c50ae2d896e81db3a6ac422dfcea363e\\"","tx_hash":"0xbed22408d172ce4741f5ed7a80a09202c50ae2d896e81db3a6ac422dfcea363e"}
{"time":"2025-10-25T12:47:18.58136411Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1761385638,"end_unix":1761396438}
{"time":"2025-10-25T12:47:48.639760537Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1761385638,"end_unix":1761396468}
{"time":"2025-10-25T12:48:48.750319458Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1761385638,"end_unix":1761396528}
{"time":"2025-10-25T12:50:18.872058179Z","level":"INFO","msg":"Event validation successful","module":"main","module":"loki-validator","valid_entries":4,"event":"ClusterReactivated"}
{"time":"2025-10-25T12:50:18.872241093Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"reactivation"}
{"time":"2025-10-25T12:50:21.377125813Z","level":"INFO","msg":"Allowance fetched successfully","test":"sanity","module":"contract","account":"0x91e32efb8139cd88cae0df30d2bf471294c6ed27","allowance":"99195309999200282400000000"}
{"time":"2025-10-25T12:50:21.377183062Z","level":"INFO","msg":"Threshold value","test":"sanity","module":"contract","threshold":"9000000000000000000000"}
{"time":"2025-10-25T12:50:21.377196355Z","level":"INFO","msg":"Sufficient allowance","test":"sanity","module":"contract","allowance margin":"6561000000000000000000000000000000000000000000000000000000000000000000000000000000000000"}
{"time":"2025-10-25T12:50:21.402362471Z","level":"INFO","msg":"Removing validator","test":"sanity","module":"contract","tx_hash":"0x8be31a6b8564bf62742e528acb3d14a1530e7234e9cc0fb241d3879e93881a9a"}
{"time":"2025-10-25T12:50:21.405882133Z","level":"INFO","msg":"Waiting for transaction receipt, retrying...","test":"sanity","module":"contract","attempt":1,"sleep":10,"tx_hash":"0x8be31a6b8564bf62742e528acb3d14a1530e7234e9cc0fb241d3879e93881a9a"}
{"time":"2025-10-25T12:50:31.41030373Z","level":"INFO","msg":"Transaction receipt received","test":"sanity","module":"contract","tx_hash":"0x8be31a6b8564bf62742e528acb3d14a1530e7234e9cc0fb241d3879e93881a9a"}
{"time":"2025-10-25T12:50:31.410442858Z","level":"INFO","msg":"✅ SUCCESS: Contract Removal Successful","test":"sanity","blockHash":"0xc66cca9c3fc35721240ab1811d0fd9423d940ded092c32913bd41b762188c959"}
{"time":"2025-10-25T12:50:31.554627777Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":1,"max_retries":5,"delay_seconds":30,"start_unix":1761385831,"end_unix":1761396631}
{"time":"2025-10-25T12:51:01.616717153Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":2,"max_retries":5,"delay_seconds":60,"start_unix":1761385831,"end_unix":1761396661}
{"time":"2025-10-25T12:52:01.669827504Z","level":"INFO","msg":"No logs found, retrying after delay (nodes may still be processing)","module":"main","module":"loki-validator","attempt":3,"max_retries":5,"delay_seconds":90,"start_unix":1761385831,"end_unix":1761396721}
{"time":"2025-10-25T12:53:31.81403621Z","level":"INFO","msg":"Validator event validation successful","module":"main","module":"loki-validator","validated_validators":1,"event":"ValidatorRemoved"}
{"time":"2025-10-25T12:53:31.814176874Z","level":"INFO","msg":"SSV node log validation successful","test":"sanity","indices":["1092460"],"validators":1,"validate-type":"removal"}
{"time":"2025-10-25T12:53:31.814342388Z","level":"INFO","msg":"✅ SUCCESS: Sanity Test Suite Completed Successfully","module":"main","register":{"Contract":true,"E2M":false,"Loki":true},"liquidate":{"Contract":true,"E2M":false,"Loki":true},"reactivate":{"Contract":true,"E2M":false,"Loki":true},"remove":{"Contract":true,"E2M":false,"Loki":true}}
{"time":"2025-10-25T12:53:31.814376918Z","level":"INFO","msg":"⏳ PROGRESS: Waiting for all tests to finish","module":"main"}
{"time":"2025-10-25T12:53:31.814431579Z","level":"INFO","msg":"✅ SUCCESS: All Test Suites Completed Successfully","module":"main","passed_suites":["sanity"],"skipped_suites":["isolated"]}
{"time":"2025-10-25T12:53:31.814466977Z","level":"INFO","msg":"🔑 KEY STEP: Starting resource teardown...","module":"main","usage_id":"a05053330c6dbae62d00cf6e7b319f80"}
{"time":"2025-10-25T12:53:31.82562864Z","level":"INFO","msg":"🌐 Orchestrator API Client initialized","module":"main","endpoint":"http://aetheria-orchestrator.aetheria.svc:8080"}
{"time":"2025-10-25T12:53:31.825743562Z","level":"INFO","msg":"🧹 Requesting resource teardown","module":"main","usage_id":"a05053330c6dbae62d00cf6e7b319f80"}
{"time":"2025-10-25T12:53:31.857827636Z","level":"INFO","msg":"✅ SUCCESS: Completed resource teardown successfully","module":"main","usage_id":"a05053330c6dbae62d00cf6e7b319f80"}

2025-10-25T12:53:35Z The test run finished successfully

Result - 🟢 Success

@y0sher y0sher merged commit c658104 into stage Oct 26, 2025
5 checks passed
@y0sher y0sher deleted the compare-qbft-value branch October 26, 2025 15:30
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

7 participants