diff --git a/.babelrc b/.babelrc new file mode 100644 index 00000000..5c9d91c2 --- /dev/null +++ b/.babelrc @@ -0,0 +1,15 @@ +{ + "presets": [ + [ + "next/babel", + { + "preset-env": { + "exclude": ["transform-exponentiation-operator"] + } + } + ] + ], + "plugins": [ + "babel-plugin-styled-components" + ] +} diff --git a/.env.example b/.env.example index 7acc7fe6..89a5c817 100644 --- a/.env.example +++ b/.env.example @@ -1,16 +1,16 @@ # RPC API urls by network # EL_RPC_URLS_{CHAIN_ID} list or URLs delimeted by commas, first entry is primary, else are fallbacks EL_RPC_URLS_1= -EL_RPC_URLS_17000= +EL_RPC_URLS_560048= # IPFS prefill RPC URLs - list of URLs delimited by commas PREFILL_UNSAFE_EL_RPC_URLS_1= -PREFILL_UNSAFE_EL_RPC_URLS_17000= +PREFILL_UNSAFE_EL_RPC_URLS_560048= # CL API urls by network # CL_API_URLS_{CHAIN_ID} list or URLs delimeted by commas, first entry is primary, else are fallbacks CL_API_URLS_1= -CL_API_URLS_17000= +CL_API_URLS_560048= # MAINTENANCE mode MAINTENANCE= @@ -44,5 +44,40 @@ WALLETCONNECT_PROJECT_ID= # ETH Stake Widget API for IPFS mode WIDGET_API_BASE_PATH_FOR_IPFS= -# Survey api -SURVEY_API=https://survey.testnet.fi +# EthSeer API +ETHSEER_API_URL=https://monitoreth.io/data-api/api/eth/v1/beacon/consensus/lido/csm/participation_rate +ETHSEER_API_TOKEN= + +# CSM SDK API URLs +KEYS_API_URL= +FEES_MONITORING_API_URL= + +# -------- Environment variables for tests -------- + +# testnet, prod, staging, preview, local +STAND_TYPE= + +# Default wallet with node operator +WALLET_SECRET_PHRASE= +# Full empty wallet +EMPTY_SECRET_PHRASE= +# Wallet with empty node operator +EMPTY_NODE_SECRET_PHRASE= + +WALLET_PASSWORD= + +# RPC url directly +RPC_URL= + +# All credentianals for run tests on preview stand +PREVIEW_STAND_URL= +PREVIEW_STAND_LOGIN= +PREVIEW_STAND_PASSWORD= + +# Refuse CF blocks for tests +REFUSE_CF_BLOCK_NAME= +REFUSE_CF_BLOCK_VALUE= + +# Forked tests settings +USE_FORK= # true | false +JUST_DIR= # Example: /Users//community-staking-module diff --git a/.eslintignore b/.eslintignore index 55d8dacb..38c90005 100644 --- a/.eslintignore +++ b/.eslintignore @@ -1,6 +1,7 @@ # dependencies /node_modules /.pnp +/lido-csm-sdk # testing /coverage @@ -15,3 +16,7 @@ # generated /generated + +**/.browser_context** + +/tests diff --git a/.eslintrc.json b/.eslintrc.json index 0cc6fa65..2e829d0c 100644 --- a/.eslintrc.json +++ b/.eslintrc.json @@ -42,6 +42,12 @@ { "checksVoidReturn": false } + ], + "import/no-extraneous-dependencies": [ + "error", + { + "devDependencies": ["tests/**"] + } ] }, "settings": { diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index 9acf268e..ef92236f 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,4 @@ * @lidofinance/community-staking .github @lidofinance/review-gh-workflows +tests/ @lidofinance/lido-qa +playwright.config.* @lidofinance/lido-qa diff --git a/.github/workflows/ci-dev.yml b/.github/workflows/ci-dev.yml index dfe72ff2..25e81cf3 100644 --- a/.github/workflows/ci-dev.yml +++ b/.github/workflows/ci-dev.yml @@ -1,4 +1,4 @@ -name: CI Dev +name: CI Dev Hoodi on: workflow_dispatch: @@ -25,5 +25,5 @@ jobs: APP_ID: ${{ secrets.APP_ID }} APP_PRIVATE_KEY: ${{ secrets.APP_PRIVATE_KEY }} TARGET_REPO: "lidofinance/infra-mainnet" - TARGET_WORKFLOW: "deploy_testnet_csm_widget.yaml" + TARGET_WORKFLOW: "deploy_hoodi_testnet_csm_widget.yaml" TARGET: "develop" diff --git a/.github/workflows/ci-preview-deploy.yml b/.github/workflows/ci-preview-deploy.yml index f2bd30ce..eab1b3da 100644 --- a/.github/workflows/ci-preview-deploy.yml +++ b/.github/workflows/ci-preview-deploy.yml @@ -13,8 +13,7 @@ on: - testnet pull_request: - types: - [opened, synchronize, reopened, ready_for_review] + types: [opened, synchronize, reopened, ready_for_review] branches-ignore: - main @@ -66,3 +65,14 @@ jobs: env: SHORT_NAME: ${{ steps.repo.outputs.short_name }} BRANCH_HASH: ${{ steps.branch.outputs.hash }} + + tests: + needs: deploy + if: ${{ github.event.pull_request.draft == false }} + uses: ./.github/workflows/tests.yml + secrets: inherit + with: + preview_stand_url: ${{ needs.deploy.outputs.stand_url }} + stand_type: "preview" + tags: "smoke" + qase_plan_id: 5 # Smoke Preview Plan diff --git a/.github/workflows/tests-fork.yml b/.github/workflows/tests-fork.yml new file mode 100644 index 00000000..30030ab1 --- /dev/null +++ b/.github/workflows/tests-fork.yml @@ -0,0 +1,183 @@ +name: Forked Test CSM-widget +run-name: Forked CSM-widget Tests. Env [${{ github.event.inputs.stand_type || 'testnet' }}] + +on: + schedule: + - cron: "0 6 * * *" # Every day at 6 AM UTC + workflow_dispatch: + inputs: + stand_type: + description: "Stand type" + required: true + type: choice + default: testnet + options: + - testnet + - preview + preview_stand_url: + description: 'Preview stand url (only if "Stand type" is "preview")' + required: false + type: string + preview_stand_env: + description: 'Preview stand env (only if "Stand type" is "preview")' + required: false + type: choice + default: testnet + options: + - testnet + - infra + +jobs: + bootstrap: + name: Bootstrap environment + runs-on: ubuntu-latest + outputs: + cache-path: ${{ steps.cache.outputs.path }} + cache-key: ${{ steps.cache.outputs.key }} + env: + JUST_TAG: 1.24.0 + steps: + - name: Build cache params + id: cache + run: | + echo "path=$CACHE_PATH" >> "$GITHUB_OUTPUT" + echo "$KEY_INPUT" | md5sum | awk '{print $1}' | xargs -I% echo "key=cargobin-%-${RUNNER_OS}" >> "$GITHUB_OUTPUT" + env: + CACHE_PATH: | + ~/.cargo/bin/ + KEY_INPUT: | + just:${{env.JUST_TAG}} + + - uses: actions/cache@v4 + id: get-cache + with: + path: ${{ steps.cache.outputs.path }} + key: ${{ steps.cache.outputs.key }} + + - name: Install just + run: cargo install "just@$JUST_TAG" + if: steps.get-cache.outputs.cache-hit != 'true' + + test: + runs-on: ubuntu-24.04 + needs: bootstrap + env: + # Required envs + RPC_URL: ${{ secrets.RPC_URL }} + WALLET_SECRET_PHRASE: ${{ secrets.WALLET_SECRET_PHRASE }} + WALLET_PASSWORD: ${{ secrets.WALLET_PASSWORD }} + EMPTY_SECRET_PHRASE: ${{ secrets.EMPTY_SECRET_PHRASE }} + EMPTY_NODE_SECRET_PHRASE: ${{ secrets.EMPTY_NODE_SECRET_PHRASE }} + STAND_TYPE: ${{ inputs.stand_type || github.event.inputs.STAND_TYPE || 'testnet' }} + + # Common envs + QASE_API_TOKEN: ${{ secrets.QASE_API_TOKEN }} + QASE_PROJECT_ID: "CSM" + + QASE_PLAN_ID: "8" + GH_ACTION_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_BRANCH_REF_NAME: ${{ github.ref_name }} + GH_EVENT_NAME: ${{ github.event_name }} + NODE_OPTIONS: --max-old-space-size=4096 + TEST_TAGS: "forked" + TEST_BRANCH: ${{ github.event.inputs.branch }} + REPORT_ENABLED: "${{ github.event_name == 'schedule' && 'true' || 'false' }}" + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL}} + SLACK_DUTY_TAG: "S09H269H2TT" + + # Optional envs + REFUSE_CF_BLOCK_NAME: ${{ secrets.REFUSE_CF_BLOCK_NAME }} + REFUSE_CF_BLOCK_VALUE: ${{ secrets.REFUSE_CF_BLOCK_VALUE }} + PUSHGATEWAY_URL: ${{ secrets.PUSHGATEWAY_URL }} + PUSHGATEWAY_USERNAME: ${{ secrets.PUSHGATEWAY_USERNAME }} + PUSHGATEWAY_PASSWORD: ${{ secrets.PUSHGATEWAY_PASSWORD }} + GRAFANA_URL: ${{ secrets.GRAFANA_URL }} + GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} + + # Forked test envs + USE_FORK: true + DEPLOY_CONFIG: ./artifacts/hoodi/deploy-hoodi.json + CHAIN: hoodi + ARTIFACTS_DIR: ./artifacts/hoodi/ + + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ github.event.pull_request.head.sha }} + persist-credentials: false + + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "yarn" + + - name: Checkout community-staking-module + uses: actions/checkout@v4 + with: + repository: lidofinance/community-staking-module + path: community-staking-module + ref: main + + - uses: actions/cache@v4 + with: + path: ${{ needs.bootstrap.outputs.cache-path }} + key: ${{ needs.bootstrap.outputs.cache-key }} + + - name: Install Foundry + uses: foundry-rs/foundry-toolchain@v1 + with: + version: v1.2.3 + + - name: Restore yarn cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }} + + - name: Install CSM Contracts dependencies + run: | + cd community-staking-module && yarn install --immutable + + - name: Build CSM Fork + run: cd community-staking-module && just deps && just build + + - name: Install dependencies + run: yarn install --immutable + + - name: Install Playwright Browsers + run: yarn playwright install chromium --with-deps + + # - name: Download keys generator binary + # run: bash ./tests/scripts/set_up_keys_generator.sh + + - name: Set up preview-stand credentials + if: ${{ inputs.stand_type == 'preview' || github.event.inputs.stand_type == 'preview' }} + run: | + if [ -n "${{ inputs.preview_stand_url || github.event.inputs.preview_stand_url }}" ]; then + echo "Setting login and password for preview stand" + echo "PREVIEW_STAND_LOGIN=${{ secrets.PREVIEW_STAND_LOGIN }}" >> $GITHUB_ENV + echo "PREVIEW_STAND_PASSWORD=${{ secrets.PREVIEW_STAND_PASSWORD }}" >> $GITHUB_ENV + echo "PREVIEW_STAND_URL=${{ inputs.preview_stand_url || github.event.inputs.preview_stand_url }}" >> $GITHUB_ENV + echo "PREVIEW_STAND_ENV=${{ github.event.inputs.preview_stand_env }}" >> $GITHUB_ENV + else + echo "PREVIEW_STAND_URL not provided for preview environment" + exit 1 + fi + + - name: Run tests based on suite input + run: | + echo -e "\033[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" + echo -e "🚀 Running on Stand Type: \033[1;34m$STAND_TYPE\033[0m" + echo -e "🧪 Test Tags: \033[1;34m$TEST_TAGS\033[0m" + echo -e "🌱 Branch: \033[1;34m${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}\033[0m" + echo -e "🔗 Test Plan: \033[1;34m${QASE_PLAN_ID}\033[0m" + echo -e "\033[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" + + xvfb-run --auto-servernum -- yarn test:e2e + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 1 diff --git a/.github/workflows/tests.yml b/.github/workflows/tests.yml new file mode 100644 index 00000000..3312e9b0 --- /dev/null +++ b/.github/workflows/tests.yml @@ -0,0 +1,153 @@ +name: Test CSM-widget +run-name: CSM-widget Tests. Env [${{ github.event.inputs.stand_type || 'testnet' }}] + +on: + schedule: + - cron: "0 6 * * *" # Every day at 6 AM UTC + workflow_dispatch: + inputs: + stand_type: + description: "Stand type" + required: true + type: choice + default: testnet + options: + - prod + - staging + - testnet + - preview + tags: + description: "Tags for running test suite" + required: false + type: choice + default: "-" + options: + - "-" + - smoke + - performTX + preview_stand_url: + description: 'Preview stand url (only if "Stand type" is "preview")' + required: false + type: string + preview_stand_env: + description: 'Preview stand env (only if "Stand type" is "preview")' + required: false + type: choice + default: testnet + options: + - testnet + - infra + workflow_call: + inputs: + preview_stand_url: + required: true + type: string + description: Stand url + stand_type: + description: "Stand type" + required: true + type: string + tags: + required: false + type: string + default: "-" + description: "Test tags" + qase_plan_id: + required: false + type: number + description: "Qase Plan ID" + +jobs: + test: + runs-on: ubuntu-24.04 + env: + # Required envs + RPC_URL: ${{ secrets.RPC_URL }} + WALLET_SECRET_PHRASE: ${{ secrets.WALLET_SECRET_PHRASE }} + WALLET_PASSWORD: ${{ secrets.WALLET_PASSWORD }} + EMPTY_SECRET_PHRASE: ${{ secrets.EMPTY_SECRET_PHRASE }} + EMPTY_NODE_SECRET_PHRASE: ${{ secrets.EMPTY_NODE_SECRET_PHRASE }} + STAND_TYPE: ${{ inputs.stand_type || github.event.inputs.STAND_TYPE || 'testnet' }} + + # Common envs + QASE_API_TOKEN: ${{ secrets.QASE_API_TOKEN }} + QASE_PROJECT_ID: "CSM" + QASE_PLAN_ID: "${{ inputs.qase_plan_id || (github.event_name == 'schedule' && 7) || '' }}" + GH_ACTION_URL: ${{ github.server_url }}/${{ github.repository }}/actions/runs/${{ github.run_id }} + GH_BRANCH_REF_NAME: ${{ github.ref_name }} + GH_EVENT_NAME: ${{ github.event_name }} + NODE_OPTIONS: --max-old-space-size=4096 + TEST_TAGS: ${{ inputs.tags || github.event.inputs.tags || '!forked'}} + TEST_BRANCH: ${{ github.event.inputs.branch }} + REPORT_ENABLED: "${{ github.event_name == 'schedule' && 'true' || 'false' }}" + DISCORD_WEBHOOK_URL: ${{ secrets.DISCORD_WEBHOOK_URL}} + DISCORD_DUTY_TAG: "&1372906915667116032" + SLACK_WEBHOOK_URL: ${{ secrets.SLACK_WEBHOOK_URL}} + SLACK_DUTY_TAG: "S09H269H2TT" + + # Optional envs + REFUSE_CF_BLOCK_NAME: ${{ secrets.REFUSE_CF_BLOCK_NAME }} + REFUSE_CF_BLOCK_VALUE: ${{ secrets.REFUSE_CF_BLOCK_VALUE }} + PUSHGATEWAY_URL: ${{ secrets.PUSHGATEWAY_URL }} + PUSHGATEWAY_USERNAME: ${{ secrets.PUSHGATEWAY_USERNAME }} + PUSHGATEWAY_PASSWORD: ${{ secrets.PUSHGATEWAY_PASSWORD }} + GRAFANA_URL: ${{ secrets.GRAFANA_URL }} + GRAFANA_API_KEY: ${{ secrets.GRAFANA_API_KEY }} + + steps: + - uses: actions/checkout@v5 + with: + ref: ${{ github.event.pull_request.head.sha }} + persist-credentials: false + + - uses: actions/setup-node@v4 + with: + node-version: "20" + cache: "yarn" + + - name: Restore yarn cache + uses: actions/cache@v4 + with: + path: node_modules + key: ${{ runner.os }}-node_modules-${{ hashFiles('**/yarn.lock') }} + + - name: Install dependencies + run: yarn install --immutable + + - name: Install Playwright Browsers + run: yarn playwright install chromium --with-deps + + - name: Download keys generator binary + run: bash ./tests/scripts/set_up_keys_generator.sh + + - name: Set up preview-stand credentials + if: ${{ inputs.stand_type == 'preview' || github.event.inputs.stand_type == 'preview' }} + run: | + if [ -n "${{ inputs.preview_stand_url || github.event.inputs.preview_stand_url }}" ]; then + echo "Setting login and password for preview stand" + echo "PREVIEW_STAND_LOGIN=${{ secrets.PREVIEW_STAND_LOGIN }}" >> $GITHUB_ENV + echo "PREVIEW_STAND_PASSWORD=${{ secrets.PREVIEW_STAND_PASSWORD }}" >> $GITHUB_ENV + echo "PREVIEW_STAND_URL=${{ inputs.preview_stand_url || github.event.inputs.preview_stand_url }}" >> $GITHUB_ENV + echo "PREVIEW_STAND_ENV=${{ github.event.inputs.preview_stand_env }}" >> $GITHUB_ENV + else + echo "PREVIEW_STAND_URL not provided for preview environment" + exit 1 + fi + + - name: Run tests based on suite input + run: | + echo -e "\033[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" + echo -e "🚀 Running on Stand Type: \033[1;34m$STAND_TYPE\033[0m" + echo -e "🧪 Test Tags: \033[1;34m$TEST_TAGS\033[0m" + echo -e "🌱 Branch: \033[1;34m${GITHUB_HEAD_REF:-$GITHUB_REF_NAME}\033[0m" + echo -e "🔗 Test Plan: \033[1;34m${QASE_PLAN_ID}\033[0m" + echo -e "\033[34m━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━\033[0m" + + xvfb-run --auto-servernum -- yarn test:e2e + + - uses: actions/upload-artifact@v4 + if: always() + with: + name: playwright-report + path: playwright-report/ + retention-days: 1 diff --git a/.gitignore b/.gitignore index 0a71a893..eddd2331 100644 --- a/.gitignore +++ b/.gitignore @@ -12,12 +12,14 @@ tsconfig.tsbuildinfo /test-results/ /playwright-report/ /playwright/.cache/ +.playwright-mcp/ # testing /coverage # generated /generated +/modules/web3/generated.ts # next.js /.next/ @@ -42,5 +44,12 @@ yarn-error.log* #ide .vscode .idea +.claude +.mcp.json +.qodo +**/.browser_context** /public/runtime/ +/keys-generator-bin/ +deposit_data.json +local_fork_config.json diff --git a/.prettierignore b/.prettierignore index b87ad429..cec00323 100644 --- a/.prettierignore +++ b/.prettierignore @@ -13,3 +13,5 @@ /build CHANGELOG.md + +/.browser_context** diff --git a/CLAUDE.md b/CLAUDE.md new file mode 100644 index 00000000..2527cf0d --- /dev/null +++ b/CLAUDE.md @@ -0,0 +1,87 @@ +# CLAUDE.md + +This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository. + +## Development Commands + +- **Development server**: `yarn dev` - Starts Next.js development server on +- **Build**: `yarn build` - Builds production bundle +- **Production server**: `yarn start` - Starts production server (requires build first) +- **Lint**: `yarn lint` - Runs ESLint on TypeScript files +- **Lint fix**: `yarn lint:fix` - Runs ESLint with auto-fix +- **Type check**: `yarn types` - Runs TypeScript compiler type checking +- **Tests**: `yarn test` - Runs Playwright e2e tests (same as `yarn test:e2e`) +- **Unit tests**: `yarn test:unit` - Runs Jest unit tests + +## Environment Setup + +The project requires an `.env.local` file with environment variables. Copy from `.env.example` and configure: + +- RPC provider URLs and CL API URLs with keys +- For testing, also set `STAND_TYPE`, `WALLET_SECRET_PHRASE`, `WALLET_PASSWORD`, `RPC_URL_TOKEN` + +Install Playwright browser for tests: `yarn playwright install chromium --with-deps` + +## Architecture Overview + +This is a Next.js React application for Lido's Community Staking Module (CSM) widget, built on the Lido Frontend Template. + +### Key Technologies + +- **Next.js 12** with Pages Router (not App Router) +- **React 18** with TypeScript +- **Styled Components** for styling +- **Wagmi v2** + **Reef-Knot** for Web3 wallet connections +- **Lido SDKs** (`@lidofinance/lido-csm-sdk`, `@lidofinance/lido-ethereum-sdk`) +- **React Query** for data fetching +- **React Hook Form** for form management +- **viem** for blockchain interactions + +### Project Structure + +#### Core Directories + +- **`features/`** - Main feature modules (dashboard, add-bond, add-keys, etc.) +- **`shared/`** - Reusable components, hooks, utilities +- **`modules/web3/`** - Web3 provider setup and blockchain hooks +- **`config/`** - Configuration management with feature flags +- **`consts/`** - Application constants and mappings +- **`pages/`** - Next.js pages and API routes + +#### Key Architecture Patterns + +**Feature-Based Structure**: Each feature in `features/` contains its page component, form logic, and feature-specific components. + +**Web3 Integration**: + +- `modules/web3/web3-provider/` - Wagmi + Reef-Knot wallet provider setup +- `modules/web3/hooks/` - Custom hooks for blockchain data (balances, operator info, etc.) +- `modules/web3/operator-provider/` - Node operator context and state management + +**Configuration System**: + +- Runtime configuration with server/public configs in `next.config.mjs` +- Feature flags in `config/feature-flags/` +- User configuration in `config/user-config/` + +**Shared Components**: + +- `shared/components/` - Reusable UI components +- `shared/hook-form/` - Form controls and validation utilities +- `shared/layout/` - Navigation, header, footer components + +### Development Notes + +- Uses **publicRuntimeConfig** for environment variables to support Docker deployment +- Includes bundle analysis with `ANALYZE_BUNDLE=true yarn build` +- Has automatic versioning using conventional commits +- Uses Playwright for e2e testing with wallet extensions + +## Code Formatting + +**IMPORTANT**: Always follow the project's formatting rules when creating or editing files: + +- Respect `.editorconfig` settings for indentation, line endings, and file encoding +- Follow `.prettierrc` configuration for code formatting and style +- Run `yarn lint:fix` after making changes to ensure consistent formatting +- Always use `type` declarations instead of `interface` declarations for TypeScript type definitions diff --git a/README.md b/README.md index b66ad5ce..6c639ffd 100644 --- a/README.md +++ b/README.md @@ -60,6 +60,35 @@ git commit -m "feat: dark theme" yarn build && yarn start ``` +## Running Tests + +Before running the test suite, create a file named `.env.local` in the project root and populate it with the following variables: + +```dotenv +# Choose one: testnet, prod, staging, preview +STAND_TYPE=testnet + +# Wallet environment +WALLET_SECRET_PHRASE= +WALLET_PASSWORD= +``` + +Replace each value as needed for your environment. + +Install browser: + +```sh +yarn playwright install chromium --with-deps +``` + +To execute the tests, simply run: + +```sh +yarn test +``` + +This will load your .env.local file and run all configured test scripts. + ## Release flow To create a new release: diff --git a/abi/CSAccounting.json b/abi/CSAccounting.json deleted file mode 100644 index 9251e63f..00000000 --- a/abi/CSAccounting.json +++ /dev/null @@ -1,2293 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "lidoLocator", - "type": "address", - "internalType": "address" - }, - { - "name": "communityStakingModule", - "type": "address", - "internalType": "address" - }, - { - "name": "maxCurveLength", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "minBondLockRetentionPeriod", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxBondLockRetentionPeriod", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ACCOUNTING_MANAGER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "CSM", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ICSModule" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "DEFAULT_BOND_CURVE_ID", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "LIDO", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILido" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "LIDO_LOCATOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILidoLocator" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MANAGE_BOND_CURVES_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_BOND_LOCK_RETENTION_PERIOD", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_CURVE_LENGTH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MIN_BOND_LOCK_RETENTION_PERIOD", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MIN_CURVE_LENGTH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PAUSE_INFINITELY", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PAUSE_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RECOVERER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RESET_BOND_CURVE_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RESUME_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SET_BOND_CURVE_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "WITHDRAWAL_QUEUE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IWithdrawalQueue" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "WSTETH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IWstETH" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "addBondCurve", - "inputs": [ - { - "name": "bondCurve", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [ - { - "name": "id", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "chargeFee", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "chargePenaltyRecipient", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "claimRewardsStETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimRewardsUnstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stEthAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimRewardsWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "wstETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "compensateLockedBondETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "depositETH", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "depositStETH", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "depositWstETH", - "inputs": [ - { - "name": "from", - "type": "address", - "internalType": "address" - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "wstETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "feeDistributor", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ICSFeeDistributor" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getActualLockedBond", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBond", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondAmountByKeysCount", - "inputs": [ - { - "name": "keys", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curve", - "type": "tuple", - "internalType": "struct ICSBondCurve.BondCurve", - "components": [ - { - "name": "points", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "trend", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "getBondAmountByKeysCount", - "inputs": [ - { - "name": "keys", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondAmountByKeysCountWstETH", - "inputs": [ - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondAmountByKeysCountWstETH", - "inputs": [ - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curve", - "type": "tuple", - "internalType": "struct ICSBondCurve.BondCurve", - "components": [ - { - "name": "points", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "trend", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondCurve", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ICSBondCurve.BondCurve", - "components": [ - { - "name": "points", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "trend", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondCurveId", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondLockRetentionPeriod", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondShares", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondSummary", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "current", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "required", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getBondSummaryShares", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "current", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "required", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getCurveInfo", - "inputs": [ - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ICSBondCurve.BondCurve", - "components": [ - { - "name": "points", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "trend", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getKeysCountByBondAmount", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curve", - "type": "tuple", - "internalType": "struct ICSBondCurve.BondCurve", - "components": [ - { - "name": "points", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "trend", - "type": "uint256", - "internalType": "uint256" - } - ] - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "getKeysCountByBondAmount", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getLockedBondInfo", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct ICSBondLock.BondLock", - "components": [ - { - "name": "amount", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "retentionUntil", - "type": "uint128", - "internalType": "uint128" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRequiredBondForNextKeys", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "additionalKeys", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRequiredBondForNextKeysWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "additionalKeys", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getResumeSinceTimestamp", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMember", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMemberCount", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUnbondedKeysCount", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getUnbondedKeysCountToEject", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "bondCurve", - "type": "uint256[]", - "internalType": "uint256[]" - }, - { - "name": "admin", - "type": "address", - "internalType": "address" - }, - { - "name": "_feeDistributor", - "type": "address", - "internalType": "address" - }, - { - "name": "bondLockRetentionPeriod", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_chargePenaltyRecipient", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isPaused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "lockBondETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "pauseFor", - "inputs": [ - { - "name": "duration", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "penalize", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "pullFeeRewards", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC1155", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC20", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC721", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverEther", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverStETHShares", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "releaseLockedBondETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renewBurnerAllowance", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resetBondCurve", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resume", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setBondCurve", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setChargePenaltyRecipient", - "inputs": [ - { - "name": "_chargePenaltyRecipient", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setLockedBondRetentionPeriod", - "inputs": [ - { - "name": "retention", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "settleLockedBondETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalBondShares", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "updateBondCurve", - "inputs": [ - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "bondCurve", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "BondBurned", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "toBurnAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "burnedAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondCharged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "toChargeAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "chargedAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondClaimedStETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondClaimedUnstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "requestId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondClaimedWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "to", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondCurveAdded", - "inputs": [ - { - "name": "bondCurve", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondCurveSet", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "curveId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondCurveUpdated", - "inputs": [ - { - "name": "curveId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "bondCurve", - "type": "uint256[]", - "indexed": false, - "internalType": "uint256[]" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondDepositedETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondDepositedStETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondDepositedWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "from", - "type": "address", - "indexed": false, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondLockChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "newAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "retentionUntil", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondLockCompensated", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondLockRemoved", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "BondLockRetentionPeriodChanged", - "inputs": [ - { - "name": "retentionPeriod", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ChargePenaltyRecipientSet", - "inputs": [ - { - "name": "chargePenaltyRecipient", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC1155Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC20Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC721Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EtherRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "duration", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Resumed", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StETHSharesRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "ElRewardsVaultReceiveFailed", - "inputs": [] - }, - { - "type": "error", - "name": "FailedToSendEther", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBondCurveId", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBondCurveLength", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBondCurveMaxLength", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBondCurveValues", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBondLockAmount", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBondLockRetentionPeriod", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInitialisationCurveId", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "NodeOperatorDoesNotExist", - "inputs": [] - }, - { - "type": "error", - "name": "NotAllowedToRecover", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - }, - { - "type": "error", - "name": "NothingToClaim", - "inputs": [] - }, - { - "type": "error", - "name": "PauseUntilMustBeInFuture", - "inputs": [] - }, - { - "type": "error", - "name": "PausedExpected", - "inputs": [] - }, - { - "type": "error", - "name": "ResumedExpected", - "inputs": [] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { - "name": "bits", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SenderIsNotCSM", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAdminAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroChargePenaltyRecipientAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroFeeDistributorAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroLocatorAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroModuleAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroPauseDuration", - "inputs": [] - } -] diff --git a/abi/CSEarlyAdoption.json b/abi/CSEarlyAdoption.json deleted file mode 100644 index 87952339..00000000 --- a/abi/CSEarlyAdoption.json +++ /dev/null @@ -1,185 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "treeRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "curveId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "module", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "CURVE_ID", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MODULE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "TREE_ROOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "consume", - "inputs": [ - { - "name": "member", - "type": "address", - "internalType": "address" - }, - { - "name": "proof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hashLeaf", - "inputs": [ - { - "name": "member", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "isConsumed", - "inputs": [ - { - "name": "member", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "verifyProof", - "inputs": [ - { - "name": "member", - "type": "address", - "internalType": "address" - }, - { - "name": "proof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "Consumed", - "inputs": [ - { - "name": "member", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AlreadyConsumed", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidCurveId", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidProof", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidTreeRoot", - "inputs": [] - }, - { - "type": "error", - "name": "SenderIsNotModule", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroModuleAddress", - "inputs": [] - } -] diff --git a/abi/CSFeeDistributor.json b/abi/CSFeeDistributor.json deleted file mode 100644 index 1b757229..00000000 --- a/abi/CSFeeDistributor.json +++ /dev/null @@ -1,885 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "stETH", - "type": "address", - "internalType": "address" - }, - { - "name": "accounting", - "type": "address", - "internalType": "address" - }, - { - "name": "oracle", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "ACCOUNTING", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "ORACLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RECOVERER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "STETH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IStETH" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "distributeFees", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "shares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "proof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [ - { - "name": "sharesToDistribute", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "distributedShares", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getFeesToDistribute", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "shares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "proof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [ - { - "name": "sharesToDistribute", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMember", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMemberCount", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "hashLeaf", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "shares", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "pure" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "admin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "logCid", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "pendingSharesToDistribute", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "processOracleReport", - "inputs": [ - { - "name": "_treeRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "_treeCid", - "type": "string", - "internalType": "string" - }, - { - "name": "_logCid", - "type": "string", - "internalType": "string" - }, - { - "name": "distributed", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC1155", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC20", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC721", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverEther", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "totalClaimableShares", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "treeCid", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "string", - "internalType": "string" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "treeRoot", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "DistributionDataUpdated", - "inputs": [ - { - "name": "totalClaimableShares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "treeRoot", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "treeCid", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DistributionLogUpdated", - "inputs": [ - { - "name": "logCid", - "type": "string", - "indexed": false, - "internalType": "string" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC1155Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC20Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC721Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EtherRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "FeeDistributed", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StETHSharesRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "FailedToSendEther", - "inputs": [] - }, - { - "type": "error", - "name": "FeeSharesDecrease", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidLogCID", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidProof", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidShares", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidTreeCID", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidTreeRoot", - "inputs": [] - }, - { - "type": "error", - "name": "NotAccounting", - "inputs": [] - }, - { - "type": "error", - "name": "NotAllowedToRecover", - "inputs": [] - }, - { - "type": "error", - "name": "NotEnoughShares", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - }, - { - "type": "error", - "name": "NotOracle", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAccountingAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAdminAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroOracleAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroStEthAddress", - "inputs": [] - } -] diff --git a/abi/CSFeeOracle.json b/abi/CSFeeOracle.json deleted file mode 100644 index 26c11c25..00000000 --- a/abi/CSFeeOracle.json +++ /dev/null @@ -1,1381 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "secondsPerSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "genesisTime", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "CONTRACT_MANAGER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GENESIS_TIME", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MANAGE_CONSENSUS_CONTRACT_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MANAGE_CONSENSUS_VERSION_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PAUSE_INFINITELY", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PAUSE_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RECOVERER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RESUME_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SECONDS_PER_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SUBMIT_DATA_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "avgPerfLeewayBP", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "discardConsensusReport", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "feeDistributor", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ICSFeeDistributor" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConsensusContract", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConsensusReport", - "inputs": [], - "outputs": [ - { - "name": "hash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "refSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "processingDeadlineTime", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "processingStarted", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getConsensusVersion", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getContractVersion", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getLastProcessingRefSlot", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getResumeSinceTimestamp", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMember", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMemberCount", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "admin", - "type": "address", - "internalType": "address" - }, - { - "name": "feeDistributorContract", - "type": "address", - "internalType": "address" - }, - { - "name": "consensusContract", - "type": "address", - "internalType": "address" - }, - { - "name": "consensusVersion", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "_avgPerfLeewayBP", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isPaused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "pauseFor", - "inputs": [ - { - "name": "duration", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "pauseUntil", - "inputs": [ - { - "name": "pauseUntilInclusive", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC1155", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC20", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC721", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverEther", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resume", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConsensusContract", - "inputs": [ - { - "name": "addr", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setConsensusVersion", - "inputs": [ - { - "name": "version", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setFeeDistributorContract", - "inputs": [ - { - "name": "feeDistributorContract", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setPerformanceLeeway", - "inputs": [ - { - "name": "valueBP", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "submitConsensusReport", - "inputs": [ - { - "name": "reportHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "refSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "submitReportData", - "inputs": [ - { - "name": "data", - "type": "tuple", - "internalType": "struct CSFeeOracle.ReportData", - "components": [ - { - "name": "consensusVersion", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "refSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "treeRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "treeCid", - "type": "string", - "internalType": "string" - }, - { - "name": "logCid", - "type": "string", - "internalType": "string" - }, - { - "name": "distributed", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "name": "contractVersion", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "event", - "name": "ConsensusHashContractSet", - "inputs": [ - { - "name": "addr", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "prevAddr", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ConsensusVersionSet", - "inputs": [ - { - "name": "version", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "prevVersion", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ContractVersionSet", - "inputs": [ - { - "name": "version", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC1155Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC20Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC721Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EtherRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "FeeDistributorContractSet", - "inputs": [ - { - "name": "feeDistributorContract", - "type": "address", - "indexed": false, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "duration", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PerfLeewaySet", - "inputs": [ - { - "name": "valueBP", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ProcessingStarted", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "hash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReportDiscarded", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "hash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ReportSubmitted", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "hash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "processingDeadlineTime", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Resumed", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StETHSharesRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WarnProcessingMissed", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "AddressCannotBeSame", - "inputs": [] - }, - { - "type": "error", - "name": "AddressCannotBeZero", - "inputs": [] - }, - { - "type": "error", - "name": "FailedToSendEther", - "inputs": [] - }, - { - "type": "error", - "name": "HashCannotBeZero", - "inputs": [] - }, - { - "type": "error", - "name": "InitialRefSlotCannotBeLessThanProcessingOne", - "inputs": [ - { - "name": "initialRefSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "processingRefSlot", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "InvalidContractVersion", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidContractVersionIncrement", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidPerfLeeway", - "inputs": [] - }, - { - "type": "error", - "name": "NoConsensusReportToProcess", - "inputs": [] - }, - { - "type": "error", - "name": "NonZeroContractVersionOnInit", - "inputs": [] - }, - { - "type": "error", - "name": "NotAllowedToRecover", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - }, - { - "type": "error", - "name": "PauseUntilMustBeInFuture", - "inputs": [] - }, - { - "type": "error", - "name": "PausedExpected", - "inputs": [] - }, - { - "type": "error", - "name": "ProcessingDeadlineMissed", - "inputs": [ - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "RefSlotAlreadyProcessing", - "inputs": [] - }, - { - "type": "error", - "name": "RefSlotCannotDecrease", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "prevRefSlot", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "RefSlotMustBeGreaterThanProcessingOne", - "inputs": [ - { - "name": "refSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "processingRefSlot", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "ResumedExpected", - "inputs": [] - }, - { - "type": "error", - "name": "SafeCastOverflowedUintDowncast", - "inputs": [ - { - "name": "bits", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "SecondsPerSlotCannotBeZero", - "inputs": [] - }, - { - "type": "error", - "name": "SenderIsNotTheConsensusContract", - "inputs": [] - }, - { - "type": "error", - "name": "SenderNotAllowed", - "inputs": [] - }, - { - "type": "error", - "name": "UnexpectedChainConfig", - "inputs": [] - }, - { - "type": "error", - "name": "UnexpectedConsensusVersion", - "inputs": [ - { - "name": "expectedVersion", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "receivedVersion", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnexpectedContractVersion", - "inputs": [ - { - "name": "expected", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "received", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "UnexpectedDataHash", - "inputs": [ - { - "name": "consensusHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "receivedHash", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "UnexpectedRefSlot", - "inputs": [ - { - "name": "consensusRefSlot", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "dataRefSlot", - "type": "uint256", - "internalType": "uint256" - } - ] - }, - { - "type": "error", - "name": "VersionCannotBeSame", - "inputs": [] - }, - { - "type": "error", - "name": "VersionCannotBeZero", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAdminAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroFeeDistributorAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroPauseDuration", - "inputs": [] - } -] diff --git a/abi/CSModule.json b/abi/CSModule.json deleted file mode 100644 index 58868ea4..00000000 --- a/abi/CSModule.json +++ /dev/null @@ -1,3033 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "moduleType", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "minSlashingPenaltyQuotient", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "elRewardsStealingFine", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxKeysPerOperatorEA", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "maxKeyRemovalCharge", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lidoLocator", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "DEFAULT_ADMIN_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "EL_REWARDS_STEALING_FINE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "INITIAL_SLASHING_PENALTY", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "LIDO_LOCATOR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ILidoLocator" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_KEY_REMOVAL_CHARGE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MAX_SIGNING_KEYS_PER_OPERATOR_BEFORE_PUBLIC_RELEASE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MODULE_MANAGER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PAUSE_INFINITELY", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PAUSE_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RECOVERER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "REPORT_EL_REWARDS_STEALING_PENALTY_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "RESUME_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SETTLE_EL_REWARDS_STEALING_PENALTY_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "STAKING_ROUTER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "STETH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract IStETH" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "VERIFIER_ROLE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "accounting", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ICSAccounting" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "activatePublicRelease", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addNodeOperatorETH", - "inputs": [ - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "managementProperties", - "type": "tuple", - "internalType": "struct NodeOperatorManagementProperties", - "components": [ - { - "name": "managerAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "extendedManagerPermissions", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "name": "eaProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "referrer", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "addNodeOperatorStETH", - "inputs": [ - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "managementProperties", - "type": "tuple", - "internalType": "struct NodeOperatorManagementProperties", - "components": [ - { - "name": "managerAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "extendedManagerPermissions", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "name": "eaProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "referrer", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addNodeOperatorWstETH", - "inputs": [ - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "managementProperties", - "type": "tuple", - "internalType": "struct NodeOperatorManagementProperties", - "components": [ - { - "name": "managerAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "extendedManagerPermissions", - "type": "bool", - "internalType": "bool" - } - ] - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "name": "eaProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "referrer", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addValidatorKeysETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "addValidatorKeysStETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "addValidatorKeysWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "cancelELRewardsStealingPenalty", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "changeNodeOperatorRewardAddress", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "newAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimRewardsStETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimRewardsUnstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stEthAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "claimRewardsWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "wstETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "cumulativeFeeShares", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "rewardsProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "cleanDepositQueue", - "inputs": [ - { - "name": "maxItems", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "removed", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "lastRemovedAtDepth", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "compensateELRewardsStealingPenalty", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "confirmNodeOperatorManagerAddressChange", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "confirmNodeOperatorRewardAddressChange", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "decreaseVettedSigningKeysCount", - "inputs": [ - { - "name": "nodeOperatorIds", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "vettedSigningKeysCounts", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "depositETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "payable" - }, - { - "type": "function", - "name": "depositQueue", - "inputs": [], - "outputs": [ - { - "name": "head", - "type": "uint128", - "internalType": "uint128" - }, - { - "name": "tail", - "type": "uint128", - "internalType": "uint128" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "depositQueueItem", - "inputs": [ - { - "name": "index", - "type": "uint128", - "internalType": "uint128" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "Batch" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "depositStETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "depositWstETH", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "wstETHAmount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "permit", - "type": "tuple", - "internalType": "struct ICSAccounting.PermitInput", - "components": [ - { - "name": "value", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "deadline", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "v", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "r", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "s", - "type": "bytes32", - "internalType": "bytes32" - } - ] - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "earlyAdoption", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ICSEarlyAdoption" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getActiveNodeOperatorsCount", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNodeOperator", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "tuple", - "internalType": "struct NodeOperator", - "components": [ - { - "name": "totalAddedKeys", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalWithdrawnKeys", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalDepositedKeys", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "totalVettedKeys", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "stuckValidatorsCount", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "depositableValidatorsCount", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "targetLimit", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "targetLimitMode", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "totalExitedKeys", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "enqueuedCount", - "type": "uint32", - "internalType": "uint32" - }, - { - "name": "managerAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "proposedManagerAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "rewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "proposedRewardAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "extendedManagerPermissions", - "type": "bool", - "internalType": "bool" - } - ] - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNodeOperatorIds", - "inputs": [ - { - "name": "offset", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "limit", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "nodeOperatorIds", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNodeOperatorIsActive", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNodeOperatorNonWithdrawnKeys", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNodeOperatorSummary", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "targetLimitMode", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "targetValidatorsCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stuckValidatorsCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "refundedValidatorsCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stuckPenaltyEndTimestamp", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "totalExitedValidators", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "totalDepositedValidators", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "depositableValidatorsCount", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNodeOperatorsCount", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getNonce", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getResumeSinceTimestamp", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleAdmin", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMember", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "index", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getRoleMemberCount", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSigningKeys", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "startIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getSigningKeysWithSignatures", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "startIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "keys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getStakingModuleSummary", - "inputs": [], - "outputs": [ - { - "name": "totalExitedValidators", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "totalDepositedValidators", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "depositableValidatorsCount", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "getType", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "bytes32" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "grantRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "hasRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "initialize", - "inputs": [ - { - "name": "_accounting", - "type": "address", - "internalType": "address" - }, - { - "name": "_earlyAdoption", - "type": "address", - "internalType": "address" - }, - { - "name": "_keyRemovalCharge", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "admin", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "isPaused", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidatorSlashed", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "isValidatorWithdrawn", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "keyRemovalCharge", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "normalizeQueue", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "obtainDepositData", - "inputs": [ - { - "name": "depositsCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [ - { - "name": "publicKeys", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "signatures", - "type": "bytes", - "internalType": "bytes" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onExitedAndStuckValidatorsCountsUpdated", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onRewardsMinted", - "inputs": [ - { - "name": "totalShares", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "onWithdrawalCredentialsChanged", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "pauseFor", - "inputs": [ - { - "name": "duration", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "proposeNodeOperatorManagerAddressChange", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "proposedAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "proposeNodeOperatorRewardAddressChange", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "proposedAddress", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "publicRelease", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "recoverERC1155", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC20", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverERC721", - "inputs": [ - { - "name": "token", - "type": "address", - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "recoverEther", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "removeKeys", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "startIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keysCount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "renounceRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "callerConfirmation", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "reportELRewardsStealingPenalty", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "blockHash", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resetNodeOperatorManagerAddress", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "resume", - "inputs": [], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "revokeRole", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "internalType": "address" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "setKeyRemovalCharge", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "settleELRewardsStealingPenalty", - "inputs": [ - { - "name": "nodeOperatorIds", - "type": "uint256[]", - "internalType": "uint256[]" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "submitInitialSlashing", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "submitWithdrawal", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "isSlashed", - "type": "bool", - "internalType": "bool" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "supportsInterface", - "inputs": [ - { - "name": "interfaceId", - "type": "bytes4", - "internalType": "bytes4" - } - ], - "outputs": [ - { - "name": "", - "type": "bool", - "internalType": "bool" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "unsafeUpdateValidatorsCount", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "exitedValidatorsKeysCount", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "stuckValidatorsKeysCount", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateExitedValidatorsCount", - "inputs": [ - { - "name": "nodeOperatorIds", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "exitedValidatorsCounts", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateRefundedValidatorsCount", - "inputs": [ - { - "name": "", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateStuckValidatorsCount", - "inputs": [ - { - "name": "nodeOperatorIds", - "type": "bytes", - "internalType": "bytes" - }, - { - "name": "stuckValidatorsCounts", - "type": "bytes", - "internalType": "bytes" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "updateTargetValidatorsLimits", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "targetLimitMode", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "targetLimit", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "event", - "name": "BatchEnqueued", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "count", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositableSigningKeysCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "depositableKeysCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "DepositedSigningKeysCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "depositedKeysCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ELRewardsStealingPenaltyCancelled", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ELRewardsStealingPenaltyCompensated", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ELRewardsStealingPenaltyReported", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "proposedBlockHash", - "type": "bytes32", - "indexed": false, - "internalType": "bytes32" - }, - { - "name": "stolenAmount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ELRewardsStealingPenaltySettled", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC1155Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC20Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ERC721Recovered", - "inputs": [ - { - "name": "token", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "tokenId", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "EtherRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "ExitedSigningKeysCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "exitedKeysCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "InitialSlashingSubmitted", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "pubkey", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Initialized", - "inputs": [ - { - "name": "version", - "type": "uint64", - "indexed": false, - "internalType": "uint64" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "KeyRemovalChargeApplied", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "KeyRemovalChargeSet", - "inputs": [ - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NodeOperatorAdded", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "managerAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "rewardAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NodeOperatorManagerAddressChangeProposed", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "oldProposedAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newProposedAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NodeOperatorManagerAddressChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "oldAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NodeOperatorRewardAddressChangeProposed", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "oldProposedAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newProposedAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NodeOperatorRewardAddressChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "oldAddress", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "newAddress", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "NonceChanged", - "inputs": [ - { - "name": "nonce", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Paused", - "inputs": [ - { - "name": "duration", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "PublicRelease", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "ReferrerSet", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "referrer", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "Resumed", - "inputs": [], - "anonymous": false - }, - { - "type": "event", - "name": "RoleAdminChanged", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "previousAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "newAdminRole", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleGranted", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "RoleRevoked", - "inputs": [ - { - "name": "role", - "type": "bytes32", - "indexed": true, - "internalType": "bytes32" - }, - { - "name": "account", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "sender", - "type": "address", - "indexed": true, - "internalType": "address" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SigningKeyAdded", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "pubkey", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "SigningKeyRemoved", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "pubkey", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StETHSharesRecovered", - "inputs": [ - { - "name": "recipient", - "type": "address", - "indexed": true, - "internalType": "address" - }, - { - "name": "shares", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "StuckSigningKeysCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "stuckKeysCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TargetValidatorsCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "targetLimitMode", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "targetValidatorsCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "TotalSigningKeysCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "totalKeysCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "VettedSigningKeysCountChanged", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "vettedKeysCount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "VettedSigningKeysCountDecreased", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - } - ], - "anonymous": false - }, - { - "type": "event", - "name": "WithdrawalSubmitted", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "pubkey", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - } - ], - "anonymous": false - }, - { - "type": "error", - "name": "AccessControlBadConfirmation", - "inputs": [] - }, - { - "type": "error", - "name": "AccessControlUnauthorizedAccount", - "inputs": [ - { - "name": "account", - "type": "address", - "internalType": "address" - }, - { - "name": "neededRole", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "type": "error", - "name": "AlreadyActivated", - "inputs": [] - }, - { - "type": "error", - "name": "AlreadyProposed", - "inputs": [] - }, - { - "type": "error", - "name": "AlreadySubmitted", - "inputs": [] - }, - { - "type": "error", - "name": "EmptyKey", - "inputs": [] - }, - { - "type": "error", - "name": "ExitedKeysDecrease", - "inputs": [] - }, - { - "type": "error", - "name": "ExitedKeysHigherThanTotalDeposited", - "inputs": [] - }, - { - "type": "error", - "name": "FailedToSendEther", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidAmount", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInitialization", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidInput", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidKeysCount", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidLength", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidReportData", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidVetKeysPointer", - "inputs": [] - }, - { - "type": "error", - "name": "MaxSigningKeysCountExceeded", - "inputs": [] - }, - { - "type": "error", - "name": "MethodCallIsNotAllowed", - "inputs": [] - }, - { - "type": "error", - "name": "NodeOperatorDoesNotExist", - "inputs": [] - }, - { - "type": "error", - "name": "NotAllowedToJoinYet", - "inputs": [] - }, - { - "type": "error", - "name": "NotAllowedToRecover", - "inputs": [] - }, - { - "type": "error", - "name": "NotEnoughKeys", - "inputs": [] - }, - { - "type": "error", - "name": "NotInitializing", - "inputs": [] - }, - { - "type": "error", - "name": "NotSupported", - "inputs": [] - }, - { - "type": "error", - "name": "PauseUntilMustBeInFuture", - "inputs": [] - }, - { - "type": "error", - "name": "PausedExpected", - "inputs": [] - }, - { - "type": "error", - "name": "QueueIsEmpty", - "inputs": [] - }, - { - "type": "error", - "name": "QueueLookupNoLimit", - "inputs": [] - }, - { - "type": "error", - "name": "ResumedExpected", - "inputs": [] - }, - { - "type": "error", - "name": "SameAddress", - "inputs": [] - }, - { - "type": "error", - "name": "SenderIsNotEligible", - "inputs": [] - }, - { - "type": "error", - "name": "SenderIsNotManagerAddress", - "inputs": [] - }, - { - "type": "error", - "name": "SenderIsNotProposedAddress", - "inputs": [] - }, - { - "type": "error", - "name": "SenderIsNotRewardAddress", - "inputs": [] - }, - { - "type": "error", - "name": "SigningKeysInvalidOffset", - "inputs": [] - }, - { - "type": "error", - "name": "StuckKeysHigherThanNonExited", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAccountingAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroAdminAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroLocatorAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroPauseDuration", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroRewardAddress", - "inputs": [] - } -] diff --git a/abi/CSModuleOld.json b/abi/CSModuleOld.json deleted file mode 100644 index b4b91bc2..00000000 --- a/abi/CSModuleOld.json +++ /dev/null @@ -1,47 +0,0 @@ -[ - { - "type": "event", - "name": "InitialSlashingSubmitted", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - }, - - { - "type": "event", - "name": "WithdrawalSubmitted", - "inputs": [ - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - }, - { - "name": "amount", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } -] diff --git a/abi/CSVerifier.json b/abi/CSVerifier.json deleted file mode 100644 index 47b47927..00000000 --- a/abi/CSVerifier.json +++ /dev/null @@ -1,711 +0,0 @@ -[ - { - "type": "constructor", - "inputs": [ - { - "name": "withdrawalAddress", - "type": "address", - "internalType": "address" - }, - { - "name": "module", - "type": "address", - "internalType": "address" - }, - { - "name": "slotsPerEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "gIFirstWithdrawalPrev", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "gIFirstWithdrawalCurr", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "gIFirstValidatorPrev", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "gIFirstValidatorCurr", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "gIHistoricalSummariesPrev", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "gIHistoricalSummariesCurr", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "firstSupportedSlot", - "type": "uint64", - "internalType": "Slot" - }, - { - "name": "pivotSlot", - "type": "uint64", - "internalType": "Slot" - } - ], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "BEACON_ROOTS", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "FIRST_SUPPORTED_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "Slot" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GI_FIRST_VALIDATOR_CURR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "GIndex" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GI_FIRST_VALIDATOR_PREV", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "GIndex" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GI_FIRST_WITHDRAWAL_CURR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "GIndex" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GI_FIRST_WITHDRAWAL_PREV", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "GIndex" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GI_HISTORICAL_SUMMARIES_CURR", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "GIndex" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "GI_HISTORICAL_SUMMARIES_PREV", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "bytes32", - "internalType": "GIndex" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "MODULE", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "contract ICSModule" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "PIVOT_SLOT", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "Slot" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "SLOTS_PER_EPOCH", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "uint64", - "internalType": "uint64" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "WITHDRAWAL_ADDRESS", - "inputs": [], - "outputs": [ - { - "name": "", - "type": "address", - "internalType": "address" - } - ], - "stateMutability": "view" - }, - { - "type": "function", - "name": "processHistoricalWithdrawalProof", - "inputs": [ - { - "name": "beaconBlock", - "type": "tuple", - "internalType": "struct ICSVerifier.ProvableBeaconBlockHeader", - "components": [ - { - "name": "header", - "type": "tuple", - "internalType": "struct BeaconBlockHeader", - "components": [ - { - "name": "slot", - "type": "uint64", - "internalType": "Slot" - }, - { - "name": "proposerIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "parentRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "stateRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "bodyRoot", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "name": "rootsTimestamp", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { - "name": "oldBlock", - "type": "tuple", - "internalType": "struct ICSVerifier.HistoricalHeaderWitness", - "components": [ - { - "name": "header", - "type": "tuple", - "internalType": "struct BeaconBlockHeader", - "components": [ - { - "name": "slot", - "type": "uint64", - "internalType": "Slot" - }, - { - "name": "proposerIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "parentRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "stateRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "bodyRoot", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "name": "rootGIndex", - "type": "bytes32", - "internalType": "GIndex" - }, - { - "name": "proof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ] - }, - { - "name": "witness", - "type": "tuple", - "internalType": "struct ICSVerifier.WithdrawalWitness", - "components": [ - { - "name": "withdrawalOffset", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "withdrawalIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "validatorIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "amount", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawalCredentials", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "effectiveBalance", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "slashed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "activationEligibilityEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "activationEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "exitEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawableEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawalProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "validatorProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ] - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "processSlashingProof", - "inputs": [ - { - "name": "beaconBlock", - "type": "tuple", - "internalType": "struct ICSVerifier.ProvableBeaconBlockHeader", - "components": [ - { - "name": "header", - "type": "tuple", - "internalType": "struct BeaconBlockHeader", - "components": [ - { - "name": "slot", - "type": "uint64", - "internalType": "Slot" - }, - { - "name": "proposerIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "parentRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "stateRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "bodyRoot", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "name": "rootsTimestamp", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { - "name": "witness", - "type": "tuple", - "internalType": "struct ICSVerifier.SlashingWitness", - "components": [ - { - "name": "validatorIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawalCredentials", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "effectiveBalance", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "activationEligibilityEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "activationEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "exitEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawableEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "validatorProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ] - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "function", - "name": "processWithdrawalProof", - "inputs": [ - { - "name": "beaconBlock", - "type": "tuple", - "internalType": "struct ICSVerifier.ProvableBeaconBlockHeader", - "components": [ - { - "name": "header", - "type": "tuple", - "internalType": "struct BeaconBlockHeader", - "components": [ - { - "name": "slot", - "type": "uint64", - "internalType": "Slot" - }, - { - "name": "proposerIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "parentRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "stateRoot", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "bodyRoot", - "type": "bytes32", - "internalType": "bytes32" - } - ] - }, - { - "name": "rootsTimestamp", - "type": "uint64", - "internalType": "uint64" - } - ] - }, - { - "name": "witness", - "type": "tuple", - "internalType": "struct ICSVerifier.WithdrawalWitness", - "components": [ - { - "name": "withdrawalOffset", - "type": "uint8", - "internalType": "uint8" - }, - { - "name": "withdrawalIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "validatorIndex", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "amount", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawalCredentials", - "type": "bytes32", - "internalType": "bytes32" - }, - { - "name": "effectiveBalance", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "slashed", - "type": "bool", - "internalType": "bool" - }, - { - "name": "activationEligibilityEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "activationEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "exitEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawableEpoch", - "type": "uint64", - "internalType": "uint64" - }, - { - "name": "withdrawalProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - }, - { - "name": "validatorProof", - "type": "bytes32[]", - "internalType": "bytes32[]" - } - ] - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "internalType": "uint256" - }, - { - "name": "keyIndex", - "type": "uint256", - "internalType": "uint256" - } - ], - "outputs": [], - "stateMutability": "nonpayable" - }, - { - "type": "error", - "name": "IndexOutOfRange", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidBlockHeader", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidChainConfig", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidGIndex", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidPivotSlot", - "inputs": [] - }, - { - "type": "error", - "name": "InvalidWithdrawalAddress", - "inputs": [] - }, - { - "type": "error", - "name": "PartialWithdrawal", - "inputs": [] - }, - { - "type": "error", - "name": "RootNotFound", - "inputs": [] - }, - { - "type": "error", - "name": "UnsupportedSlot", - "inputs": [ - { - "name": "slot", - "type": "uint64", - "internalType": "Slot" - } - ] - }, - { - "type": "error", - "name": "ValidatorNotWithdrawn", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroModuleAddress", - "inputs": [] - }, - { - "type": "error", - "name": "ZeroWithdrawalAddress", - "inputs": [] - } -] diff --git a/abi/ExitBusOracle.json b/abi/ExitBusOracle.json deleted file mode 100644 index 424ed10b..00000000 --- a/abi/ExitBusOracle.json +++ /dev/null @@ -1,39 +0,0 @@ -[ - { - "type": "event", - "name": "ValidatorExitRequest", - "inputs": [ - { - "name": "stakingModuleId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "nodeOperatorId", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "validatorIndex", - "type": "uint256", - "indexed": true, - "internalType": "uint256" - }, - { - "name": "validatorPubkey", - "type": "bytes", - "indexed": false, - "internalType": "bytes" - }, - { - "name": "timestamp", - "type": "uint256", - "indexed": false, - "internalType": "uint256" - } - ], - "anonymous": false - } -] diff --git a/abi/StakingRouter.json b/abi/StakingRouter.json deleted file mode 100644 index f2ad4b99..00000000 --- a/abi/StakingRouter.json +++ /dev/null @@ -1,2012 +0,0 @@ -[ - { - "inputs": [ - { - "internalType": "address", - "name": "_depositContract", - "type": "address" - } - ], - "stateMutability": "nonpayable", - "type": "constructor" - }, - { "inputs": [], "name": "AppAuthLidoFailed", "type": "error" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "firstArrayLength", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "secondArrayLength", - "type": "uint256" - } - ], - "name": "ArraysLengthMismatch", - "type": "error" - }, - { "inputs": [], "name": "DepositContractZeroAddress", "type": "error" }, - { "inputs": [], "name": "DirectETHTransfer", "type": "error" }, - { "inputs": [], "name": "EmptyWithdrawalsCredentials", "type": "error" }, - { - "inputs": [], - "name": "ExitedValidatorsCountCannotDecrease", - "type": "error" - }, - { "inputs": [], "name": "InvalidContractVersionIncrement", "type": "error" }, - { - "inputs": [ - { "internalType": "uint256", "name": "etherValue", "type": "uint256" }, - { "internalType": "uint256", "name": "depositsCount", "type": "uint256" } - ], - "name": "InvalidDepositsValue", - "type": "error" - }, - { "inputs": [], "name": "InvalidFeeSum", "type": "error" }, - { "inputs": [], "name": "InvalidMaxDepositPerBlockValue", "type": "error" }, - { "inputs": [], "name": "InvalidMinDepositBlockDistance", "type": "error" }, - { - "inputs": [], - "name": "InvalidPriorityExitShareThreshold", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "actual", "type": "uint256" }, - { "internalType": "uint256", "name": "expected", "type": "uint256" } - ], - "name": "InvalidPublicKeysBatchLength", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "code", "type": "uint256" } - ], - "name": "InvalidReportData", - "type": "error" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "actual", "type": "uint256" }, - { "internalType": "uint256", "name": "expected", "type": "uint256" } - ], - "name": "InvalidSignaturesBatchLength", - "type": "error" - }, - { "inputs": [], "name": "InvalidStakeShareLimit", "type": "error" }, - { "inputs": [], "name": "NonZeroContractVersionOnInit", "type": "error" }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "reportedExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositedValidatorsCount", - "type": "uint256" - } - ], - "name": "ReportedExitedValidatorsExceedDeposited", - "type": "error" - }, - { "inputs": [], "name": "StakingModuleAddressExists", "type": "error" }, - { "inputs": [], "name": "StakingModuleNotActive", "type": "error" }, - { "inputs": [], "name": "StakingModuleStatusTheSame", "type": "error" }, - { "inputs": [], "name": "StakingModuleUnregistered", "type": "error" }, - { "inputs": [], "name": "StakingModuleWrongName", "type": "error" }, - { "inputs": [], "name": "StakingModulesLimitExceeded", "type": "error" }, - { - "inputs": [ - { "internalType": "uint256", "name": "expected", "type": "uint256" }, - { "internalType": "uint256", "name": "received", "type": "uint256" } - ], - "name": "UnexpectedContractVersion", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "currentModuleExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentNodeOpExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentNodeOpStuckValidatorsCount", - "type": "uint256" - } - ], - "name": "UnexpectedCurrentValidatorsCount", - "type": "error" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "newModuleTotalExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newModuleTotalExitedValidatorsCountInStakingRouter", - "type": "uint256" - } - ], - "name": "UnexpectedFinalExitedValidatorsCount", - "type": "error" - }, - { "inputs": [], "name": "UnrecoverableModuleError", "type": "error" }, - { "inputs": [], "name": "ZeroAddressAdmin", "type": "error" }, - { "inputs": [], "name": "ZeroAddressLido", "type": "error" }, - { "inputs": [], "name": "ZeroAddressStakingModule", "type": "error" }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "uint256", - "name": "version", - "type": "uint256" - } - ], - "name": "ContractVersionSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelRevertData", - "type": "bytes" - } - ], - "name": "ExitedAndStuckValidatorsCountsUpdateFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelRevertData", - "type": "bytes" - } - ], - "name": "RewardsMintedReportFailed", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "previousAdminRole", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "bytes32", - "name": "newAdminRole", - "type": "bytes32" - } - ], - "name": "RoleAdminChanged", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleGranted", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "bytes32", - "name": "role", - "type": "bytes32" - }, - { - "indexed": true, - "internalType": "address", - "name": "account", - "type": "address" - }, - { - "indexed": true, - "internalType": "address", - "name": "sender", - "type": "address" - } - ], - "name": "RoleRevoked", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "stakingModule", - "type": "address" - }, - { - "indexed": false, - "internalType": "string", - "name": "name", - "type": "string" - }, - { - "indexed": false, - "internalType": "address", - "name": "createdBy", - "type": "address" - } - ], - "name": "StakingModuleAdded", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "unreportedExitedValidatorsCount", - "type": "uint256" - } - ], - "name": "StakingModuleExitedValidatorsIncompleteReporting", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakingModuleFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "treasuryFee", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleFeesSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "maxDepositsPerBlock", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleMaxDepositsPerBlockSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "minDepositBlockDistance", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleMinDepositBlockDistanceSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "stakeShareLimit", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "priorityExitShareThreshold", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleShareLimitSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "enum StakingRouter.StakingModuleStatus", - "name": "status", - "type": "uint8" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "StakingModuleStatusSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "uint256", - "name": "amount", - "type": "uint256" - } - ], - "name": "StakingRouterETHDeposited", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": false, - "internalType": "bytes32", - "name": "withdrawalCredentials", - "type": "bytes32" - }, - { - "indexed": false, - "internalType": "address", - "name": "setBy", - "type": "address" - } - ], - "name": "WithdrawalCredentialsSet", - "type": "event" - }, - { - "anonymous": false, - "inputs": [ - { - "indexed": true, - "internalType": "uint256", - "name": "stakingModuleId", - "type": "uint256" - }, - { - "indexed": false, - "internalType": "bytes", - "name": "lowLevelRevertData", - "type": "bytes" - } - ], - "name": "WithdrawalsCredentialsChangeFailed", - "type": "event" - }, - { - "inputs": [], - "name": "DEFAULT_ADMIN_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "DEPOSIT_CONTRACT", - "outputs": [ - { - "internalType": "contract IDepositContract", - "name": "", - "type": "address" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "FEE_PRECISION_POINTS", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MANAGE_WITHDRAWAL_CREDENTIALS_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_STAKING_MODULES_COUNT", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "MAX_STAKING_MODULE_NAME_LENGTH", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REPORT_EXITED_VALIDATORS_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "REPORT_REWARDS_MINTED_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_MODULE_MANAGE_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "STAKING_MODULE_UNVETTING_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "TOTAL_BASIS_POINTS", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "UNSAFE_SET_EXITED_VALIDATORS_ROLE", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "string", "name": "_name", "type": "string" }, - { - "internalType": "address", - "name": "_stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint256", - "name": "_stakeShareLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priorityExitShareThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakingModuleFee", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_treasuryFee", "type": "uint256" }, - { - "internalType": "uint256", - "name": "_maxDepositsPerBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_minDepositBlockDistance", - "type": "uint256" - } - ], - "name": "addStakingModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_nodeOperatorIds", "type": "bytes" }, - { - "internalType": "bytes", - "name": "_vettedSigningKeysCounts", - "type": "bytes" - } - ], - "name": "decreaseStakingModuleVettedKeysCountByNodeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_depositsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_depositCalldata", "type": "bytes" } - ], - "name": "deposit", - "outputs": [], - "stateMutability": "payable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_priorityExitShareThresholds", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_maxDepositsPerBlock", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_minDepositBlockDistances", - "type": "uint256[]" - } - ], - "name": "finalizeUpgrade_v2", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getAllNodeOperatorDigests", - "outputs": [ - { - "components": [ - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "bool", "name": "isActive", "type": "bool" }, - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.NodeOperatorDigest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getAllStakingModuleDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nodeOperatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "activeNodeOperatorsCount", - "type": "uint256" - }, - { - "components": [ - { "internalType": "uint24", "name": "id", "type": "uint24" }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { "internalType": "uint8", "name": "status", "type": "uint8" }, - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule", - "name": "state", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.StakingModuleSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.StakingModuleDigest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getContractVersion", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "uint256", "name": "_depositsCount", "type": "uint256" } - ], - "name": "getDepositsAllocation", - "outputs": [ - { "internalType": "uint256", "name": "allocated", "type": "uint256" }, - { - "internalType": "uint256[]", - "name": "allocations", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getLido", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256[]", - "name": "_nodeOperatorIds", - "type": "uint256[]" - } - ], - "name": "getNodeOperatorDigests", - "outputs": [ - { - "components": [ - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "bool", "name": "isActive", "type": "bool" }, - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.NodeOperatorDigest[]", - "name": "digests", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_offset", "type": "uint256" }, - { "internalType": "uint256", "name": "_limit", "type": "uint256" } - ], - "name": "getNodeOperatorDigests", - "outputs": [ - { - "components": [ - { "internalType": "uint256", "name": "id", "type": "uint256" }, - { "internalType": "bool", "name": "isActive", "type": "bool" }, - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.NodeOperatorDigest[]", - "name": "", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - } - ], - "name": "getNodeOperatorSummary", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "targetLimitMode", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "targetValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "refundedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "stuckPenaltyEndTimestamp", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.NodeOperatorSummary", - "name": "summary", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "name": "getRoleAdmin", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "uint256", "name": "index", "type": "uint256" } - ], - "name": "getRoleMember", - "outputs": [{ "internalType": "address", "name": "", "type": "address" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" } - ], - "name": "getRoleMemberCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingFeeAggregateDistribution", - "outputs": [ - { "internalType": "uint96", "name": "modulesFee", "type": "uint96" }, - { "internalType": "uint96", "name": "treasuryFee", "type": "uint96" }, - { "internalType": "uint256", "name": "basePrecision", "type": "uint256" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingFeeAggregateDistributionE4Precision", - "outputs": [ - { "internalType": "uint16", "name": "modulesFee", "type": "uint16" }, - { "internalType": "uint16", "name": "treasuryFee", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModule", - "outputs": [ - { - "components": [ - { "internalType": "uint24", "name": "id", "type": "uint24" }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { "internalType": "uint16", "name": "treasuryFee", "type": "uint16" }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { "internalType": "uint8", "name": "status", "type": "uint8" }, - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule", - "name": "", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleActiveValidatorsCount", - "outputs": [ - { - "internalType": "uint256", - "name": "activeValidatorsCount", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_stakingModuleIds", - "type": "uint256[]" - } - ], - "name": "getStakingModuleDigests", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "nodeOperatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "activeNodeOperatorsCount", - "type": "uint256" - }, - { - "components": [ - { "internalType": "uint24", "name": "id", "type": "uint24" }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "treasuryFee", - "type": "uint16" - }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { "internalType": "uint8", "name": "status", "type": "uint8" }, - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule", - "name": "state", - "type": "tuple" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.StakingModuleSummary", - "name": "summary", - "type": "tuple" - } - ], - "internalType": "struct StakingRouter.StakingModuleDigest[]", - "name": "digests", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingModuleIds", - "outputs": [ - { - "internalType": "uint256[]", - "name": "stakingModuleIds", - "type": "uint256[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleIsActive", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleIsDepositsPaused", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleIsStopped", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleLastDepositBlock", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_maxDepositsValue", - "type": "uint256" - } - ], - "name": "getStakingModuleMaxDepositsCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleMaxDepositsPerBlock", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleMinDepositBlockDistance", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleNonce", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleStatus", - "outputs": [ - { - "internalType": "enum StakingRouter.StakingModuleStatus", - "name": "", - "type": "uint8" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "getStakingModuleSummary", - "outputs": [ - { - "components": [ - { - "internalType": "uint256", - "name": "totalExitedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "totalDepositedValidators", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "depositableValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.StakingModuleSummary", - "name": "summary", - "type": "tuple" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingModules", - "outputs": [ - { - "components": [ - { "internalType": "uint24", "name": "id", "type": "uint24" }, - { - "internalType": "address", - "name": "stakingModuleAddress", - "type": "address" - }, - { - "internalType": "uint16", - "name": "stakingModuleFee", - "type": "uint16" - }, - { "internalType": "uint16", "name": "treasuryFee", "type": "uint16" }, - { - "internalType": "uint16", - "name": "stakeShareLimit", - "type": "uint16" - }, - { "internalType": "uint8", "name": "status", "type": "uint8" }, - { "internalType": "string", "name": "name", "type": "string" }, - { - "internalType": "uint64", - "name": "lastDepositAt", - "type": "uint64" - }, - { - "internalType": "uint256", - "name": "lastDepositBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "exitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint16", - "name": "priorityExitShareThreshold", - "type": "uint16" - }, - { - "internalType": "uint64", - "name": "maxDepositsPerBlock", - "type": "uint64" - }, - { - "internalType": "uint64", - "name": "minDepositBlockDistance", - "type": "uint64" - } - ], - "internalType": "struct StakingRouter.StakingModule[]", - "name": "res", - "type": "tuple[]" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingModulesCount", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getStakingRewardsDistribution", - "outputs": [ - { - "internalType": "address[]", - "name": "recipients", - "type": "address[]" - }, - { - "internalType": "uint256[]", - "name": "stakingModuleIds", - "type": "uint256[]" - }, - { - "internalType": "uint96[]", - "name": "stakingModuleFees", - "type": "uint96[]" - }, - { "internalType": "uint96", "name": "totalFee", "type": "uint96" }, - { - "internalType": "uint256", - "name": "precisionPoints", - "type": "uint256" - } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getTotalFeeE4Precision", - "outputs": [ - { "internalType": "uint16", "name": "totalFee", "type": "uint16" } - ], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [], - "name": "getWithdrawalCredentials", - "outputs": [{ "internalType": "bytes32", "name": "", "type": "bytes32" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "grantRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "hasRole", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - } - ], - "name": "hasStakingModule", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { "internalType": "address", "name": "_admin", "type": "address" }, - { "internalType": "address", "name": "_lido", "type": "address" }, - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "initialize", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [], - "name": "onValidatorsCountsByNodeOperatorReportingFinished", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "renounceRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_stakingModuleIds", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_totalShares", - "type": "uint256[]" - } - ], - "name": "reportRewardsMinted", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_nodeOperatorIds", "type": "bytes" }, - { - "internalType": "bytes", - "name": "_exitedValidatorsCounts", - "type": "bytes" - } - ], - "name": "reportStakingModuleExitedValidatorsCountByNodeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { "internalType": "bytes", "name": "_nodeOperatorIds", "type": "bytes" }, - { - "internalType": "bytes", - "name": "_stuckValidatorsCounts", - "type": "bytes" - } - ], - "name": "reportStakingModuleStuckValidatorsCountByNodeOperator", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes32", "name": "role", "type": "bytes32" }, - { "internalType": "address", "name": "account", "type": "address" } - ], - "name": "revokeRole", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "enum StakingRouter.StakingModuleStatus", - "name": "_status", - "type": "uint8" - } - ], - "name": "setStakingModuleStatus", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "bytes32", - "name": "_withdrawalCredentials", - "type": "bytes32" - } - ], - "name": "setWithdrawalCredentials", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { "internalType": "bytes4", "name": "interfaceId", "type": "bytes4" } - ], - "name": "supportsInterface", - "outputs": [{ "internalType": "bool", "name": "", "type": "bool" }], - "stateMutability": "view", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "bool", - "name": "_triggerUpdateFinish", - "type": "bool" - }, - { - "components": [ - { - "internalType": "uint256", - "name": "currentModuleExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentNodeOperatorExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "currentNodeOperatorStuckValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newModuleExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newNodeOperatorExitedValidatorsCount", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "newNodeOperatorStuckValidatorsCount", - "type": "uint256" - } - ], - "internalType": "struct StakingRouter.ValidatorsCountsCorrection", - "name": "_correction", - "type": "tuple" - } - ], - "name": "unsafeSetExitedValidatorsCount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256[]", - "name": "_stakingModuleIds", - "type": "uint256[]" - }, - { - "internalType": "uint256[]", - "name": "_exitedValidatorsCounts", - "type": "uint256[]" - } - ], - "name": "updateExitedValidatorsCountByStakingModule", - "outputs": [{ "internalType": "uint256", "name": "", "type": "uint256" }], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_refundedValidatorsCount", - "type": "uint256" - } - ], - "name": "updateRefundedValidatorsCount", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakeShareLimit", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_priorityExitShareThreshold", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_stakingModuleFee", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_treasuryFee", "type": "uint256" }, - { - "internalType": "uint256", - "name": "_maxDepositsPerBlock", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_minDepositBlockDistance", - "type": "uint256" - } - ], - "name": "updateStakingModule", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { - "inputs": [ - { - "internalType": "uint256", - "name": "_stakingModuleId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_nodeOperatorId", - "type": "uint256" - }, - { - "internalType": "uint256", - "name": "_targetLimitMode", - "type": "uint256" - }, - { "internalType": "uint256", "name": "_targetLimit", "type": "uint256" } - ], - "name": "updateTargetValidatorsLimits", - "outputs": [], - "stateMutability": "nonpayable", - "type": "function" - }, - { "stateMutability": "payable", "type": "receive" } -] diff --git a/abi/aggregator-abi.ts b/abi/aggregator-abi.ts new file mode 100644 index 00000000..73b36489 --- /dev/null +++ b/abi/aggregator-abi.ts @@ -0,0 +1,201 @@ +export const AggregatorAbi = [ + { + inputs: [ + { internalType: 'address', name: '_aggregator', type: 'address' }, + { internalType: 'address', name: '_accessController', type: 'address' }, + ], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'int256', + name: 'current', + type: 'int256', + }, + { + indexed: true, + internalType: 'uint256', + name: 'roundId', + type: 'uint256', + }, + { + indexed: false, + internalType: 'uint256', + name: 'updatedAt', + type: 'uint256', + }, + ], + name: 'AnswerUpdated', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'uint256', + name: 'roundId', + type: 'uint256', + }, + { + indexed: true, + internalType: 'address', + name: 'startedBy', + type: 'address', + }, + { + indexed: false, + internalType: 'uint256', + name: 'startedAt', + type: 'uint256', + }, + ], + name: 'NewRound', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + ], + name: 'OwnershipTransferRequested', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'address', name: 'from', type: 'address' }, + { indexed: true, internalType: 'address', name: 'to', type: 'address' }, + ], + name: 'OwnershipTransferred', + type: 'event', + }, + { + inputs: [], + name: 'acceptOwnership', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'accessController', + outputs: [ + { + internalType: 'contract AccessControllerInterface', + name: '', + type: 'address', + }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'aggregator', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: '_aggregator', type: 'address' }], + name: 'confirmAggregator', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'decimals', + outputs: [{ internalType: 'uint8', name: '', type: 'uint8' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'description', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: '_roundId', type: 'uint256' }], + name: 'getAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint80', name: '_roundId', type: 'uint80' }], + name: 'getRoundData', + outputs: [ + { internalType: 'uint80', name: 'roundId', type: 'uint80' }, + { internalType: 'int256', name: 'answer', type: 'int256' }, + { internalType: 'uint256', name: 'startedAt', type: 'uint256' }, + { internalType: 'uint256', name: 'updatedAt', type: 'uint256' }, + { internalType: 'uint80', name: 'answeredInRound', type: 'uint80' }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'uint256', name: '_roundId', type: 'uint256' }], + name: 'getTimestamp', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'latestAnswer', + outputs: [{ internalType: 'int256', name: '', type: 'int256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'latestRound', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'latestRoundData', + outputs: [ + { internalType: 'uint80', name: 'roundId', type: 'uint80' }, + { internalType: 'int256', name: 'answer', type: 'int256' }, + { internalType: 'uint256', name: 'startedAt', type: 'uint256' }, + { internalType: 'uint256', name: 'updatedAt', type: 'uint256' }, + { internalType: 'uint80', name: 'answeredInRound', type: 'uint80' }, + ], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'owner', + outputs: [{ internalType: 'address payable', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'address', name: '_to', type: 'address' }], + name: 'transferOwnership', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [], + name: 'version', + outputs: [{ internalType: 'uint256', name: '', type: 'uint256' }], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/abi/ens-registry-abi.ts b/abi/ens-registry-abi.ts new file mode 100644 index 00000000..373733b8 --- /dev/null +++ b/abi/ens-registry-abi.ts @@ -0,0 +1,205 @@ +export const ENSRegistryAbi = [ + { + inputs: [{ internalType: 'contract ENS', name: '_old', type: 'address' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'operator', + type: 'address', + }, + { indexed: false, internalType: 'bool', name: 'approved', type: 'bool' }, + ], + name: 'ApprovalForAll', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: true, + internalType: 'bytes32', + name: 'label', + type: 'bytes32', + }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'NewOwner', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: false, + internalType: 'address', + name: 'resolver', + type: 'address', + }, + ], + name: 'NewResolver', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'uint64', name: 'ttl', type: 'uint64' }, + ], + name: 'NewTTL', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: false, + internalType: 'address', + name: 'owner', + type: 'address', + }, + ], + name: 'Transfer', + type: 'event', + }, + { + inputs: [ + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'operator', type: 'address' }, + ], + name: 'isApprovedForAll', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [], + name: 'old', + outputs: [{ internalType: 'contract ENS', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes32', name: 'node', type: 'bytes32' }], + name: 'owner', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes32', name: 'node', type: 'bytes32' }], + name: 'recordExists', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes32', name: 'node', type: 'bytes32' }], + name: 'resolver', + outputs: [{ internalType: 'address', name: '', type: 'address' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'address', name: 'operator', type: 'address' }, + { internalType: 'bool', name: 'approved', type: 'bool' }, + ], + name: 'setApprovalForAll', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'address', name: 'owner', type: 'address' }, + ], + name: 'setOwner', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'resolver', type: 'address' }, + { internalType: 'uint64', name: 'ttl', type: 'uint64' }, + ], + name: 'setRecord', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'address', name: 'resolver', type: 'address' }, + ], + name: 'setResolver', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'bytes32', name: 'label', type: 'bytes32' }, + { internalType: 'address', name: 'owner', type: 'address' }, + ], + name: 'setSubnodeOwner', + outputs: [{ internalType: 'bytes32', name: '', type: 'bytes32' }], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'bytes32', name: 'label', type: 'bytes32' }, + { internalType: 'address', name: 'owner', type: 'address' }, + { internalType: 'address', name: 'resolver', type: 'address' }, + { internalType: 'uint64', name: 'ttl', type: 'uint64' }, + ], + name: 'setSubnodeRecord', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'uint64', name: 'ttl', type: 'uint64' }, + ], + name: 'setTTL', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes32', name: 'node', type: 'bytes32' }], + name: 'ttl', + outputs: [{ internalType: 'uint64', name: '', type: 'uint64' }], + stateMutability: 'view', + type: 'function', + }, +] as const; diff --git a/abi/ens-resolver-abi.ts b/abi/ens-resolver-abi.ts new file mode 100644 index 00000000..6139f31f --- /dev/null +++ b/abi/ens-resolver-abi.ts @@ -0,0 +1,190 @@ +export const ENSResolverAbi = [ + { + inputs: [{ internalType: 'contract ENS', name: '_ens', type: 'address' }], + stateMutability: 'nonpayable', + type: 'constructor', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: true, + internalType: 'uint256', + name: 'contentType', + type: 'uint256', + }, + ], + name: 'ABIChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'address', name: 'a', type: 'address' }, + ], + name: 'AddrChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: false, + internalType: 'uint256', + name: 'coinType', + type: 'uint256', + }, + { + indexed: false, + internalType: 'bytes', + name: 'newAddress', + type: 'bytes', + }, + ], + name: 'AddressChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: true, + internalType: 'address', + name: 'owner', + type: 'address', + }, + { + indexed: true, + internalType: 'address', + name: 'target', + type: 'address', + }, + { + indexed: false, + internalType: 'bool', + name: 'isAuthorised', + type: 'bool', + }, + ], + name: 'AuthorisationChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'bytes', name: 'hash', type: 'bytes' }, + ], + name: 'ContenthashChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'bytes', name: 'name', type: 'bytes' }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + { indexed: false, internalType: 'bytes', name: 'record', type: 'bytes' }, + ], + name: 'DNSRecordChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'bytes', name: 'name', type: 'bytes' }, + { + indexed: false, + internalType: 'uint16', + name: 'resource', + type: 'uint16', + }, + ], + name: 'DNSRecordDeleted', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + ], + name: 'DNSZoneCleared', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { + indexed: true, + internalType: 'bytes4', + name: 'interfaceID', + type: 'bytes4', + }, + { + indexed: false, + internalType: 'address', + name: 'implementer', + type: 'address', + }, + ], + name: 'InterfaceChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'string', name: 'name', type: 'string' }, + ], + name: 'NameChanged', + type: 'event', + }, + { + anonymous: false, + inputs: [ + { indexed: true, internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { indexed: false, internalType: 'bytes32', name: 'x', type: 'bytes32' }, + { indexed: false, internalType: 'bytes32', name: 'y', type: 'bytes32' }, + ], + name: 'PubkeyChanged', + type: 'event', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'string', name: 'key', type: 'string' }, + ], + name: 'text', + outputs: [{ internalType: 'string', name: '', type: 'string' }], + stateMutability: 'view', + type: 'function', + }, + { + inputs: [ + { internalType: 'bytes32', name: 'node', type: 'bytes32' }, + { internalType: 'bytes', name: 'data', type: 'bytes' }, + ], + name: 'setDNSRecords', + outputs: [], + stateMutability: 'nonpayable', + type: 'function', + }, + { + inputs: [{ internalType: 'bytes4', name: 'interfaceID', type: 'bytes4' }], + name: 'supportsInterface', + outputs: [{ internalType: 'bool', name: '', type: 'bool' }], + stateMutability: 'pure', + type: 'function', + }, +] as const; diff --git a/assets/csm-dark.png b/assets/csm-dark.png index 57b0c5bd..aa2895da 100644 Binary files a/assets/csm-dark.png and b/assets/csm-dark.png differ diff --git a/assets/csm-light.png b/assets/csm-light.png index 0b3b797c..1d1138cc 100644 Binary files a/assets/csm-light.png and b/assets/csm-light.png differ diff --git a/assets/decor/decor-1-dark.svg b/assets/decor/decor-1-dark.svg new file mode 100644 index 00000000..07c42618 --- /dev/null +++ b/assets/decor/decor-1-dark.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/decor/decor-1.svg b/assets/decor/decor-1.svg new file mode 100644 index 00000000..c01cf286 --- /dev/null +++ b/assets/decor/decor-1.svg @@ -0,0 +1,156 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/decor/decor-2-dark.svg b/assets/decor/decor-2-dark.svg new file mode 100644 index 00000000..42470b75 --- /dev/null +++ b/assets/decor/decor-2-dark.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/decor/decor-2.svg b/assets/decor/decor-2.svg new file mode 100644 index 00000000..3df2e754 --- /dev/null +++ b/assets/decor/decor-2.svg @@ -0,0 +1,133 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/decor/hohoho.svg b/assets/decor/hohoho.svg new file mode 100644 index 00000000..6bbe5627 --- /dev/null +++ b/assets/decor/hohoho.svg @@ -0,0 +1,16 @@ + + + + + + + + + + + + + + + + diff --git a/assets/decor/merry.svg b/assets/decor/merry.svg new file mode 100644 index 00000000..352674e6 --- /dev/null +++ b/assets/decor/merry.svg @@ -0,0 +1,17 @@ + + + + + + + + + + + + + + + + + diff --git a/assets/decor/santa.svg b/assets/decor/santa.svg new file mode 100644 index 00000000..17066b19 --- /dev/null +++ b/assets/decor/santa.svg @@ -0,0 +1,58 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/decor/snow.svg b/assets/decor/snow.svg new file mode 100644 index 00000000..098eda4f --- /dev/null +++ b/assets/decor/snow.svg @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/icons/arrow-down.svg b/assets/icons/arrow-down.svg new file mode 100644 index 00000000..4727f604 --- /dev/null +++ b/assets/icons/arrow-down.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/arrow-up.svg b/assets/icons/arrow-up.svg new file mode 100644 index 00000000..4d6d5b2b --- /dev/null +++ b/assets/icons/arrow-up.svg @@ -0,0 +1,4 @@ + + + + diff --git a/assets/icons/attention-triangle.svg b/assets/icons/attention-triangle.svg new file mode 100644 index 00000000..3d09ced4 --- /dev/null +++ b/assets/icons/attention-triangle.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/beaconcha-link.svg b/assets/icons/beaconcha-link.svg new file mode 100644 index 00000000..3912b60f --- /dev/null +++ b/assets/icons/beaconcha-link.svg @@ -0,0 +1,7 @@ + + + + + + + diff --git a/assets/icons/clock.svg b/assets/icons/clock.svg new file mode 100644 index 00000000..67422f04 --- /dev/null +++ b/assets/icons/clock.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/csm.svg b/assets/icons/csm.svg new file mode 100644 index 00000000..5746674d --- /dev/null +++ b/assets/icons/csm.svg @@ -0,0 +1,57 @@ + + +
+ + + + + +
+ + + + +
+ + + +
+ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +
diff --git a/assets/icons/download.svg b/assets/icons/download.svg new file mode 100644 index 00000000..7d718083 --- /dev/null +++ b/assets/icons/download.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/ethseer.svg b/assets/icons/ethseer.svg deleted file mode 100644 index d3c1ead2..00000000 --- a/assets/icons/ethseer.svg +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - - - - - - - - - diff --git a/assets/icons/ics-scores/aragon.png b/assets/icons/ics-scores/aragon.png new file mode 100644 index 00000000..a2d16d2f Binary files /dev/null and b/assets/icons/ics-scores/aragon.png differ diff --git a/assets/icons/ics-scores/circles.png b/assets/icons/ics-scores/circles.png new file mode 100644 index 00000000..977683cc Binary files /dev/null and b/assets/icons/ics-scores/circles.png differ diff --git a/assets/icons/ics-scores/csm.png b/assets/icons/ics-scores/csm.png new file mode 100644 index 00000000..8cb87537 Binary files /dev/null and b/assets/icons/ics-scores/csm.png differ diff --git a/assets/icons/ics-scores/discord.png b/assets/icons/ics-scores/discord.png new file mode 100644 index 00000000..c0550f3a Binary files /dev/null and b/assets/icons/ics-scores/discord.png differ diff --git a/assets/icons/ics-scores/ethstaker.png b/assets/icons/ics-scores/ethstaker.png new file mode 100644 index 00000000..ec9389d6 Binary files /dev/null and b/assets/icons/ics-scores/ethstaker.png differ diff --git a/assets/icons/ics-scores/galxe.png b/assets/icons/ics-scores/galxe.png new file mode 100644 index 00000000..57d368da Binary files /dev/null and b/assets/icons/ics-scores/galxe.png differ diff --git a/assets/icons/ics-scores/git-poap.png b/assets/icons/ics-scores/git-poap.png new file mode 100644 index 00000000..439e149a Binary files /dev/null and b/assets/icons/ics-scores/git-poap.png differ diff --git a/assets/icons/ics-scores/high-signal.png b/assets/icons/ics-scores/high-signal.png new file mode 100644 index 00000000..d82b8a13 Binary files /dev/null and b/assets/icons/ics-scores/high-signal.png differ diff --git a/assets/icons/ics-scores/humal-passport.png b/assets/icons/ics-scores/humal-passport.png new file mode 100644 index 00000000..9f9d3afb Binary files /dev/null and b/assets/icons/ics-scores/humal-passport.png differ diff --git a/assets/icons/ics-scores/obol.png b/assets/icons/ics-scores/obol.png new file mode 100644 index 00000000..330875ac Binary files /dev/null and b/assets/icons/ics-scores/obol.png differ diff --git a/assets/icons/ics-scores/sdvt.png b/assets/icons/ics-scores/sdvt.png new file mode 100644 index 00000000..8e7649b4 Binary files /dev/null and b/assets/icons/ics-scores/sdvt.png differ diff --git a/assets/icons/ics-scores/snapshot.png b/assets/icons/ics-scores/snapshot.png new file mode 100644 index 00000000..3a4a4c5c Binary files /dev/null and b/assets/icons/ics-scores/snapshot.png differ diff --git a/assets/icons/ics-scores/ssv.png b/assets/icons/ics-scores/ssv.png new file mode 100644 index 00000000..02a3db0d Binary files /dev/null and b/assets/icons/ics-scores/ssv.png differ diff --git a/assets/icons/ics-scores/stakecat.png b/assets/icons/ics-scores/stakecat.png new file mode 100644 index 00000000..be568d53 Binary files /dev/null and b/assets/icons/ics-scores/stakecat.png differ diff --git a/assets/icons/ics-scores/x.png b/assets/icons/ics-scores/x.png new file mode 100644 index 00000000..6d4e5700 Binary files /dev/null and b/assets/icons/ics-scores/x.png differ diff --git a/assets/icons/meter.svg b/assets/icons/meter.svg new file mode 100644 index 00000000..52f79c4c --- /dev/null +++ b/assets/icons/meter.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/migalabs-link.svg b/assets/icons/migalabs-link.svg new file mode 100644 index 00000000..87b6de94 --- /dev/null +++ b/assets/icons/migalabs-link.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/assets/icons/migalabs.svg b/assets/icons/migalabs.svg new file mode 100644 index 00000000..a85ac8b8 --- /dev/null +++ b/assets/icons/migalabs.svg @@ -0,0 +1,18 @@ + + + + + + + + + + + + + + + + + + diff --git a/assets/icons/triangle-down.svg b/assets/icons/triangle-down.svg new file mode 100644 index 00000000..d4b5489c --- /dev/null +++ b/assets/icons/triangle-down.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/triangle-up.svg b/assets/icons/triangle-up.svg new file mode 100644 index 00000000..408cd147 --- /dev/null +++ b/assets/icons/triangle-up.svg @@ -0,0 +1,3 @@ + + + diff --git a/assets/icons/user.svg b/assets/icons/user.svg new file mode 100644 index 00000000..218299c2 --- /dev/null +++ b/assets/icons/user.svg @@ -0,0 +1,3 @@ + + + diff --git a/config/feature-flags/context-hook.tsx b/config/feature-flags/context-hook.tsx index 78eb24fc..58bafad7 100644 --- a/config/feature-flags/context-hook.tsx +++ b/config/feature-flags/context-hook.tsx @@ -1,8 +1,8 @@ -import { useMemo, useState, useCallback } from 'react'; -import { useLocalStorage } from '@lido-sdk/react'; +import { useCallback, useEffect, useMemo, useState } from 'react'; -import { getFeatureFlagsDefault } from './utils'; +import { useLocalStorage } from 'shared/hooks/use-local-storage'; import { FeatureFlagsType } from './types'; +import { getFeatureFlagsDefault } from './utils'; const STORAGE_FEATURE_FLAGS = 'lido-feature-flags'; @@ -17,19 +17,21 @@ export const useFeatureFlagsContext = () => { useLocalStorage(STORAGE_FEATURE_FLAGS, FEATURE_FLAGS_DEFAULT); const [featureFlagsState, setFeatureFlagsState] = useState( - featureFlagsLocalStorage, + FEATURE_FLAGS_DEFAULT, ); + useEffect(() => { + setFeatureFlagsState(featureFlagsLocalStorage); + }, [featureFlagsLocalStorage]); + const setFeatureFlag = useCallback( (featureFlag: keyof FeatureFlagsType, value: boolean) => { - setFeatureFlagsLocalStorage({ - ...featureFlagsState, - [featureFlag]: value, - }); - setFeatureFlagsState({ + const newFlags = { ...featureFlagsState, [featureFlag]: value, - }); + }; + setFeatureFlagsLocalStorage(newFlags); + setFeatureFlagsState(newFlags); }, [featureFlagsState, setFeatureFlagsLocalStorage], ); diff --git a/config/feature-flags/hooks.ts b/config/feature-flags/hooks.ts index 3fcaa955..8d18d3cf 100644 --- a/config/feature-flags/hooks.ts +++ b/config/feature-flags/hooks.ts @@ -5,22 +5,22 @@ import { ConfigContext } from '../provider'; import { FeatureFlagsContextType } from './context-hook'; import { FeatureFlagsType } from './types'; -type UseFeatureFlagReturnType = { - [key in keyof FeatureFlagsType]: boolean; +type UseFeatureFlagReturnType = { + [key in T]: boolean; } & { setFeatureFlag: (featureFlag: keyof FeatureFlagsType, value: boolean) => void; }; -export const useFeatureFlag = ( - flag: keyof FeatureFlagsType, -): UseFeatureFlagReturnType | null => { +export const useFeatureFlag = ( + flag: T, +): UseFeatureFlagReturnType | null => { const context = useContext(ConfigContext); invariant(context, 'Attempt to use `feature flag` outside of provider'); return useMemo(() => { return { [flag]: context.featureFlags[flag], setFeatureFlag: context.featureFlags?.setFeatureFlag, - }; + } as UseFeatureFlagReturnType; }, [context.featureFlags, flag]); }; diff --git a/config/feature-flags/types.ts b/config/feature-flags/types.ts index ec8a110b..3d78de27 100644 --- a/config/feature-flags/types.ts +++ b/config/feature-flags/types.ts @@ -1,6 +1,9 @@ -export const RPC_SETTINGS_PAGE_ON_INFRA_IS_ENABLED = - 'rpcSettingsPageOnInfraIsEnabled'; +export const USE_WALLET_RPC = 'useWalletRpc'; +export const ICS_APPLY_FORM = 'icsApplyForm'; +export const SURVEYS_SETUP_ENABLED = 'surveysSetupEnabled'; export type FeatureFlagsType = { - [RPC_SETTINGS_PAGE_ON_INFRA_IS_ENABLED]: boolean; + [USE_WALLET_RPC]: boolean; + [ICS_APPLY_FORM]: boolean; + [SURVEYS_SETUP_ENABLED]: boolean; }; diff --git a/config/feature-flags/utils.ts b/config/feature-flags/utils.ts index d4d721b5..5fc385d6 100644 --- a/config/feature-flags/utils.ts +++ b/config/feature-flags/utils.ts @@ -1,7 +1,19 @@ -import { FeatureFlagsType } from './types'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; +import { getConfig } from 'config/get-config'; +import { + FeatureFlagsType, + ICS_APPLY_FORM, + SURVEYS_SETUP_ENABLED, + USE_WALLET_RPC, +} from './types'; + +const { defaultChain } = getConfig(); +const isMainnet = defaultChain === CHAINS.Mainnet; export const getFeatureFlagsDefault = (): FeatureFlagsType => { return { - rpcSettingsPageOnInfraIsEnabled: false, + [USE_WALLET_RPC]: false, + [ICS_APPLY_FORM]: isMainnet, + [SURVEYS_SETUP_ENABLED]: isMainnet, }; }; diff --git a/config/get-config.ts b/config/get-config.ts index 31cc81fa..ee0354de 100644 --- a/config/get-config.ts +++ b/config/get-config.ts @@ -1,20 +1,20 @@ import { getPreConfig, PreConfigType } from './get-preconfig'; import * as cache from './groups/cache'; -import * as estimate from './groups/estimate'; import * as ipfs from './groups/ipfs'; import * as locale from './groups/locale'; import * as stake from './groups/stake'; -import * as withdrawalQueueEstimate from './groups/withdrawal-queue-estimate'; +import * as web3 from './groups/web3'; +import * as revalidation from './groups/revalidation'; export type ConfigType = { isClientSide: boolean; isServerSide: boolean; } & typeof cache & - typeof estimate & typeof ipfs & typeof locale & typeof stake & - typeof withdrawalQueueEstimate & + typeof web3 & + typeof revalidation & PreConfigType; export const getConfig = (): ConfigType => { @@ -23,11 +23,11 @@ export const getConfig = (): ConfigType => { isServerSide: typeof window === 'undefined', ...cache, - ...estimate, ...ipfs, ...locale, ...stake, - ...withdrawalQueueEstimate, + ...web3, + ...revalidation, // highest priority ...getPreConfig(), diff --git a/config/get-secret-config.ts b/config/get-secret-config.ts index ca193c78..c402182b 100644 --- a/config/get-secret-config.ts +++ b/config/get-secret-config.ts @@ -10,14 +10,14 @@ export type SecretConfigType = Modify< rpcUrls_1: [string, ...string[]]; rpcUrls_17000: [string, ...string[]]; + rpcUrls_560048: [string, ...string[]]; clApiUrls_1: [string, ...string[]]; clApiUrls_17000: [string, ...string[]]; + clApiUrls_560048: [string, ...string[]]; cspReportOnly: boolean; - subgraphRequestTimeout: number; - rateLimit: number; rateLimitTimeFrame: number; } @@ -33,7 +33,7 @@ export const getSecretConfig = (): SecretConfigType => { ...serverRuntimeConfig, // Keep fallback as in 'env-dynamics.mjs' - defaultChain: Number(serverRuntimeConfig.defaultChain) || 17000, + defaultChain: Number(serverRuntimeConfig.defaultChain) || 560048, // Hack: in the current implementation we can treat an empty array as a "tuple" (conditionally) rpcUrls_1: (serverRuntimeConfig.rpcUrls_1?.split(',') ?? []) as [ @@ -44,6 +44,10 @@ export const getSecretConfig = (): SecretConfigType => { string, ...string[], ], + rpcUrls_560048: (serverRuntimeConfig.rpcUrls_560048?.split(',') ?? []) as [ + string, + ...string[], + ], clApiUrls_1: (serverRuntimeConfig.clApiUrls_1?.split(',') ?? []) as [ string, @@ -51,12 +55,11 @@ export const getSecretConfig = (): SecretConfigType => { ], clApiUrls_17000: (serverRuntimeConfig.clApiUrls_17000?.split(',') ?? []) as [string, ...string[]], + clApiUrls_560048: (serverRuntimeConfig.clApiUrls_560048?.split(',') ?? + []) as [string, ...string[]], cspReportOnly: toBoolean(serverRuntimeConfig.cspReportOnly), - subgraphRequestTimeout: - Number(serverRuntimeConfig.subgraphRequestTimeout) || 5000, - rateLimit: Number(serverRuntimeConfig.rateLimit) || 100, rateLimitTimeFrame: Number(serverRuntimeConfig.rateLimitTimeFrame) || 60, // 1 minute; }; diff --git a/config/groups/cache.ts b/config/groups/cache.ts index 9d0a050e..af8ae425 100644 --- a/config/groups/cache.ts +++ b/config/groups/cache.ts @@ -1,42 +1,11 @@ import ms from 'ms'; -export const CACHE_STETH_APR_KEY = 'cache-steth-apr'; -export const CACHE_STETH_APR_TTL = ms('1h'); - -export const CACHE_SMA_STETH_APR_KEY = 'cache-sma-steth-apr'; -export const CACHE_SMA_STETH_APR_TTL = ms('30m'); - -export const CACHE_ETH_APR_KEY = 'cache-eth-apr'; -export const CACHE_ETH_APR_TTL = ms('1h'); - -export const CACHE_LIDO_STATS_KEY = 'cache-lido-stats'; -export const CACHE_LIDO_STATS_TTL = ms('1h'); - -export const CACHE_LIDO_SHORT_STATS_KEY = 'cache-short-lido-stats'; -export const CACHE_LIDO_SHORT_STATS_TTL = ms('1h'); - -export const CACHE_LIDO_HOLDERS_VIA_SUBGRAPHS_KEY = - 'cache-lido-holders-via-subgraphs'; -export const CACHE_LIDO_HOLDERS_VIA_SUBGRAPHS_TTL = ms('7d'); - -export const CACHE_LDO_STATS_KEY = 'cache-ldo-stats'; -export const CACHE_LDO_STATS_TTL = ms('1h'); - -export const CACHE_ETH_PRICE_KEY = 'cache-eth-price'; -export const CACHE_ETH_PRICE_TTL = ms('1m'); -export const CACHE_ETH_PRICE_HEADERS = - 'public, max-age=60, stale-if-error=1200, stale-while-revalidate=30'; - -export const CACHE_ONE_INCH_RATE_KEY = 'oneinch-rate'; -export const CACHE_ONE_INCH_RATE_TTL = ms('5m'); - -export const CACHE_TOTAL_SUPPLY_KEY = 'cache-total-supply'; -export const CACHE_TOTAL_SUPPLY_TTL = ms('1m'); -export const CACHE_TOTAL_SUPPLY_HEADERS = - 'public, max-age=60, stale-if-error=1200, stale-while-revalidate=30'; +export const CACHE_MIGALABS_RATE_KEY = 'cache-migalabs-rate'; +export const CACHE_MIGALABS_RATE_TTL = ms('3m'); +export const CACHE_MIGALABS_RATE_HEADERS = + 'public, max-age=180, stale-if-error=1200, stale-while-revalidate=30'; export const CACHE_DEFAULT_HEADERS = 'public, max-age=180, stale-if-error=1200, stale-while-revalidate=60'; -export const CACHE_REWARDS_HEADERS = +export const CACHE_VALIDATION_HEADERS = 'public, max-age=30, stale-if-error=1200, stale-while-revalidate=30'; -export const CACHE_DEFAULT_ERROR_HEADERS = 'no-store, must-revalidate'; diff --git a/config/groups/estimate.ts b/config/groups/estimate.ts deleted file mode 100644 index f3beb9e7..00000000 --- a/config/groups/estimate.ts +++ /dev/null @@ -1,8 +0,0 @@ -import { parseEther } from '@ethersproject/units'; - -// account for gas estimation -// will always have >=0.001 ether, >=0.001 stETH, >=0.001 wstETH -// on Mainnet, Holesky -export const ESTIMATE_ACCOUNT = '0x87c0e047F4e4D3e289A56a36570D4CB957A37Ef1'; - -export const ESTIMATE_AMOUNT = parseEther('0.001'); diff --git a/config/groups/revalidation.ts b/config/groups/revalidation.ts new file mode 100644 index 00000000..37c99677 --- /dev/null +++ b/config/groups/revalidation.ts @@ -0,0 +1 @@ +export const DEFAULT_REVALIDATION = 60; // 1 minute diff --git a/config/groups/stake.ts b/config/groups/stake.ts index 484d835f..87a7fad2 100644 --- a/config/groups/stake.ts +++ b/config/groups/stake.ts @@ -1,13 +1,4 @@ -import { BigNumber } from 'ethers'; -import { parseEther } from '@ethersproject/units'; -import { AddressZero } from '@ethersproject/constants'; - -import { IPFS_REFERRAL_ADDRESS } from './ipfs'; - -// Don't use here: -// import { config } from '../get-config'; -// otherwise you will get something like a cyclic error! -import { preConfig } from '../get-preconfig'; +import { parseEther } from 'viem'; // TODO: review this file @@ -20,14 +11,10 @@ export const SUBMIT_EXTRA_GAS_TRANSACTION_RATIO = 1.05; export const STETH_SUBMIT_GAS_LIMIT_DEFAULT = 90000; -export const STAKE_GASLIMIT_FALLBACK = BigNumber.from( +export const STAKE_GASLIMIT_FALLBACK = BigInt( Math.floor( STETH_SUBMIT_GAS_LIMIT_DEFAULT * SUBMIT_EXTRA_GAS_TRANSACTION_RATIO, ), ); -export const STAKE_WIDGET_METRIC_SUFFIX = '01'; - -export const STAKE_FALLBACK_REFERRAL_ADDRESS = preConfig.ipfsMode - ? IPFS_REFERRAL_ADDRESS - : AddressZero; +export const CSM_WIDGET_METRIC_SUFFIX = '01'; diff --git a/config/groups/web3.ts b/config/groups/web3.ts new file mode 100644 index 00000000..6fb70c7b --- /dev/null +++ b/config/groups/web3.ts @@ -0,0 +1,10 @@ +// interval in ms for RPC event polling for token balance and tx updates +export const PROVIDER_POLLING_INTERVAL = 12_000; +// how long in ms to wait for RPC batching(multicall and provider) +export const PROVIDER_BATCH_TIME = 150; +// max batch +export const PROVIDER_MAX_BATCH = 20; +// AA transaction polling timeout(ms) +export const AA_TX_POLLING_TIMEOUT = 180_000; // 3 minutes + +export const MAX_BLOCK_RANGE_FOR_EVENTS = 10_000; diff --git a/config/groups/withdrawal-queue-estimate.ts b/config/groups/withdrawal-queue-estimate.ts deleted file mode 100644 index a69fc675..00000000 --- a/config/groups/withdrawal-queue-estimate.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { BigNumber } from 'ethers'; - -// fallback gas limits per 1 withdraw request -export const WITHDRAWAL_QUEUE_REQUEST_STETH_PERMIT_GAS_LIMIT_DEFAULT = - BigNumber.from(255350); -export const WITHDRAWAL_QUEUE_REQUEST_WSTETH_PERMIT_GAS_LIMIT_DEFAULT = - BigNumber.from(312626); - -export const WITHDRAWAL_QUEUE_REQUEST_STETH_APPROVED_GAS_LIMIT_DEFAULT = - BigNumber.from(228163); -export const WITHDRAWAL_QUEUE_REQUEST_WSTETH_APPROVED_GAS_LIMIT_DEFAULT = - BigNumber.from(280096); - -export const WITHDRAWAL_QUEUE_CLAIM_GAS_LIMIT_DEFAULT = BigNumber.from(89818); diff --git a/config/rpc/cl.ts b/config/rpc/cl.ts index 14f0e210..5999e921 100644 --- a/config/rpc/cl.ts +++ b/config/rpc/cl.ts @@ -1,8 +1,6 @@ import { useCallback } from 'react'; import invariant from 'tiny-invariant'; -import { useSDK } from '@lido-sdk/react'; -import { CHAINS } from 'consts/chains'; import { API_ROUTES } from 'consts/api'; // Don't use absolute import here! @@ -11,9 +9,11 @@ import { API_ROUTES } from 'consts/api'; // ''' // otherwise you will get something like a cyclic error! import { config } from '../get-config'; - import { useUserConfig } from '../user-config'; +import { useDappStatus } from 'modules/web3'; +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; + export const getBackendApiPath = (chainId: string | number): string => { const BASE_URL = typeof window === 'undefined' ? '' : window.location.origin; return `${BASE_URL}/${API_ROUTES.CL}/${chainId}`; @@ -23,14 +23,10 @@ export const useGetClApiUrlByChainId = () => { const userConfig = useUserConfig(); return useCallback( - (chainId: CHAINS) => { - // This condition is needed because in 'providers/web3.tsx' we add `wagmiChains.polygonMumbai` to supportedChains as a workaround. - // polygonMumbai (80001) may cause an invariant throwing. + (chainId: CSM_SUPPORTED_CHAINS) => { if (!userConfig.supportedChainIds.includes(chainId)) { // Has no effect on functionality. Just a fix. // Return empty string as a stub - // (see: 'providers/web3.tsx' --> jsonRpcBatchProvider --> getStaticRpcBatchProvider) - // TODO: check this return ''; } @@ -51,6 +47,6 @@ export const useGetClApiUrlByChainId = () => { }; export const useClApiUrl = () => { - const { chainId } = useSDK(); - return useGetClApiUrlByChainId()(chainId as number); + const { chainId } = useDappStatus(); + return useGetClApiUrlByChainId()(chainId); }; diff --git a/config/rpc/index.ts b/config/rpc/index.ts index 93fa8c8e..b2901963 100644 --- a/config/rpc/index.ts +++ b/config/rpc/index.ts @@ -1,8 +1,6 @@ import { useCallback } from 'react'; import invariant from 'tiny-invariant'; -import { useSDK } from '@lido-sdk/react'; -import { CHAINS } from 'consts/chains'; import { API_ROUTES } from 'consts/api'; // Don't use absolute import here! @@ -12,6 +10,8 @@ import { API_ROUTES } from 'consts/api'; // otherwise you will get something like a cyclic error! import { config } from '../get-config'; +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; import { useUserConfig } from '../user-config'; export const getBackendRPCPath = (chainId: string | number): string => { @@ -23,17 +23,14 @@ export const useGetRpcUrlByChainId = () => { const userConfig = useUserConfig(); return useCallback( - (chainId: CHAINS) => { - // This condition is needed because in 'providers/web3.tsx' we add `wagmiChains.polygonMumbai` to supportedChains as a workaround. - // polygonMumbai (80001) may cause an invariant throwing. - // And we always need Mainnet RPC for some requests, e.g. ETH to USD price, ENS lookup. + (chainId: CSM_SUPPORTED_CHAINS) => { + // We always need Mainnet RPC for some requests, e.g. ETH to USD price, ENS lookup. if ( chainId !== CHAINS.Mainnet && !userConfig.supportedChainIds.includes(chainId) ) { // Has no effect on functionality. Just a fix. // Return empty string as a stub - // (see: 'providers/web3.tsx' --> jsonRpcBatchProvider --> getStaticRpcBatchProvider) return ''; } @@ -54,8 +51,3 @@ export const useGetRpcUrlByChainId = () => { [userConfig], ); }; - -export const useRpcUrl = () => { - const { chainId } = useSDK(); - return useGetRpcUrlByChainId()(chainId as number); -}; diff --git a/config/user-config/context-hook.tsx b/config/user-config/context-hook.tsx index 3fddb22c..6a5fe51a 100644 --- a/config/user-config/context-hook.tsx +++ b/config/user-config/context-hook.tsx @@ -1,17 +1,15 @@ import { useMemo, useState, useCallback } from 'react'; -import { useLocalStorage } from '@lido-sdk/react'; - -import { CHAINS } from 'consts/chains'; - import { getUserConfigDefault } from './utils'; import { UserConfigDefaultType } from './types'; +import { useLocalStorage } from 'shared/hooks/use-local-storage'; +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; const STORAGE_USER_CONFIG = 'lido-user-config'; type SavedUserConfig = { - rpcUrls: Partial>; - clApiUrls: Partial>; + rpcUrls: Partial>; + clApiUrls: Partial>; }; export type UserConfigContextType = UserConfigDefaultType & { diff --git a/config/user-config/types.ts b/config/user-config/types.ts index f4c09a4f..b02fc86e 100644 --- a/config/user-config/types.ts +++ b/config/user-config/types.ts @@ -1,11 +1,11 @@ -import { CHAINS } from 'consts/chains'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; export type UserConfigDefaultType = { defaultChain: number; supportedChainIds: number[]; prefillUnsafeElRpcUrls: { [CHAINS.Mainnet]: string[]; - [CHAINS.Holesky]: string[]; + [CHAINS.Hoodi]: string[]; }; walletconnectProjectId: string | undefined; }; diff --git a/config/user-config/utils.ts b/config/user-config/utils.ts index bb8eaeb4..b8557dbf 100644 --- a/config/user-config/utils.ts +++ b/config/user-config/utils.ts @@ -3,18 +3,17 @@ // import { config } from 'config'; // ''' // otherwise you will get something like a cyclic error! +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; import { config } from '../get-config'; import { UserConfigDefaultType } from './types'; -import { CHAINS } from 'consts/chains'; - export const getUserConfigDefault = (): UserConfigDefaultType => { return { defaultChain: Number(config.defaultChain), supportedChainIds: config.supportedChains, prefillUnsafeElRpcUrls: { [CHAINS.Mainnet]: config.prefillUnsafeElRpcUrls1, - [CHAINS.Holesky]: config.prefillUnsafeElRpcUrls17000, + [CHAINS.Hoodi]: config.prefillUnsafeElRpcUrls560048, }, walletconnectProjectId: config.walletconnectProjectId, }; diff --git a/consts/aggregator.ts b/consts/aggregator.ts deleted file mode 100644 index 5da55d34..00000000 --- a/consts/aggregator.ts +++ /dev/null @@ -1,19 +0,0 @@ -import { CHAINS } from '@lido-sdk/constants'; -import invariant from 'tiny-invariant'; - -// https://etherscan.io/address/0xcfe54b5cd566ab89272946f602d76ea879cab4a8 -export const AGGREGATOR_STETH_USD_PRICE_FEED_BY_NETWORK: { - [key in CHAINS]?: string; -} = { - [CHAINS.Mainnet]: '0xcfe54b5cd566ab89272946f602d76ea879cab4a8', -}; - -// Chainlink: STETH/USD Price Feed -// https://data.chain.link/ethereum/mainnet/crypto-usd/steth-usd -export const getAggregatorStEthUsdPriceFeedAddress = ( - chainId: CHAINS, -): string => { - const address = AGGREGATOR_STETH_USD_PRICE_FEED_BY_NETWORK[chainId]; - invariant(address, 'chain is not supported'); - return address; -}; diff --git a/consts/alerts.ts b/consts/alerts.ts new file mode 100644 index 00000000..b7343bc7 --- /dev/null +++ b/consts/alerts.ts @@ -0,0 +1 @@ +export const ALERT_FEE_RECIPIENT_DISMISS_HOURS = 10; diff --git a/consts/api.ts b/consts/api.ts index 45256248..5d042a5d 100644 --- a/consts/api.ts +++ b/consts/api.ts @@ -1,13 +1,7 @@ -export const ETHPLORER_TOKEN_ENDPOINT = - 'https://api.ethplorer.io/getTokenInfo/'; - -export const HEALTHY_RPC_SERVICES_ARE_OVER = 'Healthy RPC services are over!'; - -// TODO: review - export const enum API_ROUTES { - ETH_PRICE = 'api/eth-price', + PERFORMANCE = 'api/performance', RPC = 'api/rpc', CL = 'api/cl', METRICS = 'api/metrics', + VALIDATION = 'api/validation', } diff --git a/consts/chains.ts b/consts/chains.ts index 1c5e1012..d8881ca6 100644 --- a/consts/chains.ts +++ b/consts/chains.ts @@ -1,4 +1,14 @@ -export const enum CHAINS { - Mainnet = 1, - Holesky = 17000, -} +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; + +export const CHAIN_NAMES = { + [CHAINS.Mainnet]: 'Mainnet', + [CHAINS.Hoodi]: 'Hoodi', +} as const; + +export type ChainNames = (typeof CHAIN_NAMES)[keyof typeof CHAIN_NAMES]; + +export const CHAINS_COLORS: Record = { + [CHAINS.Mainnet]: '#29b6af', + [CHAINS.Hoodi]: '#AA346A', +}; diff --git a/consts/csm-constants.ts b/consts/csm-constants.ts deleted file mode 100644 index e5d9f8d1..00000000 --- a/consts/csm-constants.ts +++ /dev/null @@ -1,81 +0,0 @@ -import { CHAINS } from '@lido-sdk/constants'; -import { config } from 'config'; -import { HexString } from 'shared/keys'; -import { Address } from 'wagmi'; - -export const KEYS_UPLOAD_TX_LIMIT = 25; - -type CsmContract = - | 'CSAccounting' - | 'CSEarlyAdoption' - | 'CSFeeDistributor' - | 'CSFeeOracle' - | 'CSModule' - | 'CSVerifier' - | 'ExitBusOracle' - | 'StakingRouter'; - -type CsmConstants = { - contracts: Record; - deploymentBlockNumber: HexString; - stakingModuleId: number; - withdrawalCredentials: Address; - retentionPeriodMins: number; - slotsPerFrame: number; -}; - -export const CONSTANTS_BY_NETWORK: Partial> = { - [CHAINS.Mainnet]: { - contracts: { - CSAccounting: '0x4d72BFF1BeaC69925F8Bd12526a39BAAb069e5Da', - CSEarlyAdoption: '0x3D5148ad93e2ae5DedD1f7A8B3C19E7F67F90c0E', - CSFeeDistributor: '0xD99CC66fEC647E68294C6477B40fC7E0F6F618D0', - CSFeeOracle: '0x4D4074628678Bd302921c20573EEa1ed38DdF7FB', - CSModule: '0xdA7dE2ECdDfccC6c3AF10108Db212ACBBf9EA83F', - CSVerifier: '0x3Dfc50f22aCA652a0a6F28a0F892ab62074b5583', - ExitBusOracle: '0x0De4Ea0184c2ad0BacA7183356Aea5B8d5Bf5c6e', - StakingRouter: '0xFdDf38947aFB03C621C71b06C9C70bce73f12999', - }, - deploymentBlockNumber: '0x13f7326', - stakingModuleId: 3, - withdrawalCredentials: '0xB9D7934878B5FB9610B3fE8A5e441e8fad7E293f', - retentionPeriodMins: 80_640, // 8 weeks - slotsPerFrame: 32 * 225 * 28, // 28 days - }, - [CHAINS.Holesky]: { - contracts: { - CSAccounting: '0xc093e53e8F4b55A223c18A2Da6fA00e60DD5EFE1', - CSEarlyAdoption: '0x71E92eA77C198a770d9f33A03277DbeB99989660', - CSFeeDistributor: '0xD7ba648C8F72669C6aE649648B516ec03D07c8ED', - CSFeeOracle: '0xaF57326C7d513085051b50912D51809ECC5d98Ee', - CSModule: '0x4562c3e63c2e586cD1651B958C22F88135aCAd4f', - CSVerifier: '0x6DcA479178E6Ae41CCEB72a88FfDaa3e10E83CB7', - ExitBusOracle: '0xffDDF7025410412deaa05E3E1cE68FE53208afcb', - StakingRouter: '0xd6EbF043D30A7fe46D1Db32BA90a0A51207FE229', - }, - deploymentBlockNumber: '0x1b143a', - stakingModuleId: 4, - withdrawalCredentials: '0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9', - retentionPeriodMins: 80_640, // 8 weeks - slotsPerFrame: 32 * 225 * 7, // 7 days - }, -}; - -export const getCsmConstants = ( - chainId: CHAINS | undefined = config.defaultChain, -) => { - const constants = CONSTANTS_BY_NETWORK[chainId]; - if (!constants) { - throw new Error(`CSM constants for chain [${chainId}] are not specified`); - } - return constants; -}; - -export const getCsmContractAddress = ( - chainId: CHAINS | undefined, - contract: CsmContract, -): Address => getCsmConstants(chainId).contracts[contract]; - -export const getCsmContractAddressGetter = - (contract: CsmContract) => (chainId: CHAINS | undefined) => - getCsmContractAddress(chainId, contract); diff --git a/consts/external-links.ts b/consts/external-links.ts index 700bd402..f77fe2a2 100644 --- a/consts/external-links.ts +++ b/consts/external-links.ts @@ -1,91 +1,100 @@ -import { CHAINS } from '@lido-sdk/constants'; +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; import { config } from 'config'; export const CSM_MAINNET_LINK = 'https://csm.lido.fi/'; export const CSM_TESTNET_LINK = 'https://csm.testnet.fi/'; +// Documentation links +export const EXTENDED_MODE_LINK = + 'https://docs.lido.fi/run-on-lido/csm/lido-csm-widget/operator-roles#extended-mode'; +export const UNBONDED_VALIDATORS_LINK = + 'https://docs.lido.fi/run-on-lido/csm/troubleshooting/unbonded-validators'; +export const MEV_STEALING_LINK = + 'https://docs.lido.fi/run-on-lido/csm/troubleshooting/mev-stealing'; +export const PERFORMANCE_TIPS_LINK = + 'https://docs.lido.fi/run-on-lido/csm/best-practices/maximizing-uptime-and-performance/'; export const HOW_TO_EXIT_VALIDATOR_LINK = - 'https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/exiting-csm-validators'; - + 'https://docs.lido.fi/run-on-lido/csm/lido-csm-widget/exiting-csm-validators/exit-using-validator-keystores'; export const ABOUT_DEPOSIT_DATA_LINK = - 'https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm'; - + 'https://docs.lido.fi/run-on-lido/csm/node-setup/'; export const HOW_TO_GENERATE_DEPOSIT_DATA_LINK = - 'https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm#key-settings-to-note'; - + 'https://docs.lido.fi/run-on-lido/csm/generating-validator-keys/'; export const PREPARE_HARDWARE_LINK = 'https://dvt-homestaker.stakesaurus.com/hardware-and-systems-setup/hardware-and-system-requirements'; +export const UPLOAD_DEPOSIT_DATA_LINK = + 'https://docs.lido.fi/run-on-lido/csm/lido-csm-widget/upload-remove-view-validator-keys#upload-keys'; +export const SUBSCRIBE_EVENTS_LINK = + 'https://docs.lido.fi/run-on-lido/csm/alerts-and-monitoring/expert-custom-alerts'; +export const OPERATOR_TYPES_LINK = + 'https://docs.lido.fi/staking-modules/csm/join-csm/#node-operator-types'; +export const FEE_RECIPIENT_LINK = + 'https://docs.lido.fi/run-on-lido/csm/troubleshooting/setting-the-fee-recipient-for-csm-validators/#change-fee-recipient-on-existing-validator-keys'; + +// Lido Operator Portal links +export const LIDO_OPERATOR_PORTAL_BASE = + 'https://operatorportal.lido.fi/modules/community-staking-module'; +export const LIDO_OPERATOR_PORTAL_BONDS_INFO = `${LIDO_OPERATOR_PORTAL_BASE}#block-e4a6daadca12480d955524247f03f380`; +export const LIDO_OPERATOR_PORTAL_PERFORMANCE_ORACLE = `${LIDO_OPERATOR_PORTAL_BASE}#block-c6dc8d00f13243fcb17de3fa07ecc52c`; +export const LIDO_OPERATOR_PORTAL_DEPOSITS_FLOW = `${LIDO_OPERATOR_PORTAL_BASE}#block-90b8ff95edc64cf7a051584820219616`; + +// Lido Execution Layer Rewards Vault +export const LIDO_REWARDS_VAULT_LINK = + 'https://etherscan.io/address/0x388C818CA8B9251b393131C08a736A67ccB19297'; type ExternalLinksConstants = { - earlyAdoptionTree: string; rewardsTree: string; - - earlyAdoptionSources: string; - earlyAdoptionAbout: string; feedbackForm: string; stakeWidget: string; beaconchain: string; feesMonitoring: string; operatorsWidget: string; - beaconchainDashboard: string; ratedExplorer: string; - ethseerDashboard?: string; - subscribeEvents: string; + migalabsDashboard: string; + migalabs: string; keysApi: string; surveyApi: string; }; -export const EXTERNAL_LINKS_BY_NETWORK: Partial< - Record +export const EXTERNAL_LINKS_BY_NETWORK: Record< + CSM_SUPPORTED_CHAINS, + ExternalLinksConstants > = { [CHAINS.Mainnet]: { - earlyAdoptionTree: - 'https://raw.githubusercontent.com/lidofinance/community-staking-module/v1.0/artifacts/mainnet/early-adoption/merkle-tree.json', rewardsTree: 'https://raw.githubusercontent.com/lidofinance/csm-rewards/mainnet/tree.json', - earlyAdoptionSources: - 'https://github.com/lidofinance/community-staking-module/blob/v1.0/artifacts/mainnet/early-adoption/addresses.json', - earlyAdoptionAbout: - 'https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22', feedbackForm: 'https://forms.gle/GL9RYeV2g4px58Sv8', stakeWidget: 'https://stake.lido.fi', feesMonitoring: 'https://fees-monitoring.lido.fi', operatorsWidget: 'https://operators.lido.fi', beaconchain: 'https://beaconcha.in', - beaconchainDashboard: 'https://v2-beta-mainnet.beaconcha.in/dashboard', ratedExplorer: 'https://explorer.rated.network', - ethseerDashboard: 'https://ethseer.io', - subscribeEvents: 'https://docs.lido.fi/staking-modules/csm/guides/events', + migalabsDashboard: 'https://migalabs.io/entities', + migalabs: 'https://migalabs.io', keysApi: 'https://keys-api.lido.fi', surveyApi: 'https://csm-surveys-api-mainnet.up.railway.app', }, - [CHAINS.Holesky]: { - earlyAdoptionTree: - 'https://raw.githubusercontent.com/lidofinance/community-staking-module/v1.0/artifacts/holesky/early-adoption/merkle-tree.json', + [CHAINS.Hoodi]: { rewardsTree: - 'https://raw.githubusercontent.com/lidofinance/csm-rewards/holesky/tree.json', - earlyAdoptionSources: - 'https://github.com/lidofinance/community-staking-module/blob/v1.0/artifacts/holesky/early-adoption/addresses.json', - earlyAdoptionAbout: - 'https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22', + 'https://raw.githubusercontent.com/lidofinance/csm-rewards/hoodi/tree.json', feedbackForm: 'https://forms.gle/ZBUqbykaZokJLf4M7', - stakeWidget: 'https://stake-holesky.testnet.fi', + stakeWidget: 'https://stake-hoodi.testnet.fi', - feesMonitoring: 'https://fees-monitoring-holesky.testnet.fi', - operatorsWidget: 'https://operators-holesky.testnet.fi', - beaconchain: 'https://holesky.beaconcha.in', - beaconchainDashboard: 'https://v2-beta-holesky.beaconcha.in/dashboard', - ratedExplorer: 'https://explorer.rated.network', - subscribeEvents: 'https://docs.lido.fi/staking-modules/csm/guides/events', - keysApi: 'https://keys-api-holesky.testnet.fi', + feesMonitoring: 'https://fees-monitoring-hoodi.testnet.fi', + operatorsWidget: 'https://operators-hoodi.testnet.fi', + beaconchain: 'https://hoodi.beaconcha.in', + ratedExplorer: '', + migalabsDashboard: '', + migalabs: 'https://migalabs.io', + keysApi: 'https://keys-api-hoodi.testnet.fi', surveyApi: 'https://csm-surveys-api-testnet.up.railway.app', }, }; export const getExternalLinks = ( - chainId: CHAINS | undefined = config.defaultChain, + chainId = config.defaultChain as CSM_SUPPORTED_CHAINS, ) => { const links = EXTERNAL_LINKS_BY_NETWORK[chainId]; if (!links) { diff --git a/consts/index.ts b/consts/index.ts new file mode 100644 index 00000000..fe264c7c --- /dev/null +++ b/consts/index.ts @@ -0,0 +1,15 @@ +export * from './alerts'; +export * from './api'; +export * from './chains'; +export * from './external-links'; +export * from './keys'; +export * from './matomo-click-events'; +export * from './matomo-wallets-events'; +export * from './metrics'; +export * from './operator-type'; +export * from './react-query-strategies'; +export * from './ref-mapping'; +export * from './roles'; +export * from './text'; +export * from './tokens'; +export * from './urls'; diff --git a/consts/key-status.ts b/consts/key-status.ts deleted file mode 100644 index e8900877..00000000 --- a/consts/key-status.ts +++ /dev/null @@ -1,20 +0,0 @@ -export const KEY_STATUS = { - NON_QUEUED: 'NON_QUEUED', - DEPOSITABLE: 'DEPOSITABLE', - ACTIVATION_PENDING: 'ACTIVATION_PENDING', - ACTIVE: 'ACTIVE', - EXITING: 'EXITING', - WITHDRAWAL_PENDING: 'WITHDRAWAL_PENDING', - WITHDRAWN: 'WITHDRAWN', - - UNCHECKED: 'UNCHECKED', - DUPLICATED: 'DUPLICATED', - INVALID: 'INVALID', - - UNBONDED: 'UNBONDED', - EXIT_REQUESTED: 'EXIT_REQUESTED', - STUCK: 'STUCK', - SLASHED: 'SLASHED', -} as const; - -export type KEY_STATUS = keyof typeof KEY_STATUS; diff --git a/consts/keys.ts b/consts/keys.ts new file mode 100644 index 00000000..d882b901 --- /dev/null +++ b/consts/keys.ts @@ -0,0 +1 @@ +export const KEYS_UPLOAD_TX_LIMIT = 25; diff --git a/consts/matomo-click-events.ts b/consts/matomo-click-events.ts index 312931b5..8936bdf7 100644 --- a/consts/matomo-click-events.ts +++ b/consts/matomo-click-events.ts @@ -3,22 +3,27 @@ import { MatomoEventType } from '@lidofinance/analytics-matomo'; export const MATOMO_APP_NAME = 'CSM_Widget'; export const MATOMO_APP_PREFIX = 'csm_widget'; -export const prefixed = (template: TemplateStringsArray, ...args: string[]) => { - return `${MATOMO_APP_PREFIX}_${template.reduce((a, c, i) => a + c + (args[i] ?? ''), '').toLowerCase()}`; -}; +// Helper functions to reduce duplication in event definitions +export const createEvent = ( + description: string, + eventKey: string, +): MatomoEventType => [ + MATOMO_APP_NAME, + description, + `${MATOMO_APP_PREFIX}_${eventKey.toLowerCase()}`, +]; export const enum MATOMO_CLICK_EVENTS_TYPES { // Welcome connectWallet = 'connectWallet', + disconnectWallet = 'disconnectWallet', + clickShowMoreWallets = 'clickShowMoreWallets', + clickShowLessWallets = 'clickShowLessWallets', connectAsNodeOperator = 'connectAsNodeOperator', connectToBecomeNodeOperator = 'connectToBecomeNodeOperator', welcomeDetailedLink = 'welcomeDetailedLink', - earlyAdoptionLearnMore = 'earlyAdoptionLearnMore', - earlyAdoptionCuratedList = 'earlyAdoptionCuratedList', // Starter Pack starterPackCreateNodeOperator = 'starterPackCreateNodeOperator', - consumedEarlyAdoptionLearnMore = 'consumedEarlyAdoptionLearnMore', - notEligibleEarlyAdoptionLearnMore = 'notEligibleEarlyAdoptionLearnMore', partnerDappnode = 'partnerDappnode', partnerSedge = 'partnerSedge', partnerStereum = 'partnerStereum', @@ -28,8 +33,9 @@ export const enum MATOMO_CLICK_EVENTS_TYPES { starterPackHadwareLink = 'starterPackHadwareLink', starterPackSetupValidatorLink = 'starterPackSetupValidatorLink', starterPackGenerateKeysLink = 'starterPackGenerateKeysLink', + operatorTypeModalJoinPermissionless = 'operatorTypeModalJoinPermissionless', + operatorTypeModalApplyIcs = 'operatorTypeModalApplyIcs', // Forms - howBondIsCalculated = 'howBondIsCalculated', depositDataLearnMore = 'depositDataLearnMore', howToClaimEth = 'howToClaimEth', customAddressDescription = 'customAddressDescription', @@ -39,58 +45,90 @@ export const enum MATOMO_CLICK_EVENTS_TYPES { createSuccessBeaconchain = 'createSuccessBeaconchain', createSuccessSubscribeEvents = 'createSuccessSubscribeEvents', otherModuleLink = 'otherModuleLink', - splitsOrgDocumentation = 'splitsOrgDocumentation', howToClaimEthSuccessLink = 'howToClaimEthSuccessLink', // Common etherscanTxLink = 'etherscanTxLink', etherscanAddressLink = 'etherscanAddressLink', beaconchainPubkeyLink = 'beaconchainPubkeyLink', - feedbackFormLink = 'feedbackFormLink', + migalabsPubkeyLink = 'migalabsPubkeyLink', tryCsmOtherNetworkLink = 'tryCsmOtherNetworkLink', stakeShareLimitLinkBanner = 'stakeShareLimitLinkBanner', + faqItemLink = 'faqItemLink', // Key status comment howToExitLinkComment = 'howToExitLinkComment', whenValidatorBecomeActiveLinkComment = 'whenValidatorBecomeActiveLinkComment', whenValidatorBecomeWithdrawnLinkComment = 'whenValidatorBecomeWithdrawnLinkComment', stakeShareLimitLinkComment = 'stakeShareLimitLinkComment', // Alerts - howLearnCsmClose = 'howLearnCsmClose', howToExitLinkRequestToExitAlert = 'howToExitLinkRequestToExitAlert', - howToExitLinkStuckKeysAlert = 'howToExitLinkStuckKeysAlert', normalizeQueueLinkAlert = 'normalizeQueueLinkAlert', + transferKeysLinkAlert = 'transferKeysLinkAlert', unlockBondLinkAlert = 'unlockBondLinkAlert', + claimIcsLinkAlert = 'claimIcsLinkAlert', + feeRecipientDocsLink = 'feeRecipientDocsLink', + feeRecipientDismissButton = 'feeRecipientDismissButton', // Dashboard dashboardKeysLink = 'dashboardKeysLink', dashboardBondLink = 'dashboardBondLink', dashboardRolesLink = 'dashboardRolesLink', dashboardExternalBeaconchaLink = 'dashboardExternalBeaconchaLink', + dashboardExternalBeaconchaEntityLink = 'dashboardExternalBeaconchaEntityLink', dashboardExternalFeesMonitoringLink = 'dashboardExternalFeesMonitoringLink', dashboardExternalOperatorsPortalLink = 'dashboardExternalOperatorsPortalLink', dashboardExternalRatedLink = 'dashboardExternalRatedLink', - dashboardExternalEthSeerLink = 'dashboardExternalEthSeerLink', - // Pages - pageWelcome = 'pageWelcome', - pageStarterPack = 'pageStarterPack', - pageMaintenance = 'pageMaintenance', - pageCreateNodeOperator = 'pageCreateNodeOperator', - pageDashboard = 'pageDashboard', - pageAddKeys = 'pageAddKeys', - pageViewKeys = 'pageViewKeys', - pageRemoveKeys = 'pageRemoveKeys', - pageAddBond = 'pageAddBond', - pageClaimBond = 'pageClaimBond', - pageUnlockBond = 'pageUnlockBond', - pageInboxRequests = 'pageInboxRequests', - pageChangeManagerRole = 'pageAcceptInviteChangeManagerRole', - pageChangeRewardsRole = 'pageChangeRewardsRole', - pageNormalizeQueue = 'pageNormalizeQueue', - page404 = 'page404', - page500 = 'page500', + dashboardExternalMigaLabsLink = 'dashboardExternalMigaLabsLink', + dashboardNotificationSentinelLink = 'dashboardNotificationSentinelLink', // Actions switchNodeOperator = 'switchNodeOperator', + // Rewards History + rewardsHistoryExport = 'rewardsHistoryExport', // modifiers - visitWithModeExtended = 'visitWithModeExtended', visitWithReferrer = 'visitWithReferrer', + // Decor + santaHover = 'santaHover', + santaClick = 'santaClick', + // Footer + footerTermsOfUse = 'footerTermsOfUse', + footerPrivacyNotice = 'footerPrivacyNotice', + footerFeedbackForm = 'footerFeedbackForm', + footerDiscord = 'footerDiscord', + footerVersion = 'footerVersion', + // ICS + icsPassportLink = 'icsPassportLink', + icsDiscordGuideLink = 'icsDiscordGuideLink', + icsCirclesLink = 'icsCirclesLink', + icsHackmdGuideLink = 'icsHackmdGuideLink', + icsGalxeLink = 'icsGalxeLink', + icsHighSignalLink = 'icsHighSignalLink', + icsYoutubeGuideLink = 'icsYoutubeGuideLink', + icsDiscordChannelLink = 'icsDiscordChannelLink', + icsEtherscanSignaturesLink = 'icsEtherscanSignaturesLink', + icsGithubAddressesLink = 'icsGithubAddressesLink', + // Exit Keys + exitKeysDappnodeLink = 'exitKeysDappnodeLink', + exitKeysSedgeLink = 'exitKeysSedgeLink', + exitKeysSteureumLink = 'exitKeysSteureumLink', + exitKeysEthpillarLink = 'exitKeysEthpillarLink', + exitKeysEthdockerLink = 'exitKeysEthdockerLink', + exitKeysSystemdLink = 'exitKeysSystemdLink', + // Bond Info + mevStealingDocsLink = 'mevStealingDocsLink', + lidoRewardsVaultLink = 'lidoRewardsVaultLink', + unbondedValidatorsLink = 'unbondedValidatorsLink', + // Monitoring + monitoringMigalabsLink = 'monitoringMigalabsLink', + monitoringRewardsDocsLink = 'monitoringRewardsDocsLink', + performanceTipsLink = 'performanceTipsLink', + // View Keys + subscribeEventsLink = 'subscribeEventsLink', + operatorPortalDepositsFlowLink = 'operatorPortalDepositsFlowLink', + // Claim + claimWithdrawalsLink = 'claimWithdrawalsLink', + // Other + operatorTypesDocsLink = 'operatorTypesDocsLink', + vanomDashboardLink = 'vanomDashboardLink', + legalPrivacyNoticeLink = 'legalPrivacyNoticeLink', + lidoHomeLink = 'lidoHomeLink', } export const MATOMO_CLICK_EVENTS: Record< @@ -98,378 +136,408 @@ export const MATOMO_CLICK_EVENTS: Record< MatomoEventType > = { // Welcome - [MATOMO_CLICK_EVENTS_TYPES.connectWallet]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.connectWallet]: createEvent( 'Push «Connect wallet» button', - prefixed`connect_wallet`, - ], - [MATOMO_CLICK_EVENTS_TYPES.connectAsNodeOperator]: [ - MATOMO_APP_NAME, + 'connect_wallet', + ), + [MATOMO_CLICK_EVENTS_TYPES.disconnectWallet]: createEvent( + 'Push «Disonnect» button', + 'disconnect_wallet', + ), + [MATOMO_CLICK_EVENTS_TYPES.clickShowMoreWallets]: createEvent( + 'Push "More wallets" on wallet modal', + 'more_wallets', + ), + [MATOMO_CLICK_EVENTS_TYPES.clickShowLessWallets]: createEvent( + 'Push "Less wallets" on wallet modal', + 'less_wallets', + ), + [MATOMO_CLICK_EVENTS_TYPES.connectAsNodeOperator]: createEvent( 'Push «I am a Node Operator» on Welcome screen', - prefixed`connect_wallet_as_no`, - ], - [MATOMO_CLICK_EVENTS_TYPES.connectToBecomeNodeOperator]: [ - MATOMO_APP_NAME, + 'connect_wallet_as_no', + ), + [MATOMO_CLICK_EVENTS_TYPES.connectToBecomeNodeOperator]: createEvent( 'Push «Become a Node Operator» on Welcome screen', - prefixed`connect_wallet_to_become_no`, - ], - [MATOMO_CLICK_EVENTS_TYPES.welcomeDetailedLink]: [ - MATOMO_APP_NAME, + 'connect_wallet_to_become_no', + ), + [MATOMO_CLICK_EVENTS_TYPES.welcomeDetailedLink]: createEvent( 'Click on Deailed description about CSM link', - prefixed`welcome_csm_detailed_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.earlyAdoptionLearnMore]: [ - MATOMO_APP_NAME, - 'Click «Learn more about EA» link on Welcome screen', - prefixed`welcome_ea_learn_more_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.earlyAdoptionCuratedList]: [ - MATOMO_APP_NAME, - 'Click «EA curated list» link on Welcome screen', - prefixed`welcome_ea_curated_list`, - ], + 'welcome_csm_detailed_link', + ), // Starter Pack - [MATOMO_CLICK_EVENTS_TYPES.starterPackCreateNodeOperator]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.starterPackCreateNodeOperator]: createEvent( 'Push «Create a Node Operator» on StarterPack screen', - prefixed`starterpack_create_node_operator`, - ], - [MATOMO_CLICK_EVENTS_TYPES.consumedEarlyAdoptionLearnMore]: [ - MATOMO_APP_NAME, - 'Click «Learn more about EA» link on Consumed banner', - prefixed`consumed_ea_lear_more_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.notEligibleEarlyAdoptionLearnMore]: [ - MATOMO_APP_NAME, - 'Click «Learn more about EA» link on NotEligible banner', - prefixed`not_eligible_ea_lear_more_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.partnerDappnode]: [ - MATOMO_APP_NAME, + 'starterpack_create_node_operator', + ), + [MATOMO_CLICK_EVENTS_TYPES.partnerDappnode]: createEvent( 'Click partner «Dappnode» link on StarterPack screen', - prefixed`starterpack_partner_dappnode_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.partnerSedge]: [ - MATOMO_APP_NAME, + 'starterpack_partner_dappnode_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.partnerSedge]: createEvent( 'Click partner «Sedge» link on StarterPack screen', - prefixed`starterpack_partner_sedge_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.partnerStereum]: [ - MATOMO_APP_NAME, + 'starterpack_partner_sedge_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.partnerStereum]: createEvent( 'Click partner «Stereum» link on StarterPack screen', - prefixed`starterpack_partner_stereu_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.partnerEthdocker]: [ - MATOMO_APP_NAME, + 'starterpack_partner_stereu_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.partnerEthdocker]: createEvent( 'Click partner «Eth Docker» link on StarterPack screen', - prefixed`starterpack_partner_ethdocker_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.starterPackCSMLink]: [ - MATOMO_APP_NAME, + 'starterpack_partner_ethdocker_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.starterPackCSMLink]: createEvent( 'Click «About CSM» link on StarterPack screen', - prefixed`starterpack_csm_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.starterPackBondLink]: [ - MATOMO_APP_NAME, + 'starterpack_csm_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.starterPackBondLink]: createEvent( 'Click «Lear about Bond» link on StarterPack screen', - prefixed`starterpack_bond_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.starterPackHadwareLink]: [ - MATOMO_APP_NAME, + 'starterpack_bond_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.starterPackHadwareLink]: createEvent( 'Click «Run hardware» link on StarterPack screen', - prefixed`starterpack_hardware_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.starterPackSetupValidatorLink]: [ - MATOMO_APP_NAME, + 'starterpack_hardware_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.starterPackSetupValidatorLink]: createEvent( 'Click «Setup validator» link on StarterPack screen', - prefixed`starterpack_setup_validator_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.starterPackGenerateKeysLink]: [ - MATOMO_APP_NAME, + 'starterpack_setup_validator_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.starterPackGenerateKeysLink]: createEvent( 'Click «Generation Keys guide» link on StarterPack screen', - prefixed`starterpack_generate_keys_link`, - ], + 'starterpack_generate_keys_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.operatorTypeModalJoinPermissionless]: createEvent( + 'Push «Join permissionlessly» button on Operator Type modal', + 'operator_type_modal_join_permissionless', + ), + [MATOMO_CLICK_EVENTS_TYPES.operatorTypeModalApplyIcs]: createEvent( + 'Push «Apply for ICS» button on Operator Type modal', + 'operator_type_modal_apply_ics', + ), // Forms - [MATOMO_CLICK_EVENTS_TYPES.howBondIsCalculated]: [ - MATOMO_APP_NAME, - 'Click «How bond is calculated» link on Upload form', - prefixed`how_bond_is_calculated_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.depositDataLearnMore]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.depositDataLearnMore]: createEvent( 'Click «Upload Deposit Data learn more» link on Upload form', - prefixed`deposti_data_learn_more_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.howToClaimEth]: [ - MATOMO_APP_NAME, + 'deposti_data_learn_more_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.howToClaimEth]: createEvent( 'Click «Follow FAQ (ETH)» link on Claim form', - prefixed`how_to_claim_eth`, - ], - [MATOMO_CLICK_EVENTS_TYPES.customAddressDescription]: [ - MATOMO_APP_NAME, + 'how_to_claim_eth', + ), + [MATOMO_CLICK_EVENTS_TYPES.customAddressDescription]: createEvent( 'Click «Detailed description of custom addresses» link on Create NO form', - prefixed`cusstom_address_description_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.managerAdressPermissionTypeDescription]: [ - MATOMO_APP_NAME, - 'Click «Detailed description of manager permission type» link on Create NO form', - prefixed`manager_address_permission_type_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.createSuccessKeysTab]: [ - MATOMO_APP_NAME, + 'cusstom_address_description_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.managerAdressPermissionTypeDescription]: + createEvent( + 'Click «Detailed description of manager permission type» link on Create NO form', + 'manager_address_permission_type_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.createSuccessKeysTab]: createEvent( 'Click «check status on keys tab» link after Create NO', - prefixed`create_success_keys_tab_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.createSuccessBeaconchainDashboard]: [ - MATOMO_APP_NAME, + 'create_success_keys_tab_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.createSuccessBeaconchainDashboard]: createEvent( 'Click «beaconcha.in bashboard» link after Create NO', - prefixed`create_success_beaconchain_dashboard_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.createSuccessBeaconchain]: [ - MATOMO_APP_NAME, + 'create_success_beaconchain_dashboard_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.createSuccessBeaconchain]: createEvent( 'Click «beaconcha.in» link after Create NO', - prefixed`create_success_beaconchain_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.createSuccessSubscribeEvents]: [ - MATOMO_APP_NAME, + 'create_success_beaconchain_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.createSuccessSubscribeEvents]: createEvent( 'Click «subscribe events» link after Create NO', - prefixed`create_success_subscribe_events_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.otherModuleLink]: [ - MATOMO_APP_NAME, + 'create_success_subscribe_events_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.otherModuleLink]: createEvent( 'Click «operators.lido.fi» link for other module', - prefixed`operator_in_other_module_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.splitsOrgDocumentation]: [ - MATOMO_APP_NAME, - 'Click «splits.org documentation» link', - prefixed`spilt_org_documentation_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.howToClaimEthSuccessLink]: [ - MATOMO_APP_NAME, + 'operator_in_other_module_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.howToClaimEthSuccessLink]: createEvent( 'Click «How to claim ETH» link in success modal', - prefixed`how_to_claim_eth_success_link`, - ], + 'how_to_claim_eth_success_link', + ), // Common - [MATOMO_CLICK_EVENTS_TYPES.etherscanTxLink]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.etherscanTxLink]: createEvent( 'Click «View on Etherscan» link on TX modal', - prefixed`etherscan_transaction_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.etherscanAddressLink]: [ - MATOMO_APP_NAME, + 'etherscan_transaction_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.etherscanAddressLink]: createEvent( 'Click «View on Etherscan» link on address', - prefixed`etherscan_address_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.beaconchainPubkeyLink]: [ - MATOMO_APP_NAME, + 'etherscan_address_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.beaconchainPubkeyLink]: createEvent( 'Click «View on beaconcha.in» link on pubkey', - prefixed`beaconchain_pubkey_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.feedbackFormLink]: [ - MATOMO_APP_NAME, - 'Click «Submit report with form» link', - prefixed`feedback_form_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.tryCsmOtherNetworkLink]: [ - MATOMO_APP_NAME, + 'beaconchain_pubkey_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.migalabsPubkeyLink]: createEvent( + 'Click «View on migalabs.io» link on pubkey', + 'migalabs_pubkey_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.tryCsmOtherNetworkLink]: createEvent( 'Click «Join CSM» in other network link', - prefixed`try_csm_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.stakeShareLimitLinkBanner]: [ - MATOMO_APP_NAME, + 'try_csm_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.stakeShareLimitLinkBanner]: createEvent( 'Click «stake share limit» link on banner', - prefixed`stake_share_limit_link_banner`, - ], + 'stake_share_limit_link_banner', + ), + [MATOMO_CLICK_EVENTS_TYPES.faqItemLink]: createEvent( + 'Click link in FAQ', + 'faq_item_link', + ), // Key status comment - [MATOMO_CLICK_EVENTS_TYPES.howToExitLinkComment]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.howToExitLinkComment]: createEvent( 'Click «Exit key from CL» link on key status comment', - prefixed`exit_key_from_cl_link_comment`, - ], - [MATOMO_CLICK_EVENTS_TYPES.whenValidatorBecomeActiveLinkComment]: [ - MATOMO_APP_NAME, + 'exit_key_from_cl_link_comment', + ), + [MATOMO_CLICK_EVENTS_TYPES.whenValidatorBecomeActiveLinkComment]: createEvent( 'Click «When validator become active» link on key status comment', - prefixed`when_validator_become_active_link_comment`, - ], - [MATOMO_CLICK_EVENTS_TYPES.whenValidatorBecomeWithdrawnLinkComment]: [ - MATOMO_APP_NAME, - 'Click «When validator become withdrawn» link on key status comment', - prefixed`when_validator_become_withdrawn_link_comment`, - ], - [MATOMO_CLICK_EVENTS_TYPES.stakeShareLimitLinkComment]: [ - MATOMO_APP_NAME, + 'when_validator_become_active_link_comment', + ), + [MATOMO_CLICK_EVENTS_TYPES.whenValidatorBecomeWithdrawnLinkComment]: + createEvent( + 'Click «When validator become withdrawn» link on key status comment', + 'when_validator_become_withdrawn_link_comment', + ), + [MATOMO_CLICK_EVENTS_TYPES.stakeShareLimitLinkComment]: createEvent( 'Click «stake share limit» link on key status comment', - prefixed`stake_share_limit_link_comment`, - ], + 'stake_share_limit_link_comment', + ), // Alerts - [MATOMO_CLICK_EVENTS_TYPES.howLearnCsmClose]: [ - MATOMO_APP_NAME, - `Close alert «How did I learn about CSM»`, - prefixed`_close_how_learn_csm`, - ], - [MATOMO_CLICK_EVENTS_TYPES.howToExitLinkRequestToExitAlert]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.howToExitLinkRequestToExitAlert]: createEvent( 'Click «How to exit» link on Request To Exit alert', - prefixed`how_to_exit_link_requset_to_exit_alert`, - ], - [MATOMO_CLICK_EVENTS_TYPES.howToExitLinkStuckKeysAlert]: [ - MATOMO_APP_NAME, - 'Click «How to exit» link on Stuck Keys alert', - prefixed`how_to_exit_link_stuck_keys_alert`, - ], - [MATOMO_CLICK_EVENTS_TYPES.normalizeQueueLinkAlert]: [ - MATOMO_APP_NAME, + 'how_to_exit_link_requset_to_exit_alert', + ), + [MATOMO_CLICK_EVENTS_TYPES.normalizeQueueLinkAlert]: createEvent( 'Click «Normalize queue» link on Normalize Queue alert', - prefixed`normalize_queue_link_alert`, - ], - [MATOMO_CLICK_EVENTS_TYPES.unlockBondLinkAlert]: [ - MATOMO_APP_NAME, + 'normalize_queue_link_alert', + ), + [MATOMO_CLICK_EVENTS_TYPES.transferKeysLinkAlert]: createEvent( + 'Click «Transfer keys» link on Transfer Keys alert', + 'transfer_keys_link_alert', + ), + [MATOMO_CLICK_EVENTS_TYPES.unlockBondLinkAlert]: createEvent( 'Click «Unlock bond» link on Locked Bond alert', - prefixed`unlock_bond_link_alert`, - ], + 'unlock_bond_link_alert', + ), + [MATOMO_CLICK_EVENTS_TYPES.claimIcsLinkAlert]: createEvent( + 'Click «Claim ICS» link on Claim ICS alert', + 'claim_ics_link_alert', + ), + [MATOMO_CLICK_EVENTS_TYPES.feeRecipientDocsLink]: createEvent( + 'Click «How to change feeRecipient» link on Wrong Fee Recipient alert', + 'fee_recipient_docs_link_alert', + ), + [MATOMO_CLICK_EVENTS_TYPES.feeRecipientDismissButton]: createEvent( + "Click «I've changed the feeRecipient» button on Wrong Fee Recipient alert", + 'fee_recipient_dismiss_button_alert', + ), // Dashboard - [MATOMO_CLICK_EVENTS_TYPES.dashboardKeysLink]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.dashboardKeysLink]: createEvent( 'Push «Keys section» arrow on Dashboard screen', - prefixed`dashboard_keys_section`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardBondLink]: [ - MATOMO_APP_NAME, + 'dashboard_keys_section', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardBondLink]: createEvent( 'Push «Bond section» arrow on Dashboard screen', - prefixed`dashboard_bond_section`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardRolesLink]: [ - MATOMO_APP_NAME, + 'dashboard_bond_section', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardRolesLink]: createEvent( 'Push «Roles section» arrow on Dashboard screen', - prefixed`dashboard_roles_section`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalBeaconchaLink]: [ - MATOMO_APP_NAME, + 'dashboard_roles_section', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalBeaconchaLink]: createEvent( 'Click «Beaconcha.in» on Dashboard screen', - prefixed`dashboard_external_beaconcha_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalFeesMonitoringLink]: [ - MATOMO_APP_NAME, + 'dashboard_external_beaconcha_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalBeaconchaEntityLink]: createEvent( + 'Click «Beaconcha.in Entity» on Dashboard screen', + 'dashboard_external_beaconcha_entity_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalFeesMonitoringLink]: createEvent( 'Click «MEV monitoring» on Dashboard screen', - prefixed`dashboard_external_mev_monitoring_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalOperatorsPortalLink]: [ - MATOMO_APP_NAME, + 'dashboard_external_mev_monitoring_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalOperatorsPortalLink]: createEvent( 'Click «Lido operators» on Dashboard screen', - prefixed`dashboard_external_operators_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalRatedLink]: [ - MATOMO_APP_NAME, + 'dashboard_external_operators_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalRatedLink]: createEvent( 'Click «Rated» on Dashboard screen', - prefixed`dashboard_external_rated_link`, - ], - [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalEthSeerLink]: [ - MATOMO_APP_NAME, - 'Click «EthSeer» on Dashboard screen', - prefixed`dashboard_external_ethseer_link`, - ], - // Pages - [MATOMO_CLICK_EVENTS_TYPES.pageWelcome]: [ - MATOMO_APP_NAME, - 'View page «Welcome»', - prefixed`view_welcome_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageStarterPack]: [ - MATOMO_APP_NAME, - 'View page «StarterPack»', - prefixed`view_starter_pack_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageMaintenance]: [ - MATOMO_APP_NAME, - 'View page «Maintenance»', - prefixed`view_maintenance_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageCreateNodeOperator]: [ - MATOMO_APP_NAME, - 'View page «CreateNodeOperator»', - prefixed`view_create_node_operator_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageDashboard]: [ - MATOMO_APP_NAME, - 'View page «Dashboard»', - prefixed`view_dashboard_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageAddKeys]: [ - MATOMO_APP_NAME, - 'View page «AddKeys»', - prefixed`view_add_keys_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageViewKeys]: [ - MATOMO_APP_NAME, - 'View page «ViewKeys»', - prefixed`view_view_keys_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageRemoveKeys]: [ - MATOMO_APP_NAME, - 'View page «RemoveKeys»', - prefixed`view_remove_keys_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageAddBond]: [ - MATOMO_APP_NAME, - 'View page «AddBond»', - prefixed`view_add_bond_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageClaimBond]: [ - MATOMO_APP_NAME, - 'View page «ClaimBond»', - prefixed`view_claim_bond_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageUnlockBond]: [ - MATOMO_APP_NAME, - 'View page «UnlockBond»', - prefixed`view_unlock_bond_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageInboxRequests]: [ - MATOMO_APP_NAME, - 'View page «InboxRequests»', - prefixed`view_inbox_requests_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageChangeManagerRole]: [ - MATOMO_APP_NAME, - 'View page «ChangeManagerRole»', - prefixed`view_change_manager_role_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageChangeRewardsRole]: [ - MATOMO_APP_NAME, - 'View page «ChangeRewardsRole»', - prefixed`view_change_rewards_role_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.pageNormalizeQueue]: [ - MATOMO_APP_NAME, - 'View page «NormalizeQueue»', - prefixed`view_normalize_queue_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.page404]: [ - MATOMO_APP_NAME, - 'View page «404»', - prefixed`view_404_page`, - ], - [MATOMO_CLICK_EVENTS_TYPES.page500]: [ - MATOMO_APP_NAME, - 'View page «500»', - prefixed`view_500_page`, - ], + 'dashboard_external_rated_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardExternalMigaLabsLink]: createEvent( + 'Click «MigaLabs» on Dashboard screen', + 'dashboard_external_migalabs_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.dashboardNotificationSentinelLink]: createEvent( + 'Click «Notification Sentinel» on Dashboard screen', + 'dashboard_notification_sentinel_link', + ), // Actions - [MATOMO_CLICK_EVENTS_TYPES.switchNodeOperator]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.switchNodeOperator]: createEvent( 'Switch Node Operator', - prefixed`switch_node_operator`, - ], + 'switch_node_operator', + ), + // Rewards History + [MATOMO_CLICK_EVENTS_TYPES.rewardsHistoryExport]: createEvent( + 'Push «Export all to CSV» button on Rewards History page', + 'rewards_history_export', + ), // Modifiers - [MATOMO_CLICK_EVENTS_TYPES.visitWithModeExtended]: [ - MATOMO_APP_NAME, - 'Visit with mode extended', - prefixed`visit_mode_extended`, - ], - [MATOMO_CLICK_EVENTS_TYPES.visitWithReferrer]: [ - MATOMO_APP_NAME, + [MATOMO_CLICK_EVENTS_TYPES.visitWithReferrer]: createEvent( 'Visite with referrer', - prefixed`visit_referrer`, - ], + 'visit_referrer', + ), + // Decor + [MATOMO_CLICK_EVENTS_TYPES.santaHover]: createEvent( + 'Hover on Santa decoration', + 'santa_hover', + ), + [MATOMO_CLICK_EVENTS_TYPES.santaClick]: createEvent( + 'Click on Santa decoration', + 'santa_click', + ), + // Footer + [MATOMO_CLICK_EVENTS_TYPES.footerTermsOfUse]: createEvent( + 'Click «Terms of Use» link in footer', + 'footer_terms_of_use_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.footerPrivacyNotice]: createEvent( + 'Click «Privacy Notice» link in footer', + 'footer_privacy_notice_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.footerFeedbackForm]: createEvent( + 'Click «Feedback form» link in footer', + 'footer_feedback_form_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.footerDiscord]: createEvent( + 'Click «Discord» link in footer', + 'footer_discord_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.footerVersion]: createEvent( + 'Click version link in footer', + 'footer_version_link', + ), + // ICS + [MATOMO_CLICK_EVENTS_TYPES.icsPassportLink]: createEvent( + 'Click «Human Passport» link on ICS page', + 'ics_passport_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsDiscordGuideLink]: createEvent( + 'Click Discord guide link on ICS page', + 'ics_discord_guide_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsCirclesLink]: createEvent( + 'Click «Circles» link on ICS page', + 'ics_circles_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsHackmdGuideLink]: createEvent( + 'Click HackMD guide link on ICS page', + 'ics_hackmd_guide_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsGalxeLink]: createEvent( + 'Click «Galxe» link on ICS page', + 'ics_galxe_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsHighSignalLink]: createEvent( + 'Click «High Signal» link on ICS page', + 'ics_high_signal_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsYoutubeGuideLink]: createEvent( + 'Click YouTube guide link on ICS page', + 'ics_youtube_guide_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsDiscordChannelLink]: createEvent( + 'Click Discord CSM channel link on ICS page', + 'ics_discord_channel_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsEtherscanSignaturesLink]: createEvent( + 'Click Etherscan verified signatures link on ICS page', + 'ics_etherscan_signatures_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.icsGithubAddressesLink]: createEvent( + 'Click GitHub ICS addresses link on ICS page', + 'ics_github_addresses_link', + ), + // Exit Keys + [MATOMO_CLICK_EVENTS_TYPES.exitKeysDappnodeLink]: createEvent( + 'Click «Dappnode» exit guide link', + 'exit_keys_dappnode_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.exitKeysSedgeLink]: createEvent( + 'Click «Sedge» exit guide link', + 'exit_keys_sedge_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.exitKeysSteureumLink]: createEvent( + 'Click «Stereum» exit guide link', + 'exit_keys_stereum_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.exitKeysEthpillarLink]: createEvent( + 'Click «ETH Pillar» exit guide link', + 'exit_keys_ethpillar_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.exitKeysEthdockerLink]: createEvent( + 'Click «ETH Docker» exit guide link', + 'exit_keys_ethdocker_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.exitKeysSystemdLink]: createEvent( + 'Click «Systemd» exit guide link', + 'exit_keys_systemd_link', + ), + // Bond Info + [MATOMO_CLICK_EVENTS_TYPES.mevStealingDocsLink]: createEvent( + 'Click «MEV stealing» docs link', + 'mev_stealing_docs_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.lidoRewardsVaultLink]: createEvent( + 'Click «Lido rewards vault» link', + 'lido_rewards_vault_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.unbondedValidatorsLink]: createEvent( + 'Click «Unbonded validators» docs link', + 'unbonded_validators_link', + ), + // Monitoring + [MATOMO_CLICK_EVENTS_TYPES.monitoringMigalabsLink]: createEvent( + 'Click «MigaLabs» link on Monitoring page', + 'monitoring_migalabs_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.monitoringRewardsDocsLink]: createEvent( + 'Click «Rewards» docs link on Monitoring page', + 'monitoring_rewards_docs_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.performanceTipsLink]: createEvent( + 'Click «Performance tips» link', + 'performance_tips_link', + ), + // View Keys + [MATOMO_CLICK_EVENTS_TYPES.subscribeEventsLink]: createEvent( + 'Click «Subscribe events» link on View Keys page', + 'subscribe_events_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.operatorPortalDepositsFlowLink]: createEvent( + 'Click «Deposits flow» link on View Keys page', + 'operator_portal_deposits_flow_link', + ), + // Claim + [MATOMO_CLICK_EVENTS_TYPES.claimWithdrawalsLink]: createEvent( + 'Click «Claim withdrawals» link on Claim page', + 'claim_withdrawals_link', + ), + // Other + [MATOMO_CLICK_EVENTS_TYPES.operatorTypesDocsLink]: createEvent( + 'Click «Operator types» docs link', + 'operator_types_docs_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.vanomDashboardLink]: createEvent( + 'Click «VaNOM dashboard» link', + 'vanom_dashboard_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.legalPrivacyNoticeLink]: createEvent( + 'Click «Privacy Notice» link in legal disclaimer', + 'legal_privacy_notice_link', + ), + [MATOMO_CLICK_EVENTS_TYPES.lidoHomeLink]: createEvent( + 'Click Lido logo link', + 'lido_home_link', + ), }; diff --git a/consts/matomo-wallets-events.ts b/consts/matomo-wallets-events.ts index 77b194d9..c82cafbb 100644 --- a/consts/matomo-wallets-events.ts +++ b/consts/matomo-wallets-events.ts @@ -1,403 +1,70 @@ -import { MatomoEventType, trackEvent } from '@lidofinance/analytics-matomo'; -import { Metrics as WalletsMetrics } from 'reef-knot/connect-wallet-modal'; -import { MATOMO_APP_NAME, prefixed } from './matomo-click-events'; +import { trackEvent } from '@lidofinance/analytics-matomo'; +import type { ReefKnotWalletsModalConfig } from 'reef-knot/types'; +import type { WalletIdsEthereum } from 'reef-knot/wallets'; +import { MATOMO_CLICK_EVENTS } from './matomo-click-events'; -export const enum MATOMO_WALLETS_EVENTS_TYPES { - onClickAmbire = 'onClickAmbire', - onConnectAmbire = 'onConnectAmbire', - onClickBlockchaincom = 'onClickBlockchaincom', - onConnectBlockchaincom = 'onConnectBlockchaincom', - onClickBrave = 'onClickBrave', - onConnectBrave = 'onConnectBrave', - onClickCoin98 = 'onClickCoin98', - onConnectCoin98 = 'onConnectCoin98', - onClickCoinbase = 'onClickCoinbase', - onConnectCoinbase = 'onConnectCoinbase', - onClickExodus = 'onClickExodus', - onConnectExodus = 'onConnectExodus', - onClickGamestop = 'onClickGamestop', - onConnectGamestop = 'onConnectGamestop', - onClickImToken = 'onClickImToken', - onConnectImToken = 'onConnectImToken', - onClickLedger = 'onClickLedger', - onConnectLedger = 'onConnectLedger', - onClickMathWallet = 'onClickMathWallet', - onConnectMathWallet = 'onConnectMathWallet', - onClickMetamask = 'onClickMetamask', - onConnectMetamask = 'onConnectMetamask', - onClickOperaWallet = 'onClickOperaWallet', - onConnectOperaWallet = 'onConnectOperaWallet', - onClickTally = 'onClickTally', - onConnectTally = 'onConnectTally', - onClickTrust = 'onClickTrust', - onConnectTrust = 'onConnectTrust', - onClickWC = 'onClickWC', - onConnectWC = 'onConnectWC', - onClickXdefi = 'onClickXdefi', - onConnectXdefi = 'onConnectXdefi', - onClickZenGo = 'onClickZenGo', - onConnectZenGo = 'onConnectZenGo', - onClickZerion = 'onClickZerion', - onConnectZerion = 'onConnectZerion', - onClickOkx = 'onClickOkx', - onConnectOkx = 'onConnectOkx', - onClickPhantom = 'onClickPhantom', - onConnectPhantom = 'onConnectPhantom', - onClickBitkeep = 'onClickBitkeep', - onConnectBitkeep = 'onConnectBitkeep', -} +type MetricProps = Pick< + ReefKnotWalletsModalConfig, + | 'onClickTermsAccept' + | 'onClickWalletsMore' + | 'onClickWalletsLess' + | 'onConnectStart' + | 'onConnectSuccess' +>; -export const MATOMO_WALLETS_EVENTS: Record< - MATOMO_WALLETS_EVENTS_TYPES, - MatomoEventType -> = { - [MATOMO_WALLETS_EVENTS_TYPES.onClickAmbire]: [ - MATOMO_APP_NAME, - 'Click on Ambire wallet', - prefixed`click_ambire`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectAmbire]: [ - MATOMO_APP_NAME, - 'Connect Ambire wallet', - prefixed`connect_ambire`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickBlockchaincom]: [ - MATOMO_APP_NAME, - 'Click Blockchain.com wallet', - prefixed`click_blockchaincom`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectBlockchaincom]: [ - MATOMO_APP_NAME, - 'Connect Blockchain.com wallet', - prefixed`connect_blockchaincom`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickBrave]: [ - MATOMO_APP_NAME, - 'Click Brave wallet', - prefixed`click_brave`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectBrave]: [ - MATOMO_APP_NAME, - 'Connect Brave wallet', - prefixed`connect_brave`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickCoin98]: [ - MATOMO_APP_NAME, - 'Click Coin98 wallet', - prefixed`click_coin98`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectCoin98]: [ - MATOMO_APP_NAME, - 'Connect Coin98 wallet', - prefixed`connect_coin98`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickCoinbase]: [ - MATOMO_APP_NAME, - 'Click Coinbase Wallet wallet', - prefixed`click_coinbase_wallet`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectCoinbase]: [ - MATOMO_APP_NAME, - 'Connect Coinbase Wallet wallet', - prefixed`connect_coinbase_wallet`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickExodus]: [ - MATOMO_APP_NAME, - 'Click Exodus wallet', - prefixed`click_exodus`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectExodus]: [ - MATOMO_APP_NAME, - 'Connect Exodus wallet', - prefixed`connect_exodus`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickGamestop]: [ - MATOMO_APP_NAME, - 'Click Gamestop wallet', - prefixed`click_gamestop`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectGamestop]: [ - MATOMO_APP_NAME, - 'Connect Gamestop wallet', - prefixed`connect_gamestop`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickImToken]: [ - MATOMO_APP_NAME, - 'Click imToken wallet', - prefixed`click_imtoken`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectImToken]: [ - MATOMO_APP_NAME, - 'Connect imToken wallet', - prefixed`connect_imtoken`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickLedger]: [ - MATOMO_APP_NAME, - 'Click Ledger wallet', - prefixed`click_ledger`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectLedger]: [ - MATOMO_APP_NAME, - 'Connect Ledger wallet', - prefixed`connect_ledger`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickMathWallet]: [ - MATOMO_APP_NAME, - 'Click MathWallet wallet', - prefixed`click_mathwallet`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectMathWallet]: [ - MATOMO_APP_NAME, - 'Connect MathWallet wallet', - prefixed`connect_mathwallet`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickMetamask]: [ - MATOMO_APP_NAME, - 'Click Metamask wallet', - prefixed`click_metamask`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectMetamask]: [ - MATOMO_APP_NAME, - 'Connect Metamask wallet', - prefixed`connect_metamask`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickOperaWallet]: [ - MATOMO_APP_NAME, - 'Click Opera wallet', - prefixed`click_opera`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectOperaWallet]: [ - MATOMO_APP_NAME, - 'Connect Opera wallet', - prefixed`connect_opera`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickTally]: [ - MATOMO_APP_NAME, - 'Click Tally wallet', - prefixed`click_tally`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectTally]: [ - MATOMO_APP_NAME, - 'Connect Tally wallet', - prefixed`connect_tally`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickTrust]: [ - MATOMO_APP_NAME, - 'Click Trust wallet', - prefixed`click_trust`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectTrust]: [ - MATOMO_APP_NAME, - 'Connect Trust wallet', - prefixed`connect_trust`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickWC]: [ - MATOMO_APP_NAME, - 'Click WalletConnect wallet', - prefixed`click_walletconnect`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectWC]: [ - MATOMO_APP_NAME, - 'Connect WalletConnect wallet', - prefixed`connect_walletconnect`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickXdefi]: [ - MATOMO_APP_NAME, - 'Click XDEFI wallet', - prefixed`click_xdefi`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectXdefi]: [ - MATOMO_APP_NAME, - 'Connect XDEFI wallet', - prefixed`connect_xdefi`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickZenGo]: [ - MATOMO_APP_NAME, - 'Click ZenGo wallet', - prefixed`click_zengo`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectZenGo]: [ - MATOMO_APP_NAME, - 'Connect ZenGo wallet', - prefixed`connect_zengo`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickZerion]: [ - MATOMO_APP_NAME, - 'Click Zerion wallet', - prefixed`click_zerion`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectZerion]: [ - MATOMO_APP_NAME, - 'Connect Zerion wallet', - prefixed`connect_zerion`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickOkx]: [ - MATOMO_APP_NAME, - 'Click OKX wallet', - prefixed`click_okx`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectOkx]: [ - MATOMO_APP_NAME, - 'Connect OKX wallet', - prefixed`connect_okx`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickPhantom]: [ - MATOMO_APP_NAME, - 'Click Phantom wallet', - prefixed`click_phantom`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectPhantom]: [ - MATOMO_APP_NAME, - 'Connect Phantom wallet', - prefixed`connect_phantom`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onClickBitkeep]: [ - MATOMO_APP_NAME, - 'Click BitKeep wallet', - prefixed`click_bitkeep`, - ], - [MATOMO_WALLETS_EVENTS_TYPES.onConnectBitkeep]: [ - MATOMO_APP_NAME, - 'Connect BitKeep wallet', - prefixed`connect_bitkeep`, - ], +type EventsData = Partial>; + +const EVENTS_DATA_CONNECT_START: EventsData = { + ambire: ['on Ambire', 'ambire'], + binanceWallet: ['Binance Web3', 'binance_web3'], + bitget: ['BitGet', 'bitget'], + brave: ['Brave', 'brave'], + browserExtension: ['Browser', 'browser'], + coin98: ['Coin98', 'coin98'], + coinbase: ['Coinbase Wallet', 'coinbase_wallet'], + coinbaseSmartWallet: ['Coinbase Smart Wallet', 'coinbase_smart_wallet'], + exodus: ['Exodus', 'exodus'], + imToken: ['imToken', 'imtoken'], + ledgerHID: ['Ledger', 'ledger'], + metaMask: ['Metamask', 'metamask'], + okx: ['OKX', 'okx'], + trust: ['Trust', 'trust'], + walletConnect: ['WalletConnect', 'walletconnect'], + ctrl: ['Ctrl', 'ctrl'], +} as const; + +const EVENTS_DATA_CONNECT_SUCCESS: EventsData = { + ...EVENTS_DATA_CONNECT_START, + ambire: ['Ambire', 'ambire'], + binanceWallet: ['Binance Web3', 'binance_web3_wallet'], }; -export const walletsMetrics: WalletsMetrics = { - events: { - click: { - handlers: { - onClickAmbire: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickAmbire); - }, - onClickBlockchaincom: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickBlockchaincom); - }, - onClickBrave: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickBrave); - }, - onClickCoin98: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickCoin98); - }, - onClickCoinbase: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickCoinbase); - }, - onClickExodus: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickExodus); - }, - onClickGamestop: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickGamestop); - }, - onClickImToken: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickImToken); - }, - onClickLedger: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickLedger); - }, - onClickMathWallet: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickMathWallet); - }, - onClickMetamask: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickMetamask); - }, - onClickOperaWallet: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickOperaWallet); - }, - onClickTally: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickTally); - }, - onClickTrust: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickTrust); - }, - onClickWalletconnect: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickWC); - }, - onClickXdefi: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickXdefi); - }, - onClickZenGo: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickZenGo); - }, - onClickZerion: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickZerion); - }, - onClickOkx: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickOkx); - }, - onClickPhantom: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickPhantom); - }, - onClickBitkeep: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onClickBitkeep); - }, - }, - }, - connect: { - handlers: { - onConnectAmbire: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectAmbire); - }, - onConnectBlockchaincom: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectBlockchaincom); - }, - onConnectBrave: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectBrave); - }, - onConnectCoin98: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectCoin98); - }, - onConnectCoinbase: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectCoinbase); - }, - onConnectExodus: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectExodus); - }, - onConnectGamestop: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectGamestop); - }, - onConnectImToken: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectImToken); - }, - onConnectLedger: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectLedger); - }, - onConnectMathWallet: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectMathWallet); - }, - onConnectMetamask: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectMetamask); - }, - onConnectOperaWallet: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectOperaWallet); - }, - onConnectTally: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectTally); - }, - onConnectTrust: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectTrust); - }, - onConnectWalletconnect: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectWC); - }, - onConnectXdefi: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectXdefi); - }, - onConnectZenGo: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectZenGo); - }, - onConnectZerion: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectZerion); - }, - onConnectOkx: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectOkx); - }, - onConnectPhantom: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectPhantom); - }, - onConnectBitkeep: () => { - trackEvent(...MATOMO_WALLETS_EVENTS.onConnectBitkeep); - }, - }, - }, +export const walletMetricProps: MetricProps = { + onClickWalletsLess: () => + trackEvent(...MATOMO_CLICK_EVENTS.clickShowLessWallets), + + onClickWalletsMore: () => + trackEvent(...MATOMO_CLICK_EVENTS.clickShowMoreWallets), + + onConnectStart: ({ walletId }) => { + const eventData = EVENTS_DATA_CONNECT_START[walletId]; + if (eventData) { + trackEvent( + 'Ethereum_Staking_Widget', + `Click ${eventData[0]} wallet`, + `eth_widget_click_${eventData[1]}`, + ); + } + }, + + onConnectSuccess: ({ walletId }) => { + const eventData = EVENTS_DATA_CONNECT_SUCCESS[walletId]; + if (eventData) { + trackEvent( + 'Ethereum_Staking_Widget', + `Connect ${eventData[0]}`, + `eth_widget_connect_${eventData[1]}`, + ); + } }, }; diff --git a/consts/metrics.ts b/consts/metrics.ts index 353a810d..e6f8140c 100644 --- a/consts/metrics.ts +++ b/consts/metrics.ts @@ -5,6 +5,6 @@ export const METRICS_PREFIX = 'csm_widget_ui_'; export const enum METRIC_NAMES { REQUESTS_TOTAL = 'requests_total', API_RESPONSE = 'api_response', - SUBGRAPHS_RESPONSE = 'subgraphs_response', ETH_CALL_ADDRESS_TO = 'eth_call_address_to', + VALIDATION_FILE_LOAD_ERROR = 'validation_file_load_error', } diff --git a/consts/operator-type.ts b/consts/operator-type.ts new file mode 100644 index 00000000..301e7dc5 --- /dev/null +++ b/consts/operator-type.ts @@ -0,0 +1,8 @@ +import { OPERATOR_TYPE } from '@lidofinance/lido-csm-sdk'; + +export const OPERATOR_TYPE_TITLE: Record = { + [OPERATOR_TYPE.DEF]: 'Default (DEF)', + [OPERATOR_TYPE.LEA]: 'Legacy Early Adopter (LEA)', + [OPERATOR_TYPE.ICS]: 'Identified Community Staker (ICS)', + [OPERATOR_TYPE.CC]: 'Custom Curve (CC)', +}; diff --git a/consts/react-query-strategies.ts b/consts/react-query-strategies.ts new file mode 100644 index 00000000..94a4d9ee --- /dev/null +++ b/consts/react-query-strategies.ts @@ -0,0 +1,25 @@ +export const STRATEGY_IMMUTABLE = { + staleTime: Infinity, + refetchOnWindowFocus: false, + refetchOnReconnect: false, +}; + +export const STRATEGY_CONSTANT = { + staleTime: Infinity, + refetchOnWindowFocus: false, + refetchOnReconnect: false, + refetchInterval: 10 * 60 * 1000, // 10 minutes +}; + +export const STRATEGY_LAZY = { + staleTime: 5 * 60 * 1000, // 5 minutes + refetchOnWindowFocus: false, + refetchOnReconnect: true, +}; + +export const STRATEGY_EAGER = { + staleTime: 3000, // 3 seconds + refetchOnWindowFocus: true, + refetchOnReconnect: true, + refetchInterval: 10000, // 10 seconds +}; diff --git a/consts/roles.ts b/consts/roles.ts index 47305980..bf6a59dd 100644 --- a/consts/roles.ts +++ b/consts/roles.ts @@ -1,10 +1,3 @@ -export const ROLES = { - MANAGER: 'MANAGER', - REWARDS: 'REWARDS', -} as const; - -export type ROLES = keyof typeof ROLES; - // TODO: spectacular export const ROLE_CODE = { NONE: 0, diff --git a/consts/swr-strategies.ts b/consts/swr-strategies.ts deleted file mode 100644 index 13af19fb..00000000 --- a/consts/swr-strategies.ts +++ /dev/null @@ -1,41 +0,0 @@ -import type { SWRConfiguration } from 'swr'; - -const MINUTE_MS = 1000 * 60; - -type StrategyConfig = Pick< - SWRConfiguration, - | 'revalidateIfStale' - | 'revalidateOnFocus' - | 'revalidateOnReconnect' - | 'refreshInterval' - | 'focusThrottleInterval' - | 'dedupingInterval' ->; - -export const STRATEGY_IMMUTABLE: StrategyConfig = { - revalidateIfStale: false, - revalidateOnFocus: false, - revalidateOnReconnect: false, -}; - -export const STRATEGY_CONSTANT: StrategyConfig = { - revalidateIfStale: false, - revalidateOnFocus: false, - revalidateOnReconnect: false, - refreshInterval: 10 * MINUTE_MS, -}; - -export const STRATEGY_LAZY: StrategyConfig = { - revalidateOnFocus: false, - revalidateIfStale: true, - revalidateOnReconnect: true, - refreshInterval: 5 * MINUTE_MS, -}; - -export const STRATEGY_EAGER: StrategyConfig = { - revalidateOnFocus: true, - revalidateIfStale: true, - revalidateOnReconnect: true, - focusThrottleInterval: 10000, - dedupingInterval: 3000, -}; diff --git a/consts/text.ts b/consts/text.ts index bd337afc..a82b60f9 100644 --- a/consts/text.ts +++ b/consts/text.ts @@ -2,3 +2,5 @@ export const DATA_UNAVAILABLE = 'N/A'; export const BOND_INSUFFICIENT = 'Insufficient bond'; export const BOND_EXCESS = 'Excess bond'; + +export const INSTANT_WAITING_TIME = '~ 1 min'; diff --git a/consts/tokens.ts b/consts/tokens.ts index 9feb17d8..c9017ef9 100644 --- a/consts/tokens.ts +++ b/consts/tokens.ts @@ -1,13 +1,4 @@ -import { parseEther } from '@ethersproject/units'; -import { TOKENS as TOKENS_SDK } from '@lido-sdk/constants'; - -export const TOKENS = { - ETH: 'ETH', - [TOKENS_SDK.STETH]: TOKENS_SDK.STETH, - [TOKENS_SDK.WSTETH]: TOKENS_SDK.WSTETH, -} as const; - -export type TOKENS = keyof typeof TOKENS; +import { parseEther } from 'viem'; // one eth export const ONE_ETH = parseEther('1'); @@ -16,4 +7,6 @@ export const ONE_ETH = parseEther('1'); export const MAX_ETH_AMOUNT = parseEther('1000'); // min 100 wei to claim (unstETH); -export const MIN_ETH_AMOUNT = 100; +export const MIN_ETH_AMOUNT = 100n; + +export const HIGH_EJECTION_COST_THRESHOLD = parseEther('0.01'); diff --git a/consts/treshhold.ts b/consts/treshhold.ts deleted file mode 100644 index c03b19b5..00000000 --- a/consts/treshhold.ts +++ /dev/null @@ -1,6 +0,0 @@ -/** - * Rounding threshold for stETH token - * - * 10 wei - */ -export const ROUNDING_THRESHOLD = 10; diff --git a/consts/tx.ts b/consts/tx.ts deleted file mode 100644 index 246f69f8..00000000 --- a/consts/tx.ts +++ /dev/null @@ -1,10 +0,0 @@ -import { BigNumber } from 'ethers'; - -// TODO: review - -export const WSTETH_APPROVE_GAS_LIMIT = BigNumber.from(78000); - -export const WRAP_FROM_ETH_GAS_LIMIT = BigNumber.from(100000); -export const WRAP_GAS_LIMIT = BigNumber.from(140000); -export const WRAP_GAS_LIMIT_GOERLI = BigNumber.from(120000); -export const UNWRAP_GAS_LIMIT = BigNumber.from(115000); diff --git a/consts/urls.ts b/consts/urls.ts index 35c5d810..7afe7a09 100644 --- a/consts/urls.ts +++ b/consts/urls.ts @@ -1,31 +1,47 @@ -// TODO: part of PATH -export const SETTINGS_PATH = '/settings'; - export const PATH = { HOME: '/', + CREATE: '/create', KEYS: '/keys', KEYS_SUBMIT: '/keys/submit', KEYS_REMOVE: '/keys/remove', + KEYS_EJECT: '/keys/eject', + KEYS_EXIT: '/keys/exit', KEYS_VIEW: '/keys/view', + KEYS_TRANSFER: '/keys/transfer', KEYS_NORMALIZE: '/keys/normalize', + + MONITORING: '/monitoring', + BOND: '/bond', BOND_CLAIM: '/bond/claim', BOND_ADD: '/bond/add', + BOND_REWARDS_HISTORY: '/bond/rewards-history', + BOND_REBASE_HISTORY: '/bond/rebase-history', BOND_UNLOCK: '/bond/unlock', + ROLES: '/roles', ROLES_REWARDS: '/roles/reward-address', ROLES_MANAGER: '/roles/manager-address', ROLES_INBOX: '/roles/inbox', + STEALING: '/stealing', STEALING_REPORT: '/stealing/report', STEALING_CANCEL: '/stealing/cancel', + TYPE: '/type', + TYPE_CLAIM: '/type/claim', + TYPE_ICS_SYSTEM: '/type/ics-system', + TYPE_ICS_APPLY: '/type/ics-apply', + TYPE_PARAMETERS: '/type/parameters', + SURVEYS: '/surveys', SURVEYS_CONTACTS: '/surveys/contacts', SURVEYS_EXPERIENCE: '/surveys/experience', SURVEYS_HOW_DID_YOU_LEARN_CSM: '/surveys/learn-csm', SURVEYS_SETUP: '/surveys/setup', + SURVEYS_DELEGATES: '/surveys/delegates', + SURVEYS_DELEGATOR: '/surveys/delegator', }; export type PATH = (typeof PATH)[keyof typeof PATH]; diff --git a/docs/component-rules.md b/docs/component-rules.md new file mode 100644 index 00000000..e9e9e17e --- /dev/null +++ b/docs/component-rules.md @@ -0,0 +1,359 @@ +# Component Architecture Rules and Patterns + +This document outlines the established patterns and rules for components in the Lido CSM codebase, based on analysis of both `shared/components/` and `features/` directories. + +## File Organization and Naming + +### Directory Structure + +``` +shared/components/ +├── [component-name]/ # kebab-case directory names +│ ├── index.ts # barrel exports +│ ├── [component-name].tsx # main component file +│ ├── styles.ts # styling (or style.ts for simple components) +│ └── types.ts # optional type definitions +``` + +### File Naming Conventions + +- **Directories**: kebab-case (`accordion-navigatable`, `input-amount`) +- **Component files**: `{component-name}.tsx` matching directory name +- **Style files**: `styles.ts` (complex) or `style.ts` (simple) or `styles.tsx` (with JSX) +- **Type files**: `types.ts` (when needed) +- **Index files**: `index.ts` for re-exports + +## Component Structure Patterns + +### Basic Component Pattern + +```typescript +import { FC, ReactNode } from 'react'; +import { ComponentNameStyled } from './styles'; + +type Props = { + children?: ReactNode; + variant?: 'default' | 'warning'; + big?: boolean; +}; + +export const ComponentName: FC = ({ + children, + variant = 'default', + big = false, + ...props +}) => ( + + {children} + +); +``` + +### Compound Component Pattern + +```typescript +// For related components (like FAQ items) +export const Faq = ({ items }) => ( +
+ {items.map(item => ( + + ))} +
+); + +export const FaqItem = ({ title, content }) => ( +
+ {title} + {content} +
+); +``` + +## Styling Patterns + +### Styled-Components with Theme Integration + +```typescript +// styles.ts +import styled, { css } from 'styled-components'; +import { Block } from '@lidofinance/lido-ui'; + +const VARIANTS = { + default: css` + background: var(--lido-color-background); + `, + warning: css` + background: var(--lido-color-warning); + `, +}; + +export const ComponentStyled = styled(Block)<{ + $variant?: keyof typeof VARIANTS; + $big?: boolean; +}>` + display: flex; + gap: ${({ theme }) => theme.spaceMap.md}px; + padding: ${({ theme }) => theme.spaceMap.lg}px; + + ${({ $variant }) => $variant && VARIANTS[$variant]} + ${({ $big }) => + $big && + css` + font-size: ${({ theme }) => theme.fontSizesMap.lg}px; + `} +`; +``` + +### Styled-Component Props Rules + +- **Dollar prefix**: All styled-component props use `$` prefix (`$variant`, `$big`, `$gap`) +- **Boolean props**: Use direct boolean values (`$loading`, `$secondary`) +- **Variant props**: Use union types from variant objects + +## TypeScript Patterns + +### Props Type Definition + +```typescript +// Inline type definitions (preferred) +type ComponentProps = { + title?: ReactNode; + variant?: 'default' | 'warning'; + big?: boolean; +} & Omit, 'children'>; + +// OR for complex components +interface ComponentProps { + onSubmit: (data: FormData) => void; + loading?: boolean; + disabled?: boolean; +} +``` + +### Generic Component Pattern + +```typescript +type Component = ComponentProps & { + customProp?: string; +}; +``` + +### ForwardRef Pattern (for inputs) + +```typescript +export const InputComponent = forwardRef( + ({ value, onChange, ...props }, ref) => ( + + ) +); +``` + +## Export/Import Patterns + +### Index File Exports + +```typescript +// index.ts - barrel exports +export * from './component-name'; +export { ComponentName } from './component-name'; + +// For multiple related exports +export * from './component-name'; +export * from './sub-component'; +``` + +### Import Patterns + +```typescript +// Named imports (preferred) +import { Text, Button } from '@lidofinance/lido-ui'; +import { Stack } from '../stack'; + +// Type-only imports +import type { ComponentProps, FC } from 'react'; +``` + +## Feature-Based Architecture + +### Feature Structure + +``` +features/ +├── [feature-name]/ +│ ├── index.ts # feature exports +│ ├── [feature-name].tsx # main feature component +│ ├── [feature-name]-page.tsx # page wrapper +│ └── [feature-name]-form/ # form-specific logic +│ ├── context/ # form state management +│ ├── controls/ # form controls +│ ├── hooks/ # feature-specific hooks +│ └── [feature-name]-form.tsx +``` + +### Form Architecture Pattern + +```typescript +// Form Provider (context/[form-name]-form-provider.tsx) +export const FormProvider: FC = ({ children }) => { + const [networkData, revalidate] = useFormNetworkData(); + const validationResolver = useFormValidation(networkData); + const formObject = useForm({ + resolver: validationResolver, + mode: 'onChange', + }); + + return ( + + + + {children} + + + + ); +}; +``` + +### Form Validation Pattern + +```typescript +// use-[form-name]-validation.ts +export const useFormValidation = (networkData: NetworkData) => { + const dataPromise = useAwaitNetworkData(networkData); + + return useCallback>( + async (values) => { + try { + const networkContext = await dataPromise; + // Validation logic + return { values, errors: {} }; + } catch (error) { + return handleResolverValidationError(error, 'FormName', 'defaultField'); + } + }, + [dataPromise], + ); +}; +``` + +### Form Submission Pattern + +```typescript +// use-[form-name]-submit.ts +export const useFormSubmit = ({ onConfirm, onRetry }) => { + const { csm } = useLidoSDK(); + const { txModalStages } = useTxModalStages(); + + const submit = useCallback( + async (formData, networkData) => { + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign(formData); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending(formData, payload.hash); + break; + case TransactionCallbackStage.DONE: + txModalStages.success(payload.result, payload.hash); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + } + }; + + await csm.operation({ ...formData, callback }); + return true; + }, + [csm, txModalStages, onConfirm, onRetry], + ); + + return { submit }; +}; +``` + +## Component Naming Conventions + +### Shared Components + +- **Descriptive names**: `AccordionNavigatable`, `AmountWithPrice`, `ExternalButtonLink` +- **Suffix patterns**: `Styled` for styled components, `Hook` for hook components +- **Boolean props**: `big`, `loading`, `disabled`, `warning` + +### Feature Components + +- **Pages**: `[Feature]Page` (e.g., `AddBondPage`, `DashboardPage`) +- **Main components**: `[Feature]` (e.g., `AddBond`, `Dashboard`) +- **Forms**: `[Feature]Form` (e.g., `AddBondForm`, `SubmitKeysForm`) +- **Form controls**: Descriptive names (`AmountInput`, `SubmitButton`, `TokenSelect`) +- **Providers**: `[Feature]FormProvider` +- **Hooks**: `use[Feature][Purpose]` (e.g., `useAddBondSubmit`, `useAddBondValidation`) + +## Performance and Best Practices + +### Optimization Patterns + +- Use `forwardRef` for input components +- Implement `useCallback` for expensive operations +- Use `useMemo` for complex calculations +- Implement proper loading states + +### Error Handling + +- Graceful fallbacks (return `null` when required props missing) +- Try-catch blocks for parsing operations +- Consistent error messaging through validation utilities + +### Accessibility + +- Proper ARIA attributes +- Keyboard navigation support +- Screen reader considerations +- Semantic HTML structure + +## Integration Patterns + +### External Libraries + +- **Base components**: Extend `@lidofinance/lido-ui` components +- **Web3 integration**: Use `@lidofinance/lido-csm-sdk` for blockchain operations +- **Form handling**: React Hook Form with custom resolvers +- **Styling**: Styled-components with theme integration + +### Theme Integration + +```typescript +// Use theme properties +gap: ${({ theme }) => theme.spaceMap.md}px; +border-radius: ${({ theme }) => theme.borderRadiusesMap.md}px; +color: var(--lido-color-text); +``` + +## Common Anti-Patterns to Avoid + +1. **Don't** use direct DOM manipulation +2. **Don't** create styled-component props without `$` prefix +3. **Don't** mix file naming conventions (stick to kebab-case) +4. **Don't** create new validation patterns - use existing utilities +5. **Don't** bypass the form context architecture for forms +6. **Don't** create components without proper TypeScript types +7. **Don't** ignore accessibility requirements + +## Conclusion + +These patterns ensure: + +- **Consistency** across the codebase +- **Maintainability** through clear conventions +- **Type safety** with comprehensive TypeScript usage +- **Performance** through optimized patterns +- **Accessibility** through proper implementation +- **Developer experience** through predictable structure + +Follow these patterns when creating new components or modifying existing ones to maintain codebase quality and consistency. diff --git a/env-dynamics.mjs b/env-dynamics.mjs index 0061b6e1..0fa42930 100644 --- a/env-dynamics.mjs +++ b/env-dynamics.mjs @@ -18,12 +18,12 @@ const toBoolean = (dataStr) => { /** @type string */ export const matomoHost = process.env.MATOMO_URL; /** @type number */ -export const defaultChain = parseInt(process.env.DEFAULT_CHAIN, 10) || 17000; +export const defaultChain = parseInt(process.env.DEFAULT_CHAIN, 10) || 560048; /** @type number[] */ export const supportedChains = process.env?.SUPPORTED_CHAINS?.split(',').map( (chainId) => parseInt(chainId, 10), -) ?? [17000]; +) ?? [560048]; /** @type string */ export const walletconnectProjectId = process.env.WALLETCONNECT_PROJECT_ID; @@ -38,9 +38,23 @@ export const prefillUnsafeElRpcUrls1 = export const prefillUnsafeElRpcUrls17000 = process.env.PREFILL_UNSAFE_EL_RPC_URLS_17000?.split(',') ?? []; +/** @type string[] */ +export const prefillUnsafeElRpcUrls560048 = + process.env.PREFILL_UNSAFE_EL_RPC_URLS_560048?.split(',') ?? []; + /** @type string */ export const widgetApiBasePathForIpfs = process.env.WIDGET_API_BASE_PATH_FOR_IPFS; +/** @type boolean */ +export const addressApiValidationEnabled = + !!process.env.VALIDATION_SERVICE_BASE_PATH; + +/** @type string */ +export const validationFilePath = process.env.VALIDATION_FILE_PATH; + +/** @type string */ +export const keysApiUrl = process.env.KEYS_API_URL; + /** @type string */ -export const surveyApi = process.env.SURVEY_API; +export const feesMonitoringApiUrl = process.env.FEES_MONITORING_API_URL; diff --git a/faq/bond-1.md b/faq/bond-1.md deleted file mode 100644 index f4cc4ef4..00000000 --- a/faq/bond-1.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: What rewards do I get in CSM? ---- - -When CSM operators use the Lido protocol to run validators, they can receive two types of rewards: - -- **Node Operator rewards**: a share of rewards from staker locked stake amount, currently calculated pro-rata based on validators operated as a share of total protocol validators, with [possible reductions for bad performance](https://operatorportal.lido.fi/modules/community-staking-module#block-c6dc8d00f13243fcb17de3fa07ecc52c). -- **Bond rebase**: staking rewards pertaining to the bonded tokens (stETH). diff --git a/faq/bond-2.md b/faq/bond-2.md deleted file mode 100644 index e38bfc93..00000000 --- a/faq/bond-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: How often do I get rewards? ---- - -**Node Operator rewards** on mainnet are calculated and made claimable by the CSM Oracle **every 28 days**. Rewards do not have to be claimed during every reporting frame, and can be left to accumulate to be claimed later. - -**Bond rebase part** of the rewards come from stETH being a rebasing token and the bond being stored in stETH. After each Accounting Oracle report that happens on mainnet **every 225 epochs (24hrs)**, the share rate changes. Hence, the same amount of stETH shares will now be equal to a bigger stETH token balance. diff --git a/faq/bond-3.md b/faq/bond-3.md deleted file mode 100644 index 5659ec71..00000000 --- a/faq/bond-3.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Why didn’t I get rewards? -anchor: why-did-not-i-get-rewards ---- - -There are two main reasons of you getting no reward within a frame: - -1. If your validator’s performance was below the threshold within the CSM Performance Oracle frame (28 days for mainnet) the validator does not receive rewards for the given frame. Read more about [the CSM Performance Oracle](https://operatorportal.lido.fi/modules/community-staking-module#block-c6dc8d00f13243fcb17de3fa07ecc52c). -2. [Your Node Operator has stuck keys](https://operatorportal.lido.fi/modules/community-staking-module#block-0ed61a4c0a5a439bbb4be20e814b4e38) due to not exiting a validator requested for exit timely. diff --git a/faq/bond-4.md b/faq/bond-4.md deleted file mode 100644 index 4991f37c..00000000 --- a/faq/bond-4.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Why add a bond? ---- - -Adding bond is a prevention measure to avoid Exit Request for your validators if they became unbonded. [Unbonded validators](https://docs.lido.fi/staking-modules/csm/guides/unbonded-validators) appear if the Node Operator's bond is no longer sufficient to cover all the validator keys uploaded to CSM by the Node Operator. - -If a [penalty](https://operatorportal.lido.fi/modules/community-staking-module#block-3951aa72ba1e471bafe95b40fef65d2b) was already applied, there is a relatively short period of time until the next VEBO report, which most likely will contain a validator Exit Request. During this period in between penalty application and the next VEBO report, Node Operators must top up bond to avoid Exit Requests for their validator(s). - -**Warning:** If the unbonded validator has already been requested to exit, Node Operators can only exit it. The bond top-up after the Exit Request will not reverse the Exit Request. diff --git a/faq/bond-5.md b/faq/bond-5.md deleted file mode 100644 index 3c660243..00000000 --- a/faq/bond-5.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to claim ETH using a withdrawal NFT -anchor: how-to-claim-eth ---- - -Claiming bond and rewards in a form of ETH constitutes an stETH withdrawal process (unstake). - -The withdrawal process consists of several steps you need to do: - -- **Submit a withdrawal request** by choosing ETH as a token for bond/rewards claim. As a result of this step, you will receive a withdrawal NFT. -- **Claim your ETH** after request fulfilment. The fulfilment process takes 1-5 days (or longer), [depending on a variety of factors](https://help.lido.fi/en/articles/7858315-how-long-does-an-ethereum-withdrawal-take). To know if your ETH is ready to be claimed you, can check its status on the [Claim page](https://stake.lido.fi/withdrawals/claim). If your request is marked as “**Ready to claim**”, it is time for you to get your ETH back. - -For more information about withdrawals, [follow the page](https://help.lido.fi/en/collections/3993867-ethereum-withdrawals). diff --git a/faq/images/curve-def-dark.png b/faq/images/curve-def-dark.png new file mode 100644 index 00000000..7481f492 Binary files /dev/null and b/faq/images/curve-def-dark.png differ diff --git a/faq/images/curve-def.png b/faq/images/curve-def.png new file mode 100644 index 00000000..9a0aed0e Binary files /dev/null and b/faq/images/curve-def.png differ diff --git a/faq/images/curve-ics-dark.png b/faq/images/curve-ics-dark.png new file mode 100644 index 00000000..f2902651 Binary files /dev/null and b/faq/images/curve-ics-dark.png differ diff --git a/faq/images/curve-ics.png b/faq/images/curve-ics.png new file mode 100644 index 00000000..e24fdd96 Binary files /dev/null and b/faq/images/curve-ics.png differ diff --git a/faq/index.ts b/faq/index.ts new file mode 100644 index 00000000..87f848b5 --- /dev/null +++ b/faq/index.ts @@ -0,0 +1,90 @@ +import { + BondRewards1, + BondRewards2, + BondRewards3, + BondRewards4, + BondRewards5, + Keys1, + Keys10, + Keys11, + Keys12, + Keys13, + Keys14, + Keys15, + Keys2, + Keys3, + Keys4, + Keys5, + Keys6, + Keys7, + Keys8, + Keys9, + LockedBond1, + LockedBond2, + LockedBond3, + Main1, + Main2, + Main3, + Main4, + Main5, + Main6, + Main7, + Main8, + Monitoring1, + Monitoring2, + Monitoring3, + Monitoring4, + Monitoring5, + OperatorType1, + OperatorType2, + Roles1, + Roles2, + Roles3, + Roles4, + Roles5, +} from './items'; + +export const FAQ_OPERATOR_TYPE = [OperatorType1, OperatorType2]; +export const FAQ_ROLES = [Roles1, Roles2, Roles3, Roles4, Roles5]; +export const FAQ_BOND = [ + BondRewards1, + BondRewards2, + BondRewards3, + BondRewards4, + BondRewards5, +]; +export const FAQ_LOCKED = [LockedBond1, LockedBond2, LockedBond3]; +export const FAQ_MAIN = [ + Main1, + Main2, + Main3, + Main4, + Main5, + Main6, + Main7, + Main8, +]; +export const FAQ_MONITORING = [ + Monitoring1, + Monitoring2, + Monitoring3, + Monitoring4, + Monitoring5, +]; +export const FAQ_KEYS = [ + Keys1, + Keys2, + Keys3, + Keys4, + Keys5, + Keys6, + Keys7, + Keys8, + Keys9, + Keys10, + Keys11, + Keys12, + Keys13, + Keys14, + Keys15, +]; diff --git a/faq/items/bond-rewards-1.tsx b/faq/items/bond-rewards-1.tsx new file mode 100644 index 00000000..3996afb7 --- /dev/null +++ b/faq/items/bond-rewards-1.tsx @@ -0,0 +1,31 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const BondRewards1: Faq = { + title: 'What rewards do I get in CSM?', + anchor: 'what-rewards-do-i-get-in-csm', + content: ( +
+

+ When CSM operators use the Lido protocol to run validators, they can + receive two types of rewards: +

+
    +
  • + Node Operator rewards: a share of rewards from staker + locked stake amount, currently calculated pro-rata based on validators + operated as a share of total protocol validators, with{' '} + + possible reductions for bad performance + + . +
  • +
  • + Bond rebase: staking rewards pertaining to the bonded + tokens (stETH). +
  • +
+
+ ), +}; diff --git a/faq/items/bond-rewards-2.tsx b/faq/items/bond-rewards-2.tsx new file mode 100644 index 00000000..b175f627 --- /dev/null +++ b/faq/items/bond-rewards-2.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { + FaqChainName, + FaqFrameDuration, + FaqRebaseDuration, +} from 'shared/components'; +import { Faq } from 'types'; + +export const BondRewards2: Faq = { + title: 'How often do I get rewards?', + anchor: 'how-often-do-i-get-rewards', + content: ( +
+

+ Node Operator rewards on are + calculated and made claimable by the CSM Oracle{' '} + + every + + . Rewards do not have to be claimed during every reporting frame, and + can be left to accumulate to be claimed later. +

+

+ Bond rebase part of the rewards come from stETH being a + rebasing token and the bond being stored in stETH. After each Accounting + Oracle report that happens on {' '} + + every + + , the share rate changes. Hence, the same amount of stETH shares will + now be equal to a bigger stETH token balance. +

+
+ ), +}; diff --git a/faq/items/bond-rewards-3.tsx b/faq/items/bond-rewards-3.tsx new file mode 100644 index 00000000..e63b2d23 --- /dev/null +++ b/faq/items/bond-rewards-3.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqChainName, FaqFrameDuration, FaqLink } from 'shared/components'; + +export const BondRewards3: Faq = { + title: 'Why didn’t I get rewards?', + anchor: 'why-didnt-i-get-rewards', + content: ( +
+

+ If your validator's performance was below the threshold within the + CSM Performance Oracle frame ( for ) + the validator does not receive rewards for the given frame. Read more + about{' '} + + the CSM Performance Oracle + + . +

+
+ ), +}; diff --git a/faq/items/bond-rewards-4.tsx b/faq/items/bond-rewards-4.tsx new file mode 100644 index 00000000..e38de44e --- /dev/null +++ b/faq/items/bond-rewards-4.tsx @@ -0,0 +1,61 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const BondRewards4: Faq = { + title: 'Why add a bond?', + anchor: 'why-add-a-bond', + content: ( +
+

+ Submitting a bond serves as a risk mitigation measure for both the + Ethereum network and the Lido protocol. +

+

+ There are several major reasons for a CSM Node Operator's bond to + be penalized, including: +

+
    +
  • + The operator has stolen EL rewards (MEV).{' '} + Penalty amount = amount stolen + fixed stealing fine; +
  • +
  • + + The validator's withdrawal balance is less than 32 ETH + + .{' '} + Penalty amount = 32 - validator's withdrawal balance + ; +
  • +
  • + The operator has not exited the validators in time.{' '} + Penalty amount = exitDelayPenalty (a fixed amount set by + the DAO); +
  • +
  • + + The validator has been ejected via{' '} + + EIP-7002 + {' '} + due to an excessive number of strikes. + {' '} + Penalty amount = badPerformancePenalty (a fixed amount + set by the DAO); +
  • +
  • + + Force ejection via{' '} + + EIP-7002 + {' '} + was triggered for the validator. + {' '} + Penalty amount ={' '} + min(actual TW fee paid, maxWithdrawalRequestFee). +
  • +
+
+ ), +}; diff --git a/faq/items/bond-rewards-5.tsx b/faq/items/bond-rewards-5.tsx new file mode 100644 index 00000000..2d0c9b3b --- /dev/null +++ b/faq/items/bond-rewards-5.tsx @@ -0,0 +1,46 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +// FIXME: links to .lido.fi +export const BondRewards5: Faq = { + title: 'How to claim ETH using a withdrawal NFT', + anchor: 'how-to-claim-eth-using-a-withdrawal-nft', + content: ( +
+

+ Claiming bond and rewards in a form of ETH constitutes an stETH + withdrawal process (unstake).{' '} +

+

The withdrawal process consists of several steps you need to do:

+
    +
  • + Submit a withdrawal request by choosing ETH as a + token for bond/rewards claim. As a result of this step, you will + receive a withdrawal NFT.{' '} +
  • +
  • + Claim your ETH after request fulfilment. The + fulfilment process takes 1-5 days (or longer),{' '} + + depending on a variety of factors + + . To know if your ETH is ready to be claimed you, can check its status + on the{' '} + + Claim page + + . If your request is marked as "Ready to claim + ", it is time for you to get your ETH back. +
  • +
+

+ For more information about withdrawals,{' '} + + follow the page + + . +

+
+ ), +}; diff --git a/faq/items/index.ts b/faq/items/index.ts new file mode 100644 index 00000000..fb53804f --- /dev/null +++ b/faq/items/index.ts @@ -0,0 +1,43 @@ +export * from './bond-rewards-1'; +export * from './bond-rewards-2'; +export * from './bond-rewards-3'; +export * from './bond-rewards-4'; +export * from './bond-rewards-5'; +export * from './keys-1'; +export * from './keys-10'; +export * from './keys-11'; +export * from './keys-12'; +export * from './keys-13'; +export * from './keys-14'; +export * from './keys-15'; +export * from './keys-2'; +export * from './keys-3'; +export * from './keys-4'; +export * from './keys-5'; +export * from './keys-6'; +export * from './keys-7'; +export * from './keys-8'; +export * from './keys-9'; +export * from './locked-bond-1'; +export * from './locked-bond-2'; +export * from './locked-bond-3'; +export * from './main-1'; +export * from './main-2'; +export * from './main-3'; +export * from './main-4'; +export * from './main-5'; +export * from './main-6'; +export * from './main-7'; +export * from './main-8'; +export * from './monitoring-1'; +export * from './monitoring-2'; +export * from './monitoring-3'; +export * from './monitoring-4'; +export * from './monitoring-5'; +export * from './operator-type-1'; +export * from './operator-type-2'; +export * from './roles-1'; +export * from './roles-2'; +export * from './roles-3'; +export * from './roles-4'; +export * from './roles-5'; diff --git a/faq/items/keys-1.tsx b/faq/items/keys-1.tsx new file mode 100644 index 00000000..aa43f04d --- /dev/null +++ b/faq/items/keys-1.tsx @@ -0,0 +1,111 @@ +import React from 'react'; +import { Faq } from 'types'; +import { + FaqChainName, + FaqLidoRewardsVault, + FaqLink, + FaqOnlyMainnet, + FaqOnlyTestnet, + FaqWithdrawalVault, +} from 'shared/components'; + +// FIXME: link to ".lido.fi" +export const Keys1: Faq = { + title: ( + <> + How to set up a validator for CSM ? + + ), + anchor: 'how-to-set-up-a-validator', + content: ( +
+

+ A detailed guide on preparing all the validation tools for CSM can be + found{' '} + + here + + . +

+

+ A shorter flow of setting up a CSM validator for looks + as follows:{' '} +

+
    +
  1. + + Generate new validator keys + {' '} + setting the withdrawal_address to the Lido Withdrawal + Vault on{' '} + + : + {' '} + , specify the deposit amount of 32 ETH, and set + WC type to 0x01 (do NOT make a deposit) +
  2. +
  3. + + Configure your validator client + {' '} + (and/or beacon node) setting the fee_recipient flag to + the designated fee recipient address (Lido Execution Layer Rewards + Vault) on{' '} + + : + {' '} + and import the newly generated CSM keystores +
  4. + +
  5. + + Configure your MEV-Boost service + + . Do not set the `min-bid` flag (or set 0) and set the `relay` flags + only to{' '} + + the list of designated MEV relays for Lido CSM on + +
  6. +
    + +
  7. + + Configure your MEV-Boost service + + . Min-bid may be configured either at MEV-Boost level + or at the CL client, the current acceptable maximum value for + min-bid is 0.07{' '} + + based on community consensus + {' '} + and may change. Builder-boost-factor should be set to + 100%, i.e. local and builder payloads should be treated with equal + weights. The relay flags should be set to a list of + values only using relays from{' '} + + the list of Vetted MEV-Boost Relays for Lido CSM + + . Note that at least one “must use” relay should be used. Relays not + mentioned in the list are not allowed for use +
  8. +
    +
  9. + + Upload the newly generated deposit data + {' '} + file pertaining to your CSM keystores onto{' '} + the Lido CSM Widget and + provide the required bond amount in ETH/stETH/wstETH. Before + uploading, make sure that nodes are synced, running, and corresponding + keystores are imported. Hence, your setup is ready for the validator + activation +
  10. +
  11. + Wait for your CSM validator keys to be deposited through the protocol + and make sure your node remains online in the meantime! +
  12. +
+
+ ), +}; diff --git a/faq/items/keys-10.tsx b/faq/items/keys-10.tsx new file mode 100644 index 00000000..53269705 --- /dev/null +++ b/faq/items/keys-10.tsx @@ -0,0 +1,52 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Keys10: Faq = { + title: + 'What is the difference between removing, exiting, and ejecting a key?', + anchor: 'what-is-the-difference-between-removing-exiting-and-ejecting-a-key', + content: ( +
+

+ Removing a key is an operation when the validator key is removed from + the Node Operator on-chain keys storage in CSM. Only non-deposited keys + can be removed. Due to associated queue maintenance costs{' '} + keyRemovalCharge is charged from the Node Operator's + bond for each removed key. +

+

+ Exiting a key (validator) is an operation when the Node Operator + publishes a voluntary exit message associated with the corresponding + active validator to the Beacon chain. Once published, the exit process + will be started for the validator. Note that only activated validators + might be exited. Also, a period of 256 epochs (approx. 27 + hours) should pass since the validator activation before the voluntary + exit message can be published. +

+

+ Ejecting the key (validator) is an operation when the validator exit is + initiated from the validator's withdrawal credentials on Execution + layer. Since all validators in CSM have their withdrawal credentials set + to Lido Withdrawal Vault, the process can only be initiated from this + smart contract. CSM provides a proxy method for the Node Operators to + voluntary eject their validators if they decide to do so. In this case, + the Node Operator is responsible for attaching a corresponding payment + to cover{' '} + TW fee + . Also, ejection can be invoked from the Lido protocol side in the + following cases: +

+
    +
  • + The validator has excessive number of performance strikes assigned; +
  • +
  • + The validator was requested to exit by VEBO but have not exited in + time; +
  • +
  • Based on the Lido DAO decision;
  • +
+
+ ), +}; diff --git a/faq/items/keys-11.tsx b/faq/items/keys-11.tsx new file mode 100644 index 00000000..3bf6214c --- /dev/null +++ b/faq/items/keys-11.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Keys11: Faq = { + title: 'When does a validator become withdrawn?', + anchor: 'when-does-a-validator-become-withdrawn', + content: ( +
+

+ On the Ethereum network, a validator can be withdrawn after + successfully exiting from the consensus layer, but the exact timing of + withdrawal depends on several factors related to Ethereum protocol + mechanics: +

+
    +
  1. + Exit Queue: When a validator initiates an exit, it + enters an exit queue. The time required to exit + depends on the number of validators exiting +  and the churn limit (the number of + validators allowed to exit or enter per epoch). +
  2. +
  3. + Withdrawal Process: After exiting the active + validator set, the validator enters a  + withdrawable state. This state is determined by + the withdrawable epoch, which is set to the exit + epoch + a minimum delay of 256 epochs (~27 + hours). +
  4. +
  5. + Finalization of Withdrawal: Once the withdrawable + epoch is reached, the validator balance will be transferred to the + validator's withdrawal credentials (in the case of the Lido + protocol, the Lido Withdrawal Vault) within the next iteration of the + Consensus Layer withdrawal sweep cycle. How long this takes depends on + the validator's position in the overall sweep cycle, and time + difference between the withdrawable epoch and when its turn will come + to be swept. Once the withdrawal has occurred, the fact of the + withdrawal can be reported to CSM permissionlessly. Once that occurs, + the part of the Node Operator's bond used for this validator is + released. At this point, the Node Operator can claim the bond on the{' '} + Bond & Rewards Claim tab. +
  6. +
+
+ ), +}; diff --git a/faq/items/keys-12.tsx b/faq/items/keys-12.tsx new file mode 100644 index 00000000..132af0a2 --- /dev/null +++ b/faq/items/keys-12.tsx @@ -0,0 +1,33 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Keys12: Faq = { + title: 'Why a key can get ejected?', + anchor: 'why-a-key-can-get-ejected', + content: ( +
+

+ Validator ejection can be invoked from the Lido protocol side in the + following cases: +

+
    +
  • + The validator has excessive number of performance strikes assigned; +
  • +
  • + The validator was requested to exit by VEBO but have not exited in + time; +
  • +
  • Based on the Lido DAO decision;
  • +
+

+ Also, Node Operators can voluntary eject their validators if they decide + to so. In this case, the Node Operator is responsible for attaching a + corresponding payment to cover{' '} + TW fee + . +

+
+ ), +}; diff --git a/faq/items/keys-13.tsx b/faq/items/keys-13.tsx new file mode 100644 index 00000000..64d7b73e --- /dev/null +++ b/faq/items/keys-13.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { FaqShareLimit } from 'shared/components'; +import { Faq } from 'types'; + +export const Keys13: Faq = { + title: 'What is the CSM Stake Share Limit?', + anchor: 'what-is-the-csm-stake-share-limit', + content: ( +
+

+ The stake share limit is a parameter defined for each Staking Module + based on its risk profile. It determines the percentage of the total + stake in the Lido Protocol that can be allocated to the module. + Currently, the stake share limit for CSM is set at . + Once CSM reaches its stake share limit, new keys can still be uploaded, + but deposits to these keys may take a very long time (e.g. months), if + they are deposited to at all. These factors affect the possibility of + new deposits to your uploaded keys: +

+
    +
  • + The number of keys already in the deposit queue, and the position of + your keys in this queue +
  • +
  • The number of keys that will exit from CSM
  • +
  • + Changes in the total volume of stake in the Lido Protocol (both net + flows as well as whether overall Lido protocol stake increases or not) +
  • +
+

+ In other words, if keys had not been deposited to before CSM reached its + limit, they may still be deposited to later if: +

+
    +
  • The overall stake volume in the Lido Protocol increases
  • +
  • Keys exit from CSM, freeing up space for new keys
  • +
  • The DAO decides to increase CSM's stake share limit
  • +
+

+ While keys are awaiting deposit, Node Operators continue to receive + daily bond rewards based on the bond they submitted. However, they do + not receive Node Operator rewards, as the keys remain inactive until + they are fully deposited. +

+
+ ), +}; diff --git a/faq/items/keys-14.tsx b/faq/items/keys-14.tsx new file mode 100644 index 00000000..49b64331 --- /dev/null +++ b/faq/items/keys-14.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Keys14: Faq = { + title: 'What is a referrer?', + anchor: 'what-is-a-referrer', + showRules: ['HAS_REFERRER'], + content: ( +
+

+ A referrer is a software provider specializing in node/validator setup + that integrated CSM into their tools. When a referrer directs solo + stakers to join CSM via its tool, these Node Operators are marked as + being referred from this provider. It doesn't affect the Node + Operators rewards in any way and is used just for the funnel-tracking + purposes. +

+
+ ), +}; diff --git a/faq/items/keys-15.tsx b/faq/items/keys-15.tsx new file mode 100644 index 00000000..fe8d0b32 --- /dev/null +++ b/faq/items/keys-15.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqDiscordChannel, FaqLink } from 'shared/components'; + +export const Keys15: Faq = { + title: 'What to do in case of technical issues?', + anchor: 'what-to-do-in-case-of-technical-issues', + content: ( +
+

+ For community assistance, join the " + + " channel on the{' '} + + Lido Discord server + {' '} + to seek advice and guidance. +

+
+ ), +}; diff --git a/faq/items/keys-2.tsx b/faq/items/keys-2.tsx new file mode 100644 index 00000000..d8e75d42 --- /dev/null +++ b/faq/items/keys-2.tsx @@ -0,0 +1,61 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Keys2: Faq = { + title: 'Why upload a bond?', + anchor: 'why-upload-a-bond', + content: ( +
+

+ Submitting a bond serves as a risk mitigation measure for both the + Ethereum network and the Lido protocol. +

+

+ There are several major reasons for a CSM Node Operator's bond to + be penalized, including: +

+
    +
  • + The operator has stolen EL rewards (MEV).{' '} + Penalty amount = amount stolen + fixed stealing fine; +
  • +
  • + + The validator's withdrawal balance is less than 32 ETH + + .{' '} + Penalty amount = 32 - validator's withdrawal balance + ; +
  • +
  • + The operator has not exited the validators in time.{' '} + Penalty amount = exitDelayPenalty (a fixed amount set by + the DAO); +
  • +
  • + + The validator has been ejected via{' '} + + EIP-7002 + {' '} + due to an excessive number of strikes. + {' '} + Penalty amount = badPerformancePenalty (a fixed amount + set by the DAO); +
  • +
  • + + Force ejection via{' '} + + EIP-7002 + {' '} + was triggered for the validator. + {' '} + Penalty amount ={' '} + min(actual TW fee paid, maxWithdrawalRequestFee). +
  • +
+
+ ), +}; diff --git a/faq/items/keys-3.tsx b/faq/items/keys-3.tsx new file mode 100644 index 00000000..366aa4b4 --- /dev/null +++ b/faq/items/keys-3.tsx @@ -0,0 +1,28 @@ +import { OPERATOR_TYPE } from '@lidofinance/lido-csm-sdk'; +import { FaqBondAmount, FaqChainName, FaqCurveImage } from 'shared/components'; +import { Faq } from 'types'; + +export const Keys3: Faq = { + title: 'How much bond is needed?', + anchor: 'how-much-bond-is-needed', + content: ( +
+

+ The initial bond requirement for the first validator for the{' '} + is . However, + for Identified Community Stakers (ICS), this amount is reduced to{' '} + to incentivize independent + stakers participation. +

+

+ The amount for the second and subsequent validators is{' '} + +

+

+ For the , the values for the bond curve are the + following: +

+ +
+ ), +}; diff --git a/faq/items/keys-4.tsx b/faq/items/keys-4.tsx new file mode 100644 index 00000000..6fdf2e2c --- /dev/null +++ b/faq/items/keys-4.tsx @@ -0,0 +1,25 @@ +import { FaqChainName, FaqCurveImage, FaqLink } from 'shared/components'; +import { Faq } from 'types'; + +export const Keys4: Faq = { + title: 'What is the bond curve?', + anchor: 'what-is-the-bond-curve', + content: ( +
+

+ + The bond curve + {' '} + is a function that determines the amount of bond required for each + subsequent validator operated by the node operator. For Identified + Community Stakers (ICS), a unique bond curve function is applied to + independent stakers participation. +

+

+ For the , the values for the bond curve are the + following: +

+ +
+ ), +}; diff --git a/faq/items/keys-5.tsx b/faq/items/keys-5.tsx new file mode 100644 index 00000000..82fad521 --- /dev/null +++ b/faq/items/keys-5.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Keys5: Faq = { + title: 'Difference between bond types (ETH, stETH, wstETH)?', + anchor: 'difference-between-bond-types-eth-steth-wsteth', + content: ( +
+

+ Bonds are stored in the form of stETH to so that participation as a Node + Operator is more capital efficient than if the bond were un-staked (or + could only be staked if sufficient deposits to fill the submitted + validators were present). While node operators can submit bond in ETH, + stETH, or wstETH, any token other than stETH is converted to stETH for + consistency in bond format. +

+
+ ), +}; diff --git a/faq/items/keys-6.tsx b/faq/items/keys-6.tsx new file mode 100644 index 00000000..5d092637 --- /dev/null +++ b/faq/items/keys-6.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Keys6: Faq = { + title: 'When does a validator become active?', + anchor: 'when-does-a-validator-become-active', + content: ( +
+

+ After key submission, and if keys have been successfully validated, two + actions are required for a validator to be activated: +

+
    +
  1. + Deposit by Lido Protocol: The time to deposit a + validator is unpredictable and depends on factors such as total stake + inflows and outflows, gas considerations, module shares, CSM deposit + queue size, and the Node Operator's place in the queue. +
  2. +
  3. + Activation on Ethereum Network: Once deposited, the + validator enters the Beacon Chain activation queue. The time to + activation depends on the total number of validators in the queue + awaiting activation and the rate of queue processing, which varies + based on the total number of active Ethereum validators. +
  4. +
+
+ ), +}; diff --git a/faq/items/keys-7.tsx b/faq/items/keys-7.tsx new file mode 100644 index 00000000..6f57921d --- /dev/null +++ b/faq/items/keys-7.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { FaqKeyRemovalFee } from 'shared/components'; +import { Faq } from 'types'; + +export const Keys7: Faq = { + title: 'Why pay for key deletion?', + anchor: 'why-pay-for-key-deletion', + content: ( +
+

+ Key deletion incurs a removal fee of , which is + deducted from the Node Operator's bond per each deleted key to + cover the maximal possible operational costs associated with the queue + processing. This fee is intended to protect the module from potential + DoS attacks by malicious actors who could clog the queue with empty + slots by adding and removing keys, and covers the maximal possible + operational costs associated with the queue processing. The fee + discourages misuse, keeping the system clear of invalid keys or keys + that don't end up being deposited to. +

+
+ ), +}; diff --git a/faq/items/keys-8.tsx b/faq/items/keys-8.tsx new file mode 100644 index 00000000..509bcd24 --- /dev/null +++ b/faq/items/keys-8.tsx @@ -0,0 +1,23 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Keys8: Faq = { + title: "Can't see the key for deletion?", + anchor: 'cant-see-the-key-for-deletion', + content: ( +
+

+ Only keys that have not been deposited yet can be deleted. If a key has + already been deposited, you can either{' '} + + exit the validator on the Consensus Layer (CL) + {' '} + or use the triggerable withdrawals mechanism to eject your validator + (can be done on the "Keys" → "Delete" → + "Eject" tab). Once withdrawn, the node operator can claim the + excess bond. +

+
+ ), +}; diff --git a/faq/items/keys-9.tsx b/faq/items/keys-9.tsx new file mode 100644 index 00000000..080f669b --- /dev/null +++ b/faq/items/keys-9.tsx @@ -0,0 +1,20 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Keys9: Faq = { + title: 'How to stop validating in CSM?', + anchor: 'how-to-stop-validating-in-csm', + content: ( +
+

+ Exiting CSM validator keys works the same way as exiting solo staking + validator keys. The guide on how to exit the validator can be found{' '} + + here + + . +

+
+ ), +}; diff --git a/faq/items/locked-bond-1.tsx b/faq/items/locked-bond-1.tsx new file mode 100644 index 00000000..4fa99b6f --- /dev/null +++ b/faq/items/locked-bond-1.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const LockedBond1: Faq = { + title: 'Why is the bond locked?', + anchor: 'why-is-the-bond-locked', + content: ( +
+

+ Bond may be locked in the case of delayed penalties, typically for MEV + stealing event reported by a dedicated committee. This measure ensures + that node operators are held accountable for any misbehavior or rule + violations. +

+
+ ), +}; diff --git a/faq/items/locked-bond-2.tsx b/faq/items/locked-bond-2.tsx new file mode 100644 index 00000000..07377b80 --- /dev/null +++ b/faq/items/locked-bond-2.tsx @@ -0,0 +1,27 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const LockedBond2: Faq = { + title: 'How to unlock the bond?', + anchor: 'how-to-unlock-the-bond', + content: ( +
+

+ To unlock the bond, the penalty amount, which includes the stolen amount + and a fixed stealing fine, must be compensated on the "Locked + bond" tab. This action can be performed from the Manager Address of + the Node Operator.{' '} +

+

+ If there are disputes regarding the penalty, node operators can start a + public discussion about the penalty applied on the Lido research forum + under the{' '} + + CSM Support + {' '} + category. +

+
+ ), +}; diff --git a/faq/items/locked-bond-3.tsx b/faq/items/locked-bond-3.tsx new file mode 100644 index 00000000..c0197551 --- /dev/null +++ b/faq/items/locked-bond-3.tsx @@ -0,0 +1,17 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const LockedBond3: Faq = { + title: 'Consequences of not compensating?', + anchor: 'consequences-of-not-compensating', + content: ( +
+

+ In case of refusal to compensate the penalty, a protocol rule violation + occurs which results in the reset of all node operator benefits. The + locked bond is burned to compensate all stETH holders for the rewards + stolen. +

+
+ ), +}; diff --git a/faq/items/main-1.tsx b/faq/items/main-1.tsx new file mode 100644 index 00000000..757d8d61 --- /dev/null +++ b/faq/items/main-1.tsx @@ -0,0 +1,35 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Main1: Faq = { + title: 'Why run an Ethereum validator?', + anchor: 'why-run-an-ethereum-validator', + content: ( +
+

Running an Ethereum validator allows one to:

+
    +
  1. + Receive Staking Rewards: Validators get network + rewards for performing their duties on the Ethereum blockchain (note: + incorrectly or not performing duties incurs penalties).{' '} +
  2. +
  3. + Support the Network: By running a validator, you + actively contribute to the decentralization and security of the + Ethereum network. Validators play a crucial role in reaching consensus + and validating transactions, which enhances the network's + reliability and resilience. +
  4. +
  5. + Learn and Engage with the community: Operating a + validator node provides valuable insights into blockchain technology + and consensus mechanisms. Through hands-on experience, individuals can + deepen their understanding of Ethereum's inner workings. + Moreover, it provides an opportunity to engage with the Ethereum + community, share knowledge, and contribute to the network's + development. +
  6. +
+
+ ), +}; diff --git a/faq/items/main-2.tsx b/faq/items/main-2.tsx new file mode 100644 index 00000000..76bfd45e --- /dev/null +++ b/faq/items/main-2.tsx @@ -0,0 +1,36 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Main2: Faq = { + title: 'What is required to be a Node Operator in CSM?', + anchor: 'what-is-required-to-be-a-node-operator-in-csm', + content: ( +
+

+ Node operation in CSM involves a long-term commitment to Ethereum's + decentralization. Responsibilities include: +

+
    +
  • + Hardware Setup: Setting up a computer that meets the + system requirements for running validator nodes. +
  • +
  • + Configuration: Properly configuring nodes and + validators, ensuring they are in sync with the Ethereum blockchain and + other network participants. +
  • +
  • + Security Measures: Implementing robust security + measures to safeguard against external threats and internal + vulnerabilities. +
  • +
  • + Maintenance: Sustaining ongoing maintenance + throughout the validator's lifespan, which involves monitoring + performance, troubleshooting issues, and applying necessary updates. +
  • +
+
+ ), +}; diff --git a/faq/items/main-3.tsx b/faq/items/main-3.tsx new file mode 100644 index 00000000..79d0f42e --- /dev/null +++ b/faq/items/main-3.tsx @@ -0,0 +1,29 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Main3: Faq = { + title: 'What do node operators receive in CSM?', + anchor: 'what-do-node-operators-receive-in-csm', + content: ( +
+

Node operators benefit from:

+
    +
  • + Daily Bond Rebase: The collateral for CSM NOs is + eligible for{' '} + + rewards through stETH's rebase + + , even before validator activation.{' '} +
  • +
  • + Socialized Rewards: Rewards are smoothed across the + largest validator set, mitigating volatility. This means that even in + the event of small outages or disruptions, node operators can still + receive rewards, reducing the risk of rewards loss. +
  • +
+
+ ), +}; diff --git a/faq/items/main-4.tsx b/faq/items/main-4.tsx new file mode 100644 index 00000000..b19efa9a --- /dev/null +++ b/faq/items/main-4.tsx @@ -0,0 +1,48 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Main4: Faq = { + title: 'What are the risks of running a validator?', + anchor: 'what-are-the-risks-of-running-a-validator', + content: ( +
+

Node operators face several risks, including:

+
    +
  1. + Technical Risk: Maintaining reliable and secure + hardware and software setups is essential. Any technical failure or + vulnerability in the validator setup could lead to penalties. +
  2. +
  3. + Penalties for Misbehavior: Validators can be + penalized for various reasons, such as going offline or attempting to + manipulate the network. +
  4. +
  5. + Market Risk: The value of ETH can fluctuate + significantly, impacting the value of the validator's staked ETH. +
  6. +
  7. + Network Risk: Validators are part of a decentralized + network, and the security and stability of the Ethereum network as a + whole can affect individual validators. Events such as network attacks + or protocol upgrades may impact validator operations, leading to + potential disruptions or losses. +
  8. +
  9. + Operational Risk: Validators require ongoing + maintenance and monitoring to ensure smooth operation. Any operational + issues, such as hardware failures or connectivity issues, could + disrupt validator performance and result in rewards losses. +
  10. +
  11. + Slashing Risk: Validators can be slashed, meaning + they lose a portion of their staked ETH, for violating network rules + or behaving maliciously. Slashing can occur due to actions such as + double signing or failing to validate correctly, resulting in + significant penalties. +
  12. +
+
+ ), +}; diff --git a/faq/items/main-5.tsx b/faq/items/main-5.tsx new file mode 100644 index 00000000..446ac278 --- /dev/null +++ b/faq/items/main-5.tsx @@ -0,0 +1,19 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Main5: Faq = { + title: 'How does CSM work?', + anchor: 'how-does-csm-work', + content: ( +
+

+ Refer to{' '} + + the CSM page + {' '} + for a more detailed explanation of its mechanics and functionalities. +

+
+ ), +}; diff --git a/faq/items/main-6.tsx b/faq/items/main-6.tsx new file mode 100644 index 00000000..63699866 --- /dev/null +++ b/faq/items/main-6.tsx @@ -0,0 +1,54 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Main6: Faq = { + title: 'What makes CSM unique?', + anchor: 'what-makes-csm-unique', + content: ( +
+

+ CSM provides several unique features to attract and benefit community + stakers: +

+
    +
  • + Rewards Smoothing: Rewards, including Execution Layer + (EL) rewards and MEV, are smoothed with other modules to provide more + stable rewards comparable to operating validators solo. +
  • +
  • + Low Bond Requirement: A low bond for node operators + makes participation more accessible to a broader range of prospective + operators. +
  • +
  • + Exclusive Use of ETH (stETH): CSM exclusively uses + ETH ((w)stETH) for bond and rewards, eliminating the need for other + assets and simplifying the process for node operators. The bond can be + submitted as ETH, wstETH, or stETH, and both bond and rewards can be + withdrawn in any of the three forms (withdrawals in the form of ETH + follow the{' '} + + normal Lido on Ethereum unstaking process + + ). +
  • +
  • + Enhanced User Experience: Accessible through a + multitude of options -- from a web UI to integrations with Dappnode, + Stereum, Eth-Docker, Sedge, Stereum, CoinPillar, etc., CSM offers a + leading user-friendly experience, with reduced gas fees for on-chain + operations and simplified transactions for joining and claiming + rewards. +
  • +
  • + Higher Reward Potential: Node operators are + potentially able to earn more rewards compared to vanilla solo + staking, making CSM an attractive option for operators looking to run + more validators to earn rewards. +
  • +
+
+ ), +}; diff --git a/faq/items/main-7.tsx b/faq/items/main-7.tsx new file mode 100644 index 00000000..198375ca --- /dev/null +++ b/faq/items/main-7.tsx @@ -0,0 +1,29 @@ +import { OPERATOR_TYPE } from '@lidofinance/lido-csm-sdk'; +import React from 'react'; +import { FaqBondAmount, FaqChainName, FaqCurveImage } from 'shared/components'; +import { Faq } from 'types'; + +export const Main7: Faq = { + title: 'How much bond is needed?', + anchor: 'how-much-bond-is-needed', + content: ( +
+

+ The initial bond requirement for the first validator for the{' '} + is . However, + for Identified Community Stakers (ICS), this amount is reduced to{' '} + to incentivize independent + stakers participation. +

+

+ The amount for the second and subsequent validators is{' '} + +

+

+ For the , the values for the bond curve are the + following: +

+ +
+ ), +}; diff --git a/faq/items/main-8.tsx b/faq/items/main-8.tsx new file mode 100644 index 00000000..0abd4283 --- /dev/null +++ b/faq/items/main-8.tsx @@ -0,0 +1,21 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqDiscordChannel, FaqLink } from 'shared/components'; + +export const Main8: Faq = { + title: 'How can I get help?', + anchor: 'how-can-i-get-help', + content: ( +
+

+ For community assistance, join the " + + " channel on the{' '} + + Lido Discord server + {' '} + to seek advice and guidance. +

+
+ ), +}; diff --git a/faq/items/monitoring-1.tsx b/faq/items/monitoring-1.tsx new file mode 100644 index 00000000..e3ee5de1 --- /dev/null +++ b/faq/items/monitoring-1.tsx @@ -0,0 +1,26 @@ +import React from 'react'; +import { FaqPerformanceLeeway } from 'shared/components/faq/faq-performance-leeway'; +import { Faq } from 'types'; + +export const Monitoring1: Faq = { + title: 'What is the performance threshold?', + anchor: 'what-is-the-performance-threshold', + content: ( +
+

+ The performance threshold is a relative variable determined as follows: +

+

+ + CSM Performance threshold (%) = Average validator performance across + the whole Ethereum network (%) - + +

+

+ A performance threshold is utilized to determine the allocation of the + actual Node Operator rewards. Validators with performance above the + threshold are included in the allocation pool, while the rest are not.{' '} +

+
+ ), +}; diff --git a/faq/items/monitoring-2.tsx b/faq/items/monitoring-2.tsx new file mode 100644 index 00000000..3b41da27 --- /dev/null +++ b/faq/items/monitoring-2.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqFrameDuration, FaqLink } from 'shared/components'; + +export const Monitoring2: Faq = { + title: 'How does the CSM Performance Oracle work?', + anchor: 'how-does-the-csm-performance-oracle-work', + content: ( +
+

+ The Performance Oracle calculates validators performance based on + their attestation, block proposal, + and sync committee participation effectiveness. The + exact formulas for performance calculation can be found  + + here + + . The Performance Oracle compares the performance of each validator with + the performance threshold to determine whether the validator should or + should not be included in the rewards distribution during the frame. +

+

+ The frame for the Performance Oracle report + is set to . The Performance Oracle creates a  + + Merkle tree + +  with the allocation of the Node Operator rewards and delivers the + root on-chain. To make the original tree available to users, it is + published on IPFS +  and  + + GitHub + + .{' '} +

+
+ ), +}; diff --git a/faq/items/monitoring-3.tsx b/faq/items/monitoring-3.tsx new file mode 100644 index 00000000..d6d742b0 --- /dev/null +++ b/faq/items/monitoring-3.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Monitoring3: Faq = { + title: 'What is a strike?', + anchor: 'what-is-a-strike', + content: ( +
+

+ A strike is an indicator of the validator performing below the + performance threshold in the given frame. Strikes have a lifetime — a + time after which the strike is no longer considered valid and gets + removed form the strikes{' '} + + Merkle tree + {' '} + delivered by the Performance Oracle. +

+
+ ), +}; diff --git a/faq/items/monitoring-4.tsx b/faq/items/monitoring-4.tsx new file mode 100644 index 00000000..a46ead00 --- /dev/null +++ b/faq/items/monitoring-4.tsx @@ -0,0 +1,22 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Monitoring4: Faq = { + title: 'How are the strikes assigned?', + anchor: 'how-are-the-strikes-assigned', + content: ( +
+

+ Strikes are assigned on per-validator basis. If the validator's + performance within a Performance Oracle frame is below the threshold, a + strike will be assigned and reported on-chain by the Performance Oracle + using{' '} + + Merkle tree + + . +

+
+ ), +}; diff --git a/faq/items/monitoring-5.tsx b/faq/items/monitoring-5.tsx new file mode 100644 index 00000000..38836c56 --- /dev/null +++ b/faq/items/monitoring-5.tsx @@ -0,0 +1,32 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Monitoring5: Faq = { + title: 'What to do in case of a strike assigned?', + anchor: 'what-to-do-in-case-of-a-strike-assigned', + content: ( +
+

+ Since a strike is an indicator of the validator performing below the + performance threshold in the given frame, Node Operators should improve + their validator's performance to avoid getting additional strikes. + If the validator gets more than strikesThreshold strikes + assigned, it will be ejected using{' '} + + EIP-7002 + + . In case of ejection both badPerformancePenalty and{' '} + min(actual TW fee paid, maxWithdrawalRequestFee)will be + confiscated from the Node Operator's bond upon validator withdrawal + reporting.{' '} +

+

+ If Node Operators are unable to maintain validator's performance + above the performance threshold they should voluntary exit their + validators immediately to avoid damaging overall protocol's + performance and application of the corresponding penalties. +

+
+ ), +}; diff --git a/faq/items/operator-type-1.tsx b/faq/items/operator-type-1.tsx new file mode 100644 index 00000000..24bf790e --- /dev/null +++ b/faq/items/operator-type-1.tsx @@ -0,0 +1,82 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const OperatorType1: Faq = { + title: 'What is a Node Operator type?', + anchor: 'what-is-a-node-operator-type', + content: ( +
+

+ Node Operator type is a set of custom parameters values for a Node + Operator in CSM. Node Operator type is determined based on the Node + Operator's bond curve. The full list of parameters for the Node + Operator is: +

+
    +
  • + keyRemovalCharge - a fee charged for each deleted + deposit data record; +
  • +
  • + elRewardsStealingAdditionalFine - an additional fine + charged for each validator that has stolen EL rewards; +
  • +
  • + keysLimit - a limit on the number of active keys for + the Node Operator; +
  • +
  • + queuePriority and maxDeposits +  - parameters defining the priority queue for the Node Operator; +
  • +
  • + rewardShare - a share of the Node Operator rewards + that the Node Operator receives for each validator. Can be customized + depending on the key index in the Node Operator's keys storage; +
  • +
  • + performanceLeeway - a leeway for the Node + Operator's validator's performance, which is used to define + a performance threshold. Can be customized depending on the key index + in the Node Operator's keys storage; +
  • +
  • + strikesParams - parameters defining the Node + Operator's strikes system, which is used to decide on the Node + Operator's validator's ejection due to systematic bad + performance; +
  • +
  • + badPerformancePenalty - a penalty charged for each + validator that has been ejected due to bad performance; +
  • +
  • + performanceCoefficients - coefficients used to + calculate the Node Operator's performance based on the + validator's effectiveness in performing duties like attestation, + proposing blocks, and sync committee participation; +
  • +
  • + allowedExitDelay - an allowed delay between the + moment Node Operator's validator was requested to exit and the + moment it is actually initiated exit process; +
  • +
  • + exitDelayPenalty - a penalty charged for each + validator that has been requested to exit but has not exited within + the allowed delay; +
  • +
  • + maxWithdrawalRequestFee - a maximum fee charged for + each Node Operator's validator that has been forcefully ejected + using  + + EIP-7002 + + ; +
  • +
+
+ ), +}; diff --git a/faq/items/operator-type-2.tsx b/faq/items/operator-type-2.tsx new file mode 100644 index 00000000..28264f46 --- /dev/null +++ b/faq/items/operator-type-2.tsx @@ -0,0 +1,30 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const OperatorType2: Faq = { + title: 'What operator types exist?', + anchor: 'what-operator-types-exist', + content: ( +
+

Currently there are three Node Operator types:

+
    +
  • + Default operator - the default Node Operator type assigned to all new + Node Operators joining CSM via the Default Gate; +
  • +
  • + Identified Community Staker - the custom Node Operator type assigned + to the new Node Operators joining via the Identified Community Stakers + Gate. This type can also be claimed by the Node Operators who have + passed the identification process after joining CSM via the Default + Gate; +
  • +
  • + Legacy EA operator - the custom Node Operator type assigned by default + to the Early Adopters of CSM who have joined the module before the + release of CSM v2. +
  • +
+
+ ), +}; diff --git a/faq/items/roles-1.tsx b/faq/items/roles-1.tsx new file mode 100644 index 00000000..d5c40505 --- /dev/null +++ b/faq/items/roles-1.tsx @@ -0,0 +1,39 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Roles1: Faq = { + title: 'What are rewards and manager addresses?', + anchor: 'what-are-rewards-and-manager-addresses', + content: ( +
+

+ There are two addresses associated with your Node Operator that have + different scope of responsibilities for managing your Node Operator.{' '} +

+

The Rewards Address is used for:

+
    +
  • Claiming bond and rewards
  • +
  • Adding extra bond amount
  • +
  • Proposing a new Rewards Address
  • +
  • Resetting the Manager Address to the current Rewards Address
  • +
+

The Manager Address is used for:

+
    +
  • Adding new keys
  • +
  • Removing existing keys
  • +
  • Adding extra bond amount
  • +
  • Claiming bond and rewards to the Rewards Address
  • +
  • Covering locked bond
  • +
  • Proposing a new Manager Address
  • +
+

+ Read more about addresses management{' '} + + here + + . +

+
+ ), +}; diff --git a/faq/items/roles-2.tsx b/faq/items/roles-2.tsx new file mode 100644 index 00000000..8c4f916e --- /dev/null +++ b/faq/items/roles-2.tsx @@ -0,0 +1,25 @@ +import React from 'react'; +import { Faq } from 'types'; +import { FaqLink } from 'shared/components'; + +export const Roles2: Faq = { + title: 'Why should these addresses be different?', + anchor: 'why-should-these-addresses-be-different', + content: ( +
+

+ It's recommended to use different addresses for security reasons. + For example, a hot wallet may be used for the Manager Address to + simplify daily operations, while a cold wallet (or something like a + Safe) is preferable for the Rewards Address to enhance security.{' '} +

+

+ Read more about addresses management{' '} + + here + + . +

+
+ ), +}; diff --git a/faq/items/roles-3.tsx b/faq/items/roles-3.tsx new file mode 100644 index 00000000..000a801e --- /dev/null +++ b/faq/items/roles-3.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Roles3: Faq = { + title: 'How to accept a change in address request?', + anchor: 'how-to-accept-a-change-in-address-request', + content: ( +
+

+ To accept a change in address request, connect to the CSM widget with + the new address, navigate to the "Roles" → "Inbox + requests" tab, select and accept the request, and confirm the + transaction in your wallet. Changes are made once the transaction is + processed. +

+
+ ), +}; diff --git a/faq/items/roles-4.tsx b/faq/items/roles-4.tsx new file mode 100644 index 00000000..40a23e4c --- /dev/null +++ b/faq/items/roles-4.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Roles4: Faq = { + title: 'What to do if the change is submitted to a wrong address?', + anchor: 'what-to-do-if-the-change-is-submitted-to-a-wrong-address', + content: ( +
+

+ If a role change was submitted to the wrong address, the change can be + revoked. For Rewards Address changes, navigate to "Roles" + → "Rewards Address" → "Revoke". For + Manager Address changes, go to "Roles" → "Manager + address" → "Revoke" +

+
+ ), +}; diff --git a/faq/items/roles-5.tsx b/faq/items/roles-5.tsx new file mode 100644 index 00000000..0be824e9 --- /dev/null +++ b/faq/items/roles-5.tsx @@ -0,0 +1,18 @@ +import React from 'react'; +import { Faq } from 'types'; + +export const Roles5: Faq = { + title: 'What happens to rewards after changing the Rewards Address?', + anchor: 'what-happens-to-rewards-after-changing-the-rewards-address', + content: ( +
+

+ Rewards claimed to the previous Rewards Address remain there. After + changing the Rewards Address, all rewards and excess bond accumulated on + the bond balance can be claimed to the new Rewards Address. In the event + of validator withdrawal, upon claiming of the bond, it would also be + returned to the new Rewards Address. +

+
+ ), +}; diff --git a/faq/keys-1.md b/faq/keys-1.md deleted file mode 100644 index 615570dc..00000000 --- a/faq/keys-1.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to set up a validator for CSM mainnet? ---- - -A detailed guide on preparing all the validation tools for CSM can be found [here](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm). - -A shorter flow of setting up a CSM validator for mainnet looks as follows: - -1. [Generate new validator keys](https://dvt-homestaker.stakesaurus.com/keystore-generation-and-mev-boost/validator-key-generation) setting the `withdrawal_address` to the Lido Withdrawal Vault on **mainnet:** [`0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f`](https://etherscan.io/address/0xb9d7934878b5fb9610b3fe8a5e441e8fad7e293f) and specify the deposit amount of 32 ETH (do **NOT** make a deposit) -2. [Configure your validator client](https://dvt-homestaker.stakesaurus.com/native-solo-staking-setup/validator-client-setup) (and/or beacon node) setting the `fee_recipient` flag to the designated fee recipient address (Lido Execution Layer Rewards Vault) on **mainnet:** [`0x388C818CA8B9251b393131C08a736A67ccB19297`](https://etherscan.io/address/0x388C818CA8B9251b393131C08a736A67ccB19297) and import the newly generated CSM keystores -3. [Configure your MEV-Boost service](https://dvt-homestaker.stakesaurus.com/keystore-generation-and-mev-boost/set-up-and-configure-mev-boost). `Min-bid` may be configured either at MEV-Boost level or at the CL client, the current acceptable maximum value for min-bid is `0.07` [based on community consensus](https://research.lido.fi/t/lido-node-operator-mev-boost-min-bid-guidance/3347) and may change. `Builder-boost-factor` should be set to 100%, i.e. local and builder payloads should be treated with equal weights. The `relay` flags should be set to a list of values only using relays from [the list of Vetted MEV-Boost Relays for Lido CSM](https://enchanted-direction-844.notion.site/6d369eb33f664487800b0dedfe32171e?v=8e5d1f1276b0493caea8a2aa1517ed65). -4. [Upload the newly generated deposit data](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/upload-remove-view-validator-keys) file pertaining to your CSM keystores onto [the Lido CSM Widget](https://csm.lido.fi/) and provide the required bond amount in ETH/stETH/wstETH. Before uploading, make sure that nodes are synced, running, and ready for the validator activation. -5. Wait for your CSM validator keys to be deposited through the protocol and make sure your node remains online in the meantime! diff --git a/faq/keys-10.md b/faq/keys-10.md deleted file mode 100644 index 978d3d64..00000000 --- a/faq/keys-10.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: When does a validator become withdrawn? -anchor: when-validator-become-withdrawn ---- - -On the Ethereum network, a validator can be withdrawn after successfully exiting from the consensus layer, but the exact timing of withdrawal depends on several factors related to Ethereum protocol mechanics: - -1. **Exit Queue**: When a validator initiates an exit, it enters an exit queue. The time required to exit depends on the number of validators exiting and the churn limit (the number of validators allowed to exit or enter per epoch). -2. **Withdrawal Process**: After exiting the active validator set, the validator enters a withdrawable state. This state is determined by the withdrawable epoch, which is set to the exit epoch + a minimum delay of 256 epochs (~27 hours). -3. **Finalization of Withdrawal**: Once the withdrawable epoch is reached, the validator balance will be transferred to the validator's withdrawal credentials (in the case of the Lido protocol, the Lido Withdrawal Vault) within the next iteration of the Consensus Layer withdrawal sweep cycle. How long this takes depends on the validator's position in the overall sweep cycle, and time difference between the withdrawable epoch and when its turn will come to be swept. Once the withdrawal has occurred, the fact of the withdrawal can be reported to CSM permissionlessly. Once that occurs, the part of the Node Operator’s bond used for this validator is released. At this point, the Node Operator can claim the bond on the Bond & Rewards Claim tab. diff --git a/faq/keys-11.md b/faq/keys-11.md deleted file mode 100644 index 88e7c56c..00000000 --- a/faq/keys-11.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: What is a referrer? -onlyWithReferrer: true ---- - -A referrer is a software provider specializing in node/validator setup that integrated CSM into their tools. When a referrer directs solo stakers to join CSM via its tool, these Node Operators are marked as being referred from this provider. It doesn’t affect the Node Operators rewards in any way and is used just for the funnel-tracking purposes. diff --git a/faq/keys-12.md b/faq/keys-12.md deleted file mode 100644 index 7c2fc9e1..00000000 --- a/faq/keys-12.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: What to do in case of technical issues? ---- - -For community assistance, join the "CSM-mainnet" channel on the [Lido Discord server](https://discord.com/invite/lido) to seek advice and guidance. diff --git a/faq/keys-13.md b/faq/keys-13.md deleted file mode 100644 index df2a4bb3..00000000 --- a/faq/keys-13.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: What is the CSM Stake Share Limit? -anchor: stake-share-limit ---- - -The stake share limit is a parameter defined for each Staking Module based on its risk profile. It determines the percentage of the total stake in the Lido Protocol that can be allocated to the module. Currently, the stake share limit for CSM is set at 2%. Once CSM reaches its stake share limit, new keys can still be uploaded, but deposits to these keys may take a very long time (e.g. months), if they are deposited to at all. These factors affect the possibility of new deposits to your uploaded keys: - -- The number of keys already in the deposit queue, and the position of your keys in this queue -- The number of keys that will exit from CSM -- Changes in the total volume of stake in the Lido Protocol (both net flows as well as whether overall Lido protocol stake increases or not) - -In other words, if keys had not been deposited to before CSM reached its limit, they may still be deposited to later if: - -- The overall stake volume in the Lido Protocol increases -- Keys exit from CSM, freeing up space for new keys -- The DAO decides to increase CSM's stake share limit - -While keys are awaiting deposit, Node Operators continue to receive daily bond rewards based on the bond they submitted. However, they do not receive Node Operator rewards, as the keys remain inactive until they are fully deposited. diff --git a/faq/keys-2.md b/faq/keys-2.md deleted file mode 100644 index fa478fde..00000000 --- a/faq/keys-2.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Why upload a bond? ---- - -Submitting a bond serves as a risk mitigation measure for both the Ethereum network and the Lido protocol. - -There are several major reasons for a CSM Node Operator's bond to be penalized, including: - -- **The validator has been slashed.** In this case, the initial (minimal) slashing penalty is confiscated. `Penalty amount` = `1 ETH (EFFECTIVE_BALANCE / 32)`; -- **The operator has stolen EL rewards (MEV)**. `Penalty amount` = `amount stolen` + `fixed stealing fine`; -- **The validator's withdrawal balance is less than 32 ETH**. `Penalty amount` = `32` - `validator's withdrawal balance.` diff --git a/faq/keys-3.md b/faq/keys-3.md deleted file mode 100644 index e70c6dd9..00000000 --- a/faq/keys-3.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: false -anchor: how-bond-is-calculated ---- - -The initial bond requirement for the first validator for the mainnet is 2.4 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -The amount for the second and subsequent validators is 1.3 stETH - -For the mainnet, the values for the bond curve are the following: - -![curve.png](/assets/mainnet-curve-common.png) diff --git a/faq/keys-3a.md b/faq/keys-3a.md deleted file mode 100644 index 7ba99f09..00000000 --- a/faq/keys-3a.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: true -anchor: how-bond-is-calculated ---- - -The initial bond requirement for the first validator for the mainnet is 2.4 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -The amount for the second and subsequent validators is 1.3 stETH - -For the mainnet, the values for the bond curve are the following: - -![curve.png](/assets/mainnet-curve-ea.png) diff --git a/faq/keys-4.md b/faq/keys-4.md deleted file mode 100644 index 4c793a8c..00000000 --- a/faq/keys-4.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: What is the bond curve? -earlyAdoption: false ---- - -[The bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf) is a function that determines the amount of bond required for each subsequent validator operated by the node operator. For [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), a unique bond curve function is applied to incentivize early participation. - -For the mainnet, the values for the bond curve are the following: - -![curve.png](/assets/mainnet-curve-common.png) diff --git a/faq/keys-4a.md b/faq/keys-4a.md deleted file mode 100644 index 21e0eaf6..00000000 --- a/faq/keys-4a.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: What is the bond curve? -earlyAdoption: true ---- - -[The bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf) is a function that determines the amount of bond required for each subsequent validator operated by the node operator. For [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), a unique bond curve function is applied to incentivize early participation. - -For the mainnet, the values for the bond curve are the following: - -![curve.png](/assets/mainnet-curve-ea.png) diff --git a/faq/keys-5.md b/faq/keys-5.md deleted file mode 100644 index 8539e45a..00000000 --- a/faq/keys-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Difference between bond types (ETH, stETH, wstETH)? ---- - -Bonds are stored in the form of stETH to so that participation as a Node Operator is more capital efficient than if the bond were un-staked (or could only be staked if sufficient deposits to fill the submitted validators were present). While node operators can submit bond in ETH, stETH, or wstETH, any token other than stETH is converted to stETH for consistency in bond format. diff --git a/faq/keys-6.md b/faq/keys-6.md deleted file mode 100644 index c7651403..00000000 --- a/faq/keys-6.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: When does a validator become active? -anchor: when-validator-become-active ---- - -After key submission, and if keys have been successfully validated, two actions are required for a validator to be activated: - -1. **Deposit by Lido Protocol**: The time to deposit a validator is unpredictable and depends on factors such as total stake inflows and outflows, gas considerations, module shares, CSM deposit queue size, and the Node Operator's place in the queue. - - You can subscribe to [the important CSM events](https://docs.lido.fi/staking-modules/csm/guides/events) to stay notified about your validator being deposited to. - - Read more information about the deposits flow [here](https://operatorportal.lido.fi/modules/community-staking-module#block-90b8ff95edc64cf7a051584820219616). - -2. **Activation on Ethereum Network**: Once deposited, the validator enters the Beacon Chain activation queue. The time to activation depends on the total number of validators in the queue awaiting activation and the rate of queue processing, which varies based on the total number of active Ethereum validators. - - You can check if the keys are activated on the [Keys tab](https://csm.lido.fi/keys) or on [beaconcha.in](http://beaconcha.in/) diff --git a/faq/keys-7.md b/faq/keys-7.md deleted file mode 100644 index 2049a4e0..00000000 --- a/faq/keys-7.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Why pay for key deletion? ---- - -Key deletion incurs a removal fee of 0.05 ETH, which is deducted from the Node Operator's bond per each deleted key to cover the maximal possible operational costs associated with the queue processing. This fee is intended to protect the module from potential DoS attacks by malicious actors who could clog the queue with empty slots by adding and removing keys, and covers the maximal possible operational costs associated with the queue processing. The fee discourages misuse, keeping the system clear of invalid keys or keys that don’t end up being deposited to. diff --git a/faq/keys-8.md b/faq/keys-8.md deleted file mode 100644 index 79c65c68..00000000 --- a/faq/keys-8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Can't see the key for deletion? ---- - -Only keys that have not been deposited yet can be deleted. If a key has already been deposited, the only way to retrieve the bond is [to exit the validator on the Consensus Layer (CL)](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/exiting-csm-validators). Once withdrawn, the node operator can claim the excess bond. diff --git a/faq/keys-9.md b/faq/keys-9.md deleted file mode 100644 index c1361d38..00000000 --- a/faq/keys-9.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How to stop validating in CSM? ---- - -Exiting CSM validator keys works the same way as exiting solo staking validator keys. The guide on how to exit the validator can be found [here](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/exiting-csm-validators#manual-exit). diff --git a/faq/locked-1.md b/faq/locked-1.md deleted file mode 100644 index ea31fa37..00000000 --- a/faq/locked-1.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Why is the bond locked? ---- - -Bond may be locked in the case of delayed penalties, typically for MEV stealing event reported by a dedicated committee. This measure ensures that node operators are held accountable for any misbehavior or rule violations. diff --git a/faq/locked-2.md b/faq/locked-2.md deleted file mode 100644 index 4aeaf545..00000000 --- a/faq/locked-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: How to unlock the bond? ---- - -To unlock the bond, the penalty amount, which includes the stolen amount and a fixed stealing fine, must be compensated on the "Locked bond" tab. This action can be performed from the Manager Address of the Node Operator. - -If there are disputes regarding the penalty, node operators can start a public discussion about the penalty applied on the Lido research forum under the [CSM Support](https://research.lido.fi/c/csm-support/21) category. diff --git a/faq/locked-3.md b/faq/locked-3.md deleted file mode 100644 index d811e26f..00000000 --- a/faq/locked-3.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Consequences of not compensating? ---- - -In case of refusal to compensate the penalty, a protocol rule violation occurs which results in the reset of all node operator benefits. The locked bond is burned to compensate all stETH holders for the rewards stolen. diff --git a/faq/main-1.md b/faq/main-1.md deleted file mode 100644 index d543ade1..00000000 --- a/faq/main-1.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Why run an Ethereum validator? ---- - -Running an Ethereum validator allows one to: - -1. **Receive Staking Rewards**: Validators get network rewards for performing their duties on the Ethereum blockchain (note: incorrectly or not performing duties incurs penalties). -2. **Support the Network**: By running a validator, you actively contribute to the decentralization and security of the Ethereum network. Validators play a crucial role in reaching consensus and validating transactions, which enhances the network's reliability and resilience. -3. **Learn and Engage with the community**: Operating a validator node provides valuable insights into blockchain technology and consensus mechanisms. Through hands-on experience, individuals can deepen their understanding of Ethereum's inner workings. Moreover, it provides an opportunity to engage with the Ethereum community, share knowledge, and contribute to the network's development. diff --git a/faq/main-2.md b/faq/main-2.md deleted file mode 100644 index 21c6b4a8..00000000 --- a/faq/main-2.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: What is required to be a Node Operator in CSM? ---- - -Node operation in CSM involves a long-term commitment to Ethereum's decentralization. Responsibilities include: - -- **Hardware Setup**: Setting up a computer that meets the system requirements for running validator nodes. -- **Configuration**: Properly configuring nodes and validators, ensuring they are in sync with the Ethereum blockchain and other network participants. -- **Security Measures**: Implementing robust security measures to safeguard against external threats and internal vulnerabilities. -- **Maintenance**: Sustaining ongoing maintenance throughout the validators' lifespan, which involves monitoring performance, troubleshooting issues, and applying necessary updates. diff --git a/faq/main-3.md b/faq/main-3.md deleted file mode 100644 index 32d58fae..00000000 --- a/faq/main-3.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: What do node operators receive in CSM? ---- - -Node operators benefit from: - -- **Daily Bond Rebase**: The collateral for CSM NOs is eligible for [rewards through stETH's rebase](https://help.lido.fi/en/articles/5230610-what-is-steth), even before validator activation. -- **Socialized Rewards**: Rewards are smoothed across the largest validator set, mitigating volatility. This means that even in the event of small outages or disruptions, node operators can still receive rewards, reducing the risk of rewards loss. diff --git a/faq/main-4.md b/faq/main-4.md deleted file mode 100644 index 72d4d148..00000000 --- a/faq/main-4.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: What are the risks of running a validator? ---- - -Node operators face several risks, including: - -1. **Technical Risk**: Maintaining reliable and secure hardware and software setups is essential. Any technical failure or vulnerability in the validator setup could lead to penalties. -2. **Penalties for Misbehavior**: Validators can be penalized for various reasons, such as going offline or attempting to manipulate the network. -3. **Market Risk**: The value of ETH can fluctuate significantly, impacting the value of the validators' staked ETH. -4. **Network Risk**: Validators are part of a decentralized network, and the security and stability of the Ethereum network as a whole can affect individual validators. Events such as network attacks or protocol upgrades may impact validator operations, leading to potential disruptions or losses. -5. **Operational Risk**: Validators require ongoing maintenance and monitoring to ensure smooth operation. Any operational issues, such as hardware failures or connectivity issues, could disrupt validator performance and result in rewards losses. -6. **Slashing Risk**: Validators can be slashed, meaning they lose a portion of their staked ETH, for violating network rules or behaving maliciously. Slashing can occur due to actions such as double signing or failing to validate correctly, resulting in significant penalties. diff --git a/faq/main-5.md b/faq/main-5.md deleted file mode 100644 index 68b4053b..00000000 --- a/faq/main-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How does CSM work? ---- - -Refer to [the CSM blog post](https://blog.lido.fi/lido-community-staking-an-overview/) for an overview, or [the CSM page](https://operatorportal.lido.fi/modules/community-staking-module) for a more detailed explanation of its mechanics and functionalities. diff --git a/faq/main-6.md b/faq/main-6.md deleted file mode 100644 index e233beed..00000000 --- a/faq/main-6.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: What makes CSM unique? ---- - -CSM provides several unique features to attract and benefit community stakers: - -- **Rewards Smoothing**: Rewards, including Execution Layer (EL) rewards and MEV, are smoothed with other modules to provide more stable rewards comparable to operating validators solo. -- **Low Bond Requirement**: A low bond for node operators makes participation more accessible to a broader range of prospective operators. -- **Exclusive Use of ETH (stETH)**: CSM exclusively uses ETH ((w)stETH) for bond and rewards, eliminating the need for other assets and simplifying the process for node operators. The bond can be submitted as ETH, wstETH, or stETH, and both bond and rewards can be withdrawn in any of the three forms (withdrawals in the form of ETH follow the [normal Lido on Ethereum unstaking process](https://help.lido.fi/en/articles/7858323-how-do-i-unstake-my-steth)). -- **Enhanced User Experience**: Accessible through a multitude of options -- from a web UI to integrations with Dappnode, Stereum, Eth-Docker, Sedge, Stereum, CoinPillar, etc., CSM offers a leading user-friendly experience, with reduced gas fees for on-chain operations and simplified transactions for joining and claiming rewards. -- **Higher Reward Potential**: Node operators are potentially able to earn more rewards compared to vanilla solo staking, making CSM an attractive option for operators looking to run more validators to earn rewards. diff --git a/faq/main-7.md b/faq/main-7.md deleted file mode 100644 index d8d42774..00000000 --- a/faq/main-7.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: false ---- - -The initial bond requirement for the first validator for the mainnet is 2.4 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -The amount for the second and subsequent validators is 1.3 stETH - -For the mainnet, the values for the bond curve are the following: - -![curve.png](/assets/mainnet-curve-common.png) diff --git a/faq/main-7a.md b/faq/main-7a.md deleted file mode 100644 index 77dd1c74..00000000 --- a/faq/main-7a.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: true ---- - -The initial bond requirement for the first validator for the mainnet is 2.4 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -The amount for the second and subsequent validators is 1.3 stETH - -For the mainnet, the values for the bond curve are the following: - -![curve.png](/assets/mainnet-curve-ea.png) diff --git a/faq/main-8.md b/faq/main-8.md deleted file mode 100644 index 5e3e9e79..00000000 --- a/faq/main-8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How can I get help? ---- - -For community assistance, join the "CSM-mainnet" channel on the [Lido Discord server](https://discord.com/invite/lido) to seek advice and guidance. diff --git a/faq/roles-1.md b/faq/roles-1.md deleted file mode 100644 index 430183f7..00000000 --- a/faq/roles-1.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: What are rewards and Manager Addresses? ---- - -There are two addresses associated with your Node Operator that have different scope of responsibilities for managing your Node Operator. - -The Rewards Address is used for: - -- Claiming bond and rewards -- Adding extra bond amount -- Proposing a new Rewards Address -- Resetting the Manager Address to the current Rewards Address - -The Manager Address is used for: - -- Adding new keys -- Removing existing keys -- Adding extra bond amount -- Claiming bond and rewards to the Rewards Address -- Covering locked bond -- Proposing a new Manager Address - -Read more about addresses management [here](https://operatorportal.lido.fi/modules/community-staking-module#block-d3ad2b2bd3994a06b19dccc0794ac8d6). diff --git a/faq/roles-2.md b/faq/roles-2.md deleted file mode 100644 index 348752d1..00000000 --- a/faq/roles-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Why should these addresses be different? ---- - -It's recommended to use different addresses for security reasons. For example, a hot wallet may be used for the Manager Address to simplify daily operations, while a cold wallet (or something like a Safe) is preferable for the Rewards Address to enhance security. - -Read more about addresses management [here](https://operatorportal.lido.fi/modules/community-staking-module#block-d3ad2b2bd3994a06b19dccc0794ac8d6). diff --git a/faq/roles-3.md b/faq/roles-3.md deleted file mode 100644 index 893ec291..00000000 --- a/faq/roles-3.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How to accept a change in address request? ---- - -To accept a change in address request, connect to the CSM widget with the new address, navigate to the "Roles" → "Inbox requests" tab, select and accept the request, and confirm the transaction in your wallet. Changes are made once the transaction is processed. diff --git a/faq/roles-4.md b/faq/roles-4.md deleted file mode 100644 index 1734995e..00000000 --- a/faq/roles-4.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: What to do if the change is submitted to a wrong address? ---- - -If a role change was submitted to the wrong address, the change can be revoked. For Rewards Address changes, navigate to "Roles" → "Rewards Address" → "Revoke". For Manager Address changes, go to "Roles" → "Manager Address" → "Revoke" diff --git a/faq/roles-5.md b/faq/roles-5.md deleted file mode 100644 index 90b335a5..00000000 --- a/faq/roles-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: What happens to rewards after changing the Rewards Address? ---- - -Rewards claimed to the previous Rewards Address remain there. After changing the Rewards Address, all rewards and excess bond accumulated on the bond balance can be claimed to the new Rewards Address. In the event of validator withdrawal, upon claiming of the bond, it would also be returned to the new Rewards Address. diff --git a/faq/testnet-bond-1.md b/faq/testnet-bond-1.md deleted file mode 100644 index f4cc4ef4..00000000 --- a/faq/testnet-bond-1.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: What rewards do I get in CSM? ---- - -When CSM operators use the Lido protocol to run validators, they can receive two types of rewards: - -- **Node Operator rewards**: a share of rewards from staker locked stake amount, currently calculated pro-rata based on validators operated as a share of total protocol validators, with [possible reductions for bad performance](https://operatorportal.lido.fi/modules/community-staking-module#block-c6dc8d00f13243fcb17de3fa07ecc52c). -- **Bond rebase**: staking rewards pertaining to the bonded tokens (stETH). diff --git a/faq/testnet-bond-2.md b/faq/testnet-bond-2.md deleted file mode 100644 index 1697d259..00000000 --- a/faq/testnet-bond-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: How often do I get rewards? ---- - -**Node Operator rewards** on testnet are calculated and made claimable by the CSM Oracle **every 7 days**. Rewards do not have to be claimed during every reporting frame, and can be left to accumulate to be claimed later. - -**Bond rebase part** of the rewards come from stETH being a rebasing token and the bond being stored in stETH. After each Accounting Oracle report that happens on testnet **every 12 epochs (1hr 20min)**, the share rate changes. Hence, the same amount of stETH shares will now be equal to a bigger stETH token balance. diff --git a/faq/testnet-bond-3.md b/faq/testnet-bond-3.md deleted file mode 100644 index de49ca7e..00000000 --- a/faq/testnet-bond-3.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Why didn’t I get rewards? -anchor: why-did-not-i-get-rewards ---- - -There are two main reasons of you getting no reward within a frame: - -1. If your validator’s performance was below the threshold within the CSM Performance Oracle frame (7 days for testnet) the validator does not receive rewards for the given frame. Read more about [the CSM Performance Oracle](https://operatorportal.lido.fi/modules/community-staking-module#block-c6dc8d00f13243fcb17de3fa07ecc52c). -2. [Your Node Operator has stuck keys](https://operatorportal.lido.fi/modules/community-staking-module#block-0ed61a4c0a5a439bbb4be20e814b4e38) due to not exiting a validator requested for exit timely. diff --git a/faq/testnet-bond-4.md b/faq/testnet-bond-4.md deleted file mode 100644 index 4991f37c..00000000 --- a/faq/testnet-bond-4.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Why add a bond? ---- - -Adding bond is a prevention measure to avoid Exit Request for your validators if they became unbonded. [Unbonded validators](https://docs.lido.fi/staking-modules/csm/guides/unbonded-validators) appear if the Node Operator's bond is no longer sufficient to cover all the validator keys uploaded to CSM by the Node Operator. - -If a [penalty](https://operatorportal.lido.fi/modules/community-staking-module#block-3951aa72ba1e471bafe95b40fef65d2b) was already applied, there is a relatively short period of time until the next VEBO report, which most likely will contain a validator Exit Request. During this period in between penalty application and the next VEBO report, Node Operators must top up bond to avoid Exit Requests for their validator(s). - -**Warning:** If the unbonded validator has already been requested to exit, Node Operators can only exit it. The bond top-up after the Exit Request will not reverse the Exit Request. diff --git a/faq/testnet-bond-5.md b/faq/testnet-bond-5.md deleted file mode 100644 index 90af7696..00000000 --- a/faq/testnet-bond-5.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to claim ETH using a withdrawal NFT -anchor: how-to-claim-eth ---- - -Claiming bond and rewards in a form of ETH constitutes an stETH withdrawal process (unstake). - -The withdrawal process consists of several steps you need to do: - -- **Submit a withdrawal request** by choosing ETH as a token for bond/rewards claim. As a result of this step, you will receive a withdrawal NFT. -- **Claim your ETH** after request fulfilment. The fulfilment process takes 1-5 days (or longer), [depending on a variety of factors](https://help.lido.fi/en/articles/7858315-how-long-does-an-ethereum-withdrawal-take). To know if your ETH is ready to be claimed you, can check its status on the [Claim page](https://stake-holesky.testnet.fi/withdrawals/claim). If your request is marked as “**Ready to claim**”, it is time for you to get your ETH back. - -For more information about withdrawals, [follow the page](https://help.lido.fi/en/collections/3993867-ethereum-withdrawals). diff --git a/faq/testnet-keys-1.md b/faq/testnet-keys-1.md deleted file mode 100644 index 1e5732bf..00000000 --- a/faq/testnet-keys-1.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How to set up a validator for CSM testnet? ---- - -A detailed guide on preparing all the validation tools for CSM can be found [here](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm). - -A shorter flow of setting up a CSM validator for **testnet** looks as follows: - -1. [Generate new validator keys](https://dvt-homestaker.stakesaurus.com/keystore-generation-and-mev-boost/validator-key-generation) setting the `withdrawal_address` to the [Lido Withdrawal Vault](https://holesky.etherscan.io/address/0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9) on **Holesky:** [`0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9`](https://holesky.etherscan.io/address/0xF0179dEC45a37423EAD4FaD5fCb136197872EAd9) and specify the deposit amount of 32 ETH (do **NOT** make a deposit) -2. [Configure your validator client](https://dvt-homestaker.stakesaurus.com/native-solo-staking-setup/validator-client-setup) (and/or beacon node) setting the `fee_recipient` flag to the designated fee recipient address (Lido Execution Layer Rewards Vault) on **Holesky:** [`0xE73a3602b99f1f913e72F8bdcBC235e206794Ac8`](https://holesky.etherscan.io/address/0xE73a3602b99f1f913e72F8bdcBC235e206794Ac8) and import the newly generated CSM keystores -3. [Configure your MEV-Boost service](https://dvt-homestaker.stakesaurus.com/keystore-generation-and-mev-boost/set-up-and-configure-mev-boost). Do not set the `min-bid` flag (or set 0) and set the `relay` flags only to [the list of designated MEV relays for Lido CSM on **Holesky**](https://enchanted-direction-844.notion.site/6d369eb33f664487800b0dedfe32171e?v=985cb7e521de43d78c67b7ad29adec84) -4. [Upload the newly generated deposit data](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/upload-remove-view-validator-keys) file pertaining to your CSM keystores onto [the Lido CSM Widget](https://csm.testnet.fi/) and provide the required bond amount in Holesky ETH/stETH/wstETH. Before uploading, make sure that nodes are synced, running, and ready for the validator activation. -5. Wait for your CSM validator keys to be deposited through the protocol and make sure your node remains online in the meantime! diff --git a/faq/testnet-keys-10.md b/faq/testnet-keys-10.md deleted file mode 100644 index 978d3d64..00000000 --- a/faq/testnet-keys-10.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: When does a validator become withdrawn? -anchor: when-validator-become-withdrawn ---- - -On the Ethereum network, a validator can be withdrawn after successfully exiting from the consensus layer, but the exact timing of withdrawal depends on several factors related to Ethereum protocol mechanics: - -1. **Exit Queue**: When a validator initiates an exit, it enters an exit queue. The time required to exit depends on the number of validators exiting and the churn limit (the number of validators allowed to exit or enter per epoch). -2. **Withdrawal Process**: After exiting the active validator set, the validator enters a withdrawable state. This state is determined by the withdrawable epoch, which is set to the exit epoch + a minimum delay of 256 epochs (~27 hours). -3. **Finalization of Withdrawal**: Once the withdrawable epoch is reached, the validator balance will be transferred to the validator's withdrawal credentials (in the case of the Lido protocol, the Lido Withdrawal Vault) within the next iteration of the Consensus Layer withdrawal sweep cycle. How long this takes depends on the validator's position in the overall sweep cycle, and time difference between the withdrawable epoch and when its turn will come to be swept. Once the withdrawal has occurred, the fact of the withdrawal can be reported to CSM permissionlessly. Once that occurs, the part of the Node Operator’s bond used for this validator is released. At this point, the Node Operator can claim the bond on the Bond & Rewards Claim tab. diff --git a/faq/testnet-keys-11.md b/faq/testnet-keys-11.md deleted file mode 100644 index 88e7c56c..00000000 --- a/faq/testnet-keys-11.md +++ /dev/null @@ -1,6 +0,0 @@ ---- -title: What is a referrer? -onlyWithReferrer: true ---- - -A referrer is a software provider specializing in node/validator setup that integrated CSM into their tools. When a referrer directs solo stakers to join CSM via its tool, these Node Operators are marked as being referred from this provider. It doesn’t affect the Node Operators rewards in any way and is used just for the funnel-tracking purposes. diff --git a/faq/testnet-keys-12.md b/faq/testnet-keys-12.md deleted file mode 100644 index 1b15238d..00000000 --- a/faq/testnet-keys-12.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: What to do in case of technical issues? ---- - -For community assistance, join the "[CSM-testnet](https://discord.com/channels/761182643269795850/1255114351120089148)" channel on the [Lido Discord server](https://discord.com/invite/lido) to seek advice and guidance. diff --git a/faq/testnet-keys-13.md b/faq/testnet-keys-13.md deleted file mode 100644 index 2dd0f972..00000000 --- a/faq/testnet-keys-13.md +++ /dev/null @@ -1,18 +0,0 @@ ---- -title: What is the CSM Stake Share Limit? -anchor: stake-share-limit ---- - -The stake share limit is a parameter defined for each Staking Module based on its risk profile. It determines the percentage of the total stake in the Lido Protocol that can be allocated to the module. Currently, the stake share limit for CSM is set at 15%. Once CSM reaches its stake share limit, new keys can still be uploaded, but deposits to these keys may take a very long time (e.g. months), if they are deposited to at all. These factors affect the possibility of new deposits to your uploaded keys: - -- The number of keys already in the deposit queue, and the position of your keys in this queue -- The number of keys that will exit from CSM -- Changes in the total volume of stake in the Lido Protocol (both net flows as well as whether overall Lido protocol stake increases or not) - -In other words, if keys had not been deposited to before CSM reached its limit, they may still be deposited to later if: - -- The overall stake volume in the Lido Protocol increases -- Keys exit from CSM, freeing up space for new keys -- The DAO decides to increase CSM's stake share limit - -While keys are awaiting deposit, Node Operators continue to receive daily bond rewards based on the bond they submitted. However, they do not receive Node Operator rewards, as the keys remain inactive until they are fully deposited. diff --git a/faq/testnet-keys-2.md b/faq/testnet-keys-2.md deleted file mode 100644 index fa478fde..00000000 --- a/faq/testnet-keys-2.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: Why upload a bond? ---- - -Submitting a bond serves as a risk mitigation measure for both the Ethereum network and the Lido protocol. - -There are several major reasons for a CSM Node Operator's bond to be penalized, including: - -- **The validator has been slashed.** In this case, the initial (minimal) slashing penalty is confiscated. `Penalty amount` = `1 ETH (EFFECTIVE_BALANCE / 32)`; -- **The operator has stolen EL rewards (MEV)**. `Penalty amount` = `amount stolen` + `fixed stealing fine`; -- **The validator's withdrawal balance is less than 32 ETH**. `Penalty amount` = `32` - `validator's withdrawal balance.` diff --git a/faq/testnet-keys-3.md b/faq/testnet-keys-3.md deleted file mode 100644 index a4c6e0db..00000000 --- a/faq/testnet-keys-3.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: false -anchor: how-bond-is-calculated ---- - -The initial bond requirement for the first validator for the testnet is 2 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -Subsequent bond amounts depend on the total number of validators operated by the node operator and follow a specific function known as the “[bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf)”, which adjusts the bond requirement based on the operator's validator count. - -For the testnet, the values for the bond curve are the following: - -![curve.png](/assets/curve-common.png) diff --git a/faq/testnet-keys-3a.md b/faq/testnet-keys-3a.md deleted file mode 100644 index f1ad7a06..00000000 --- a/faq/testnet-keys-3a.md +++ /dev/null @@ -1,13 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: true -anchor: how-bond-is-calculated ---- - -The initial bond requirement for the first validator for the testnet is 2 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -Subsequent bond amounts depend on the total number of validators operated by the node operator and follow a specific function known as the “[bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf)”, which adjusts the bond requirement based on the operator's validator count. - -For the testnet, the values for the bond curve are the following: - -![curve.png](/assets/curve-ea.png) diff --git a/faq/testnet-keys-4.md b/faq/testnet-keys-4.md deleted file mode 100644 index 731c6ded..00000000 --- a/faq/testnet-keys-4.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: What is the bond curve? -earlyAdoption: false ---- - -[The bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf) is a function that determines the amount of bond required for each subsequent validator operated by the node operator. For [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), a unique bond curve function is applied to incentivize early participation. - -For the testnet, the values for the bond curve are the following: - -![curve.png](/assets/curve-common.png) diff --git a/faq/testnet-keys-4a.md b/faq/testnet-keys-4a.md deleted file mode 100644 index 5b43be9b..00000000 --- a/faq/testnet-keys-4a.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: What is the bond curve? -earlyAdoption: true ---- - -[The bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf) is a function that determines the amount of bond required for each subsequent validator operated by the node operator. For [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), a unique bond curve function is applied to incentivize early participation. - -For the testnet, the values for the bond curve are the following: - -![curve.png](/assets/curve-ea.png) diff --git a/faq/testnet-keys-5.md b/faq/testnet-keys-5.md deleted file mode 100644 index 8539e45a..00000000 --- a/faq/testnet-keys-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Difference between bond types (ETH, stETH, wstETH)? ---- - -Bonds are stored in the form of stETH to so that participation as a Node Operator is more capital efficient than if the bond were un-staked (or could only be staked if sufficient deposits to fill the submitted validators were present). While node operators can submit bond in ETH, stETH, or wstETH, any token other than stETH is converted to stETH for consistency in bond format. diff --git a/faq/testnet-keys-6.md b/faq/testnet-keys-6.md deleted file mode 100644 index 0c2bddda..00000000 --- a/faq/testnet-keys-6.md +++ /dev/null @@ -1,16 +0,0 @@ ---- -title: When does a validator become active? -anchor: when-validator-become-active ---- - -After key submission, and if keys have been successfully validated, two actions are required for a validator to be activated: - -1. **Deposit by Lido Protocol**: The time to deposit a validator is unpredictable and depends on factors such as total stake inflows and outflows, gas considerations, module shares, CSM deposit queue size, and the Node Operator's place in the queue. - - You can subscribe to [the important CSM events](https://docs.lido.fi/staking-modules/csm/guides/events) to stay notified about your validator being deposited to. - - Read more information about the deposits flow [here](https://operatorportal.lido.fi/modules/community-staking-module#block-90b8ff95edc64cf7a051584820219616). - -2. **Activation on Ethereum Network**: Once deposited, the validator enters the Beacon Chain activation queue. The time to activation depends on the total number of validators in the queue awaiting activation and the rate of queue processing, which varies based on the total number of active Ethereum validators. - - You can check if the keys are activated on the [Keys tab](https://csm.testnet.fi/keys) or on [beaconcha.in](http://beaconcha.in/) diff --git a/faq/testnet-keys-7.md b/faq/testnet-keys-7.md deleted file mode 100644 index 2049a4e0..00000000 --- a/faq/testnet-keys-7.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Why pay for key deletion? ---- - -Key deletion incurs a removal fee of 0.05 ETH, which is deducted from the Node Operator's bond per each deleted key to cover the maximal possible operational costs associated with the queue processing. This fee is intended to protect the module from potential DoS attacks by malicious actors who could clog the queue with empty slots by adding and removing keys, and covers the maximal possible operational costs associated with the queue processing. The fee discourages misuse, keeping the system clear of invalid keys or keys that don’t end up being deposited to. diff --git a/faq/testnet-keys-8.md b/faq/testnet-keys-8.md deleted file mode 100644 index 79c65c68..00000000 --- a/faq/testnet-keys-8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Can't see the key for deletion? ---- - -Only keys that have not been deposited yet can be deleted. If a key has already been deposited, the only way to retrieve the bond is [to exit the validator on the Consensus Layer (CL)](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/exiting-csm-validators). Once withdrawn, the node operator can claim the excess bond. diff --git a/faq/testnet-keys-9.md b/faq/testnet-keys-9.md deleted file mode 100644 index c1361d38..00000000 --- a/faq/testnet-keys-9.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How to stop validating in CSM? ---- - -Exiting CSM validator keys works the same way as exiting solo staking validator keys. The guide on how to exit the validator can be found [here](https://dvt-homestaker.stakesaurus.com/bonded-validators-setup/lido-csm/exiting-csm-validators#manual-exit). diff --git a/faq/testnet-locked-1.md b/faq/testnet-locked-1.md deleted file mode 100644 index ea31fa37..00000000 --- a/faq/testnet-locked-1.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Why is the bond locked? ---- - -Bond may be locked in the case of delayed penalties, typically for MEV stealing event reported by a dedicated committee. This measure ensures that node operators are held accountable for any misbehavior or rule violations. diff --git a/faq/testnet-locked-2.md b/faq/testnet-locked-2.md deleted file mode 100644 index 4aeaf545..00000000 --- a/faq/testnet-locked-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: How to unlock the bond? ---- - -To unlock the bond, the penalty amount, which includes the stolen amount and a fixed stealing fine, must be compensated on the "Locked bond" tab. This action can be performed from the Manager Address of the Node Operator. - -If there are disputes regarding the penalty, node operators can start a public discussion about the penalty applied on the Lido research forum under the [CSM Support](https://research.lido.fi/c/csm-support/21) category. diff --git a/faq/testnet-locked-3.md b/faq/testnet-locked-3.md deleted file mode 100644 index d811e26f..00000000 --- a/faq/testnet-locked-3.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Consequences of not compensating? ---- - -In case of refusal to compensate the penalty, a protocol rule violation occurs which results in the reset of all node operator benefits. The locked bond is burned to compensate all stETH holders for the rewards stolen. diff --git a/faq/testnet-main-1.md b/faq/testnet-main-1.md deleted file mode 100644 index d543ade1..00000000 --- a/faq/testnet-main-1.md +++ /dev/null @@ -1,9 +0,0 @@ ---- -title: Why run an Ethereum validator? ---- - -Running an Ethereum validator allows one to: - -1. **Receive Staking Rewards**: Validators get network rewards for performing their duties on the Ethereum blockchain (note: incorrectly or not performing duties incurs penalties). -2. **Support the Network**: By running a validator, you actively contribute to the decentralization and security of the Ethereum network. Validators play a crucial role in reaching consensus and validating transactions, which enhances the network's reliability and resilience. -3. **Learn and Engage with the community**: Operating a validator node provides valuable insights into blockchain technology and consensus mechanisms. Through hands-on experience, individuals can deepen their understanding of Ethereum's inner workings. Moreover, it provides an opportunity to engage with the Ethereum community, share knowledge, and contribute to the network's development. diff --git a/faq/testnet-main-2.md b/faq/testnet-main-2.md deleted file mode 100644 index 21c6b4a8..00000000 --- a/faq/testnet-main-2.md +++ /dev/null @@ -1,10 +0,0 @@ ---- -title: What is required to be a Node Operator in CSM? ---- - -Node operation in CSM involves a long-term commitment to Ethereum's decentralization. Responsibilities include: - -- **Hardware Setup**: Setting up a computer that meets the system requirements for running validator nodes. -- **Configuration**: Properly configuring nodes and validators, ensuring they are in sync with the Ethereum blockchain and other network participants. -- **Security Measures**: Implementing robust security measures to safeguard against external threats and internal vulnerabilities. -- **Maintenance**: Sustaining ongoing maintenance throughout the validators' lifespan, which involves monitoring performance, troubleshooting issues, and applying necessary updates. diff --git a/faq/testnet-main-3.md b/faq/testnet-main-3.md deleted file mode 100644 index 32d58fae..00000000 --- a/faq/testnet-main-3.md +++ /dev/null @@ -1,8 +0,0 @@ ---- -title: What do node operators receive in CSM? ---- - -Node operators benefit from: - -- **Daily Bond Rebase**: The collateral for CSM NOs is eligible for [rewards through stETH's rebase](https://help.lido.fi/en/articles/5230610-what-is-steth), even before validator activation. -- **Socialized Rewards**: Rewards are smoothed across the largest validator set, mitigating volatility. This means that even in the event of small outages or disruptions, node operators can still receive rewards, reducing the risk of rewards loss. diff --git a/faq/testnet-main-4.md b/faq/testnet-main-4.md deleted file mode 100644 index 72d4d148..00000000 --- a/faq/testnet-main-4.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: What are the risks of running a validator? ---- - -Node operators face several risks, including: - -1. **Technical Risk**: Maintaining reliable and secure hardware and software setups is essential. Any technical failure or vulnerability in the validator setup could lead to penalties. -2. **Penalties for Misbehavior**: Validators can be penalized for various reasons, such as going offline or attempting to manipulate the network. -3. **Market Risk**: The value of ETH can fluctuate significantly, impacting the value of the validators' staked ETH. -4. **Network Risk**: Validators are part of a decentralized network, and the security and stability of the Ethereum network as a whole can affect individual validators. Events such as network attacks or protocol upgrades may impact validator operations, leading to potential disruptions or losses. -5. **Operational Risk**: Validators require ongoing maintenance and monitoring to ensure smooth operation. Any operational issues, such as hardware failures or connectivity issues, could disrupt validator performance and result in rewards losses. -6. **Slashing Risk**: Validators can be slashed, meaning they lose a portion of their staked ETH, for violating network rules or behaving maliciously. Slashing can occur due to actions such as double signing or failing to validate correctly, resulting in significant penalties. diff --git a/faq/testnet-main-5.md b/faq/testnet-main-5.md deleted file mode 100644 index 68b4053b..00000000 --- a/faq/testnet-main-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How does CSM work? ---- - -Refer to [the CSM blog post](https://blog.lido.fi/lido-community-staking-an-overview/) for an overview, or [the CSM page](https://operatorportal.lido.fi/modules/community-staking-module) for a more detailed explanation of its mechanics and functionalities. diff --git a/faq/testnet-main-6.md b/faq/testnet-main-6.md deleted file mode 100644 index e233beed..00000000 --- a/faq/testnet-main-6.md +++ /dev/null @@ -1,11 +0,0 @@ ---- -title: What makes CSM unique? ---- - -CSM provides several unique features to attract and benefit community stakers: - -- **Rewards Smoothing**: Rewards, including Execution Layer (EL) rewards and MEV, are smoothed with other modules to provide more stable rewards comparable to operating validators solo. -- **Low Bond Requirement**: A low bond for node operators makes participation more accessible to a broader range of prospective operators. -- **Exclusive Use of ETH (stETH)**: CSM exclusively uses ETH ((w)stETH) for bond and rewards, eliminating the need for other assets and simplifying the process for node operators. The bond can be submitted as ETH, wstETH, or stETH, and both bond and rewards can be withdrawn in any of the three forms (withdrawals in the form of ETH follow the [normal Lido on Ethereum unstaking process](https://help.lido.fi/en/articles/7858323-how-do-i-unstake-my-steth)). -- **Enhanced User Experience**: Accessible through a multitude of options -- from a web UI to integrations with Dappnode, Stereum, Eth-Docker, Sedge, Stereum, CoinPillar, etc., CSM offers a leading user-friendly experience, with reduced gas fees for on-chain operations and simplified transactions for joining and claiming rewards. -- **Higher Reward Potential**: Node operators are potentially able to earn more rewards compared to vanilla solo staking, making CSM an attractive option for operators looking to run more validators to earn rewards. diff --git a/faq/testnet-main-7.md b/faq/testnet-main-7.md deleted file mode 100644 index f1e10d2c..00000000 --- a/faq/testnet-main-7.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: false ---- - -The initial bond requirement for the first validator for the testnet is 2 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -Subsequent bond amounts depend on the total number of validators operated by the node operator and follow a specific function known as the “[bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf)”, which adjusts the bond requirement based on the operator's validator count. - -For the testnet, the values for the bond curve are the following: - -![curve.png](/assets/curve-common.png) diff --git a/faq/testnet-main-7a.md b/faq/testnet-main-7a.md deleted file mode 100644 index fd008e98..00000000 --- a/faq/testnet-main-7a.md +++ /dev/null @@ -1,12 +0,0 @@ ---- -title: How much bond is needed? -earlyAdoption: true ---- - -The initial bond requirement for the first validator for the testnet is 2 stETH. However, for [Early Adopters](https://operatorportal.lido.fi/modules/community-staking-module#block-ef60a1fa96ae4c7995dd7794de2a3e22), this amount is reduced to 1.5 stETH to incentivize early participation. - -Subsequent bond amounts depend on the total number of validators operated by the node operator and follow a specific function known as the “[bond curve](https://operatorportal.lido.fi/modules/community-staking-module#block-2d1c307d95fc4f8ab7c32b7584f795cf)”, which adjusts the bond requirement based on the operator's validator count. - -For the testnet, the values for the bond curve are the following: - -![curve.png](/assets/curve-ea.png) diff --git a/faq/testnet-main-8.md b/faq/testnet-main-8.md deleted file mode 100644 index 35c06f54..00000000 --- a/faq/testnet-main-8.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How can I get help? ---- - -For community assistance, join the "[CSM-testnet](https://discord.com/channels/761182643269795850/1255114351120089148)" channel on the [Lido Discord server](https://discord.com/invite/lido) to seek advice and guidance. diff --git a/faq/testnet-roles-1.md b/faq/testnet-roles-1.md deleted file mode 100644 index 430183f7..00000000 --- a/faq/testnet-roles-1.md +++ /dev/null @@ -1,23 +0,0 @@ ---- -title: What are rewards and Manager Addresses? ---- - -There are two addresses associated with your Node Operator that have different scope of responsibilities for managing your Node Operator. - -The Rewards Address is used for: - -- Claiming bond and rewards -- Adding extra bond amount -- Proposing a new Rewards Address -- Resetting the Manager Address to the current Rewards Address - -The Manager Address is used for: - -- Adding new keys -- Removing existing keys -- Adding extra bond amount -- Claiming bond and rewards to the Rewards Address -- Covering locked bond -- Proposing a new Manager Address - -Read more about addresses management [here](https://operatorportal.lido.fi/modules/community-staking-module#block-d3ad2b2bd3994a06b19dccc0794ac8d6). diff --git a/faq/testnet-roles-2.md b/faq/testnet-roles-2.md deleted file mode 100644 index 348752d1..00000000 --- a/faq/testnet-roles-2.md +++ /dev/null @@ -1,7 +0,0 @@ ---- -title: Why should these addresses be different? ---- - -It's recommended to use different addresses for security reasons. For example, a hot wallet may be used for the Manager Address to simplify daily operations, while a cold wallet (or something like a Safe) is preferable for the Rewards Address to enhance security. - -Read more about addresses management [here](https://operatorportal.lido.fi/modules/community-staking-module#block-d3ad2b2bd3994a06b19dccc0794ac8d6). diff --git a/faq/testnet-roles-3.md b/faq/testnet-roles-3.md deleted file mode 100644 index 893ec291..00000000 --- a/faq/testnet-roles-3.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: How to accept a change in address request? ---- - -To accept a change in address request, connect to the CSM widget with the new address, navigate to the "Roles" → "Inbox requests" tab, select and accept the request, and confirm the transaction in your wallet. Changes are made once the transaction is processed. diff --git a/faq/testnet-roles-4.md b/faq/testnet-roles-4.md deleted file mode 100644 index 1734995e..00000000 --- a/faq/testnet-roles-4.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: What to do if the change is submitted to a wrong address? ---- - -If a role change was submitted to the wrong address, the change can be revoked. For Rewards Address changes, navigate to "Roles" → "Rewards Address" → "Revoke". For Manager Address changes, go to "Roles" → "Manager Address" → "Revoke" diff --git a/faq/testnet-roles-5.md b/faq/testnet-roles-5.md deleted file mode 100644 index 90b335a5..00000000 --- a/faq/testnet-roles-5.md +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: What happens to rewards after changing the Rewards Address? ---- - -Rewards claimed to the previous Rewards Address remain there. After changing the Rewards Address, all rewards and excess bond accumulated on the bond balance can be claimed to the new Rewards Address. In the event of validator withdrawal, upon claiming of the bond, it would also be returned to the new Rewards Address. diff --git a/features/accept-invite/accept-invite-form/accept-invite-form-loader.tsx b/features/accept-invite/accept-invite-form/accept-invite-form-loader.tsx index 23ecc861..017f45eb 100644 --- a/features/accept-invite/accept-invite-form/accept-invite-form-loader.tsx +++ b/features/accept-invite/accept-invite-form/accept-invite-form-loader.tsx @@ -1,19 +1,14 @@ import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { AcceptInviteFormInputType, useAcceptInviteFormData } from './context'; +import { FormLoader } from 'shared/hook-form/form-controller'; +import { useAcceptInviteFormData } from './context'; export const AcceptInviteFormLoader: FC = ({ children }) => { - const { isLoading } = useFormState(); - const { loading, invites } = useAcceptInviteFormData(); - const isEmpty = !invites?.length; + const data = useAcceptInviteFormData(); + const isEmpty = !data.invites?.length; return ( - + {children} - + ); }; diff --git a/features/accept-invite/accept-invite-form/accept-invite-form.tsx b/features/accept-invite/accept-invite-form/accept-invite-form.tsx index 4ab778f4..6e07be66 100644 --- a/features/accept-invite/accept-invite-form/accept-invite-form.tsx +++ b/features/accept-invite/accept-invite-form/accept-invite-form.tsx @@ -1,24 +1,26 @@ import { FC, memo } from 'react'; import { AcceptInviteFormInfo } from './accept-invite-form-info'; -import { AcceptInviteFormProvider } from './context'; +import { AcceptInviteDataProvider, AcceptInviteFormProvider } from './context'; import { InviteSelector } from './controls/invite-selector'; import { SubmitButton } from './controls/submit-button'; import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; +import { Form } from 'shared/hook-form/form-controller'; import { AcceptInviteFormLoader } from './accept-invite-form-loader'; export const AcceptInviteForm: FC = memo(() => { return ( - - - - - - - - - - - + + + + +
+ + + + +
+
+
+
); }); diff --git a/features/accept-invite/accept-invite-form/context/accept-invite-data-provider.tsx b/features/accept-invite/accept-invite-form/context/accept-invite-data-provider.tsx new file mode 100644 index 00000000..0fa034c4 --- /dev/null +++ b/features/accept-invite/accept-invite-form/context/accept-invite-data-provider.tsx @@ -0,0 +1,59 @@ +import { + KEY_INVITES, + KEY_OPERATOR_INFO, + useDappStatus, + useInvites, + useNodeOperatorId, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import invariant from 'tiny-invariant'; +import { type AcceptInviteFormNetworkData } from './types'; + +const useAcceptInviteFormNetworkData: NetworkData< + AcceptInviteFormNetworkData +> = () => { + const nodeOperatorId = useNodeOperatorId(); + const { address } = useDappStatus(); + const invitesQuery = useInvites(); + + const invites = invitesQuery.data; + const isInvitesLoading = invitesQuery.isPending; + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([KEY_INVITES, KEY_OPERATOR_INFO]); + }, [invalidate]); + + invariant(address); + + return { + data: { + nodeOperatorId, + invites, + address, + } as AcceptInviteFormNetworkData, + isPending: isInvitesLoading, + revalidate, + }; +}; + +export const useAcceptInviteFormData = useFormData; + +export const AcceptInviteDataProvider: FC = ({ + children, +}) => { + const networkData = useAcceptInviteFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/accept-invite/accept-invite-form/context/accept-invite-form-provider.tsx b/features/accept-invite/accept-invite-form/context/accept-invite-form-provider.tsx index a5da8fdf..43c213f7 100644 --- a/features/accept-invite/accept-invite-form/context/accept-invite-form-provider.tsx +++ b/features/accept-invite/accept-invite-form/context/accept-invite-form-provider.tsx @@ -1,57 +1,41 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, + FormControllerProvider, + useFormDefaultValues, } from 'shared/hook-form/form-controller'; import { AcceptInviteFormNetworkData, type AcceptInviteFormInputType, } from './types'; -import { useAcceptInviteFormNetworkData } from './use-accept-invite-form-network-data'; import { useAcceptInviteSubmit } from './use-accept-invite-submit'; -import { useGetDefaultValues } from './use-get-default-values'; - -export const useAcceptInviteFormData = useFormData; +import { useAcceptInviteValidation } from './use-accept-invite-validation'; export const AcceptInviteFormProvider: FC = ({ children, }) => { - const [networkData, revalidate] = useAcceptInviteFormNetworkData(); + const defaultValues = useFormDefaultValues< + AcceptInviteFormInputType, + AcceptInviteFormNetworkData + >((data) => ({ + invite: data.invites[0], + })); - const asyncDefaultValues = useGetDefaultValues(networkData); + const resolver = useAcceptInviteValidation(); const formObject = useForm({ - defaultValues: asyncDefaultValues, + defaultValues, mode: 'onChange', + resolver, }); - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { acceptInvite } = useAcceptInviteSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType = - useMemo( - () => ({ - onSubmit: acceptInvite, - retryEvent, - }), - [acceptInvite, retryEvent], - ); + const submitter = useAcceptInviteSubmit(); return ( - - - {children} - - + + {children} + ); }; diff --git a/features/accept-invite/accept-invite-form/context/index.ts b/features/accept-invite/accept-invite-form/context/index.ts index 6ff4589e..48bfe379 100644 --- a/features/accept-invite/accept-invite-form/context/index.ts +++ b/features/accept-invite/accept-invite-form/context/index.ts @@ -1,2 +1,3 @@ +export * from './accept-invite-data-provider'; export * from './accept-invite-form-provider'; export * from './types'; diff --git a/features/accept-invite/accept-invite-form/context/types.ts b/features/accept-invite/accept-invite-form/context/types.ts index 3410e337..bbe81a58 100644 --- a/features/accept-invite/accept-invite-form/context/types.ts +++ b/features/accept-invite/accept-invite-form/context/types.ts @@ -1,12 +1,12 @@ -import { Address } from 'wagmi'; -import { LoadingRecord, NodeOperatorInvite } from 'types'; +import { NodeOperatorId, NodeOperatorInvite } from '@lidofinance/lido-csm-sdk'; +import { Address } from 'viem'; export type AcceptInviteFormInputType = { invite?: NodeOperatorInvite; }; export type AcceptInviteFormNetworkData = { - invites?: NodeOperatorInvite[]; + nodeOperatorId?: NodeOperatorId; + invites: NodeOperatorInvite[]; address: Address; - loading: LoadingRecord<'invites'>; }; diff --git a/features/accept-invite/accept-invite-form/context/use-accept-invite-form-network-data.tsx b/features/accept-invite/accept-invite-form/context/use-accept-invite-form-network-data.tsx deleted file mode 100644 index d8de44ec..00000000 --- a/features/accept-invite/accept-invite-form/context/use-accept-invite-form-network-data.tsx +++ /dev/null @@ -1,38 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { useAccount, useInvites } from 'shared/hooks'; -import { type AcceptInviteFormNetworkData } from './types'; -import invariant from 'tiny-invariant'; - -export const useAcceptInviteFormNetworkData = (): [ - AcceptInviteFormNetworkData, - () => Promise, -] => { - const { address } = useAccount(); - const { - data: invites, - initialLoading: isInvitesLoading, - update: updateInvites, - } = useInvites(); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateInvites()]); - }, [updateInvites]); - - const loading = useMemo( - () => ({ - isInvitesLoading, - }), - [isInvitesLoading], - ); - - invariant(address); - - return [ - { - invites, - address, - loading, - }, - revalidate, - ]; -}; diff --git a/features/accept-invite/accept-invite-form/context/use-accept-invite-submit.ts b/features/accept-invite/accept-invite-form/context/use-accept-invite-submit.ts index e742e68c..fa1202aa 100644 --- a/features/accept-invite/accept-invite-form/context/use-accept-invite-submit.ts +++ b/features/accept-invite/accept-invite-form/context/use-accept-invite-submit.ts @@ -1,111 +1,85 @@ import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; -import { ROLES } from 'consts/roles'; -import { useNodeOperatorContext } from 'providers/node-operator-provider'; -import { useCSModuleWeb3, useSendTx } from 'shared/hooks'; +import { + NodeOperatorShortInfo, + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { PATH } from 'consts/urls'; +import { useAppendOperator, useLidoSDK } from 'modules/web3'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { useNavigate } from 'shared/navigate'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; +import invariant from 'tiny-invariant'; import { useTxModalStagesAcceptInvite } from '../hooks/use-tx-modal-stages-accept-invite'; import { AcceptInviteFormInputType, AcceptInviteFormNetworkData, } from './types'; -// TODO: move to hooks -type UseAcceptInviteOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type AcceptInviteMethodParams = { - nodeOperatorId: NodeOperatorId; -}; - -// encapsulates eth/steth/wsteth flows -const useAcceptInviteTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (role: ROLES, params: AcceptInviteMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - switch (role) { - case ROLES.MANAGER: - return { - tx: await CSModuleWeb3.populateTransaction.confirmNodeOperatorManagerAddressChange( - params.nodeOperatorId, - ), - txName: 'confirmNodeOperatorManagerAddressChange', - }; - case ROLES.REWARDS: - return { - tx: await CSModuleWeb3.populateTransaction.confirmNodeOperatorRewardAddressChange( - params.nodeOperatorId, - ), - txName: 'confirmNodeOperatorRewardAddressChange', - }; - } - }, - [CSModuleWeb3], - ); -}; - -export const useAcceptInviteSubmit = ({ - onConfirm, - onRetry, -}: UseAcceptInviteOptions) => { +export const useAcceptInviteSubmit: FormSubmitterHook< + AcceptInviteFormInputType, + AcceptInviteFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesAcceptInvite(); - const { append: appendNO } = useNodeOperatorContext(); - - const getTx = useAcceptInviteTx(); - const sendTx = useSendTx(); + const appendNO = useAppendOperator(); + const n = useNavigate(); - const acceptInvite = useCallback( + return useCallback( async ( - { invite }: AcceptInviteFormInputType, - { address }: AcceptInviteFormNetworkData, - ): Promise => { - invariant(invite, 'Invite is not defined'); + { invite }, + { address, nodeOperatorId, invites }, + { onConfirm, onRetry }, + ) => { + invariant(invite !== undefined, 'Invite is not defined'); try { - txModalStages.sign(invite); - - const tx = await getTx(invite.role, { + const callback: TransactionCallback = async ({ + stage, + payload, + }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign(invite); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending(invite, payload.hash); + break; + case TransactionCallbackStage.DONE: + txModalStages.success({ ...invite, address }, payload.hash); + break; + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + const { result } = await csm.roles.confirmRole({ nodeOperatorId: invite.id, + role: invite.role, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'AcceptInvite signing', - () => sendTx(tx), - ); - - txModalStages.pending(invite, txHash); - - if (typeof tx === 'object') { - await runWithTransactionLogger( - 'AcceptInvite block confirmation', - waitTx, - ); - } - await onConfirm?.(); - txModalStages.success({ ...invite, address }, txHash); + if (result) { + appendNO(result); + } - // TODO: move to onConfirm - appendNO(invite); + if (nodeOperatorId === undefined && invites.length <= 1) { + void n(PATH.HOME); + } return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [getTx, txModalStages, onConfirm, appendNO, sendTx, onRetry], + [csm.roles, appendNO, txModalStages, n], ); - - return { - acceptInvite, - }; }; diff --git a/features/accept-invite/accept-invite-form/context/use-accept-invite-validation.ts b/features/accept-invite/accept-invite-form/context/use-accept-invite-validation.ts new file mode 100644 index 00000000..abb7beee --- /dev/null +++ b/features/accept-invite/accept-invite-form/context/use-accept-invite-validation.ts @@ -0,0 +1,19 @@ +import { + useFormValidation, + ValidationError, +} from 'shared/hook-form/validation'; +import type { + AcceptInviteFormInputType, + AcceptInviteFormNetworkData, +} from './types'; + +export const useAcceptInviteValidation = () => { + return useFormValidation< + AcceptInviteFormInputType, + AcceptInviteFormNetworkData + >('invite', async ({ invite }) => { + if (!invite) { + throw new ValidationError('invite', 'Please select an invite'); + } + }); +}; diff --git a/features/accept-invite/accept-invite-form/context/use-get-default-values.tsx b/features/accept-invite/accept-invite-form/context/use-get-default-values.tsx deleted file mode 100644 index 44d83767..00000000 --- a/features/accept-invite/accept-invite-form/context/use-get-default-values.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { useAwaiter } from 'shared/hooks'; -import { - AcceptInviteFormInputType, - AcceptInviteFormNetworkData, -} from './types'; - -export const useGetDefaultValues = ({ - invites, - loading: { isInvitesLoading }, -}: AcceptInviteFormNetworkData) => { - const values: AcceptInviteFormInputType | undefined = useMemo(() => { - if (isInvitesLoading) return undefined; - return { invite: invites?.[0] }; - }, [invites, isInvitesLoading]); - - const { awaiter } = useAwaiter(values); - - return useCallback(() => awaiter, [awaiter]); -}; diff --git a/features/accept-invite/accept-invite-form/controls/invite-selector.tsx b/features/accept-invite/accept-invite-form/controls/invite-selector.tsx index 9151f551..2be7b8f8 100644 --- a/features/accept-invite/accept-invite-form/controls/invite-selector.tsx +++ b/features/accept-invite/accept-invite-form/controls/invite-selector.tsx @@ -3,12 +3,12 @@ import { InviteButtonsHookForm } from 'shared/hook-form/controls'; import { useAcceptInviteFormData } from '../context'; export const InviteSelector = () => { - const { invites } = useAcceptInviteFormData(); + const { invites } = useAcceptInviteFormData(true); return ( <> Choose request to accept - + ); }; diff --git a/features/accept-invite/accept-invite-form/controls/submit-button.tsx b/features/accept-invite/accept-invite-form/controls/submit-button.tsx index 610ec738..46a0b563 100644 --- a/features/accept-invite/accept-invite-form/controls/submit-button.tsx +++ b/features/accept-invite/accept-invite-form/controls/submit-button.tsx @@ -1,9 +1,5 @@ import { SubmitButtonHookForm } from 'shared/hook-form/controls'; export const SubmitButton = () => { - return ( - - Accept request - - ); + return Accept request; }; diff --git a/features/accept-invite/accept-invite-form/hooks/use-tx-modal-stages-accept-invite.tsx b/features/accept-invite/accept-invite-form/hooks/use-tx-modal-stages-accept-invite.tsx index 3fa25840..1a450b7f 100644 --- a/features/accept-invite/accept-invite-form/hooks/use-tx-modal-stages-accept-invite.tsx +++ b/features/accept-invite/accept-invite-form/hooks/use-tx-modal-stages-accept-invite.tsx @@ -1,4 +1,4 @@ -import { ROLES } from 'consts/roles'; +import { NodeOperatorInvite } from '@lidofinance/lido-csm-sdk'; import { Address } from 'shared/components'; import { DescriptorId, getRoleTitle } from 'shared/node-operator'; import { @@ -9,16 +9,13 @@ import { getGeneralTransactionModalStages, useTransactionModalStage, } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; - -type Props = { id: NodeOperatorId; role: ROLES }; const getTxModalStagesAcceptInvite = ( transitStage: TransactionModalTransitStage, ) => ({ ...getGeneralTransactionModalStages(transitStage), - sign: ({ id, role }: Props) => + sign: ({ id, role }: NodeOperatorInvite) => transitStage( , ), - pending: ({ id, role }: Props, txHash?: string) => + pending: ({ id, role }: NodeOperatorInvite, txHash?: string) => transitStage( , ), - // TODO: "go to dashboard" button success: ( - { id, role, address }: Props & { address: string }, + { id, role, address }: NodeOperatorInvite & { address: string }, txHash?: string, ) => transitStage( diff --git a/features/accept-invite/accept-invite-page.tsx b/features/accept-invite/accept-invite-page.tsx index 4355c9e0..a15355db 100644 --- a/features/accept-invite/accept-invite-page.tsx +++ b/features/accept-invite/accept-invite-page.tsx @@ -1,19 +1,21 @@ import { FC } from 'react'; +import { FAQ_ROLES } from 'faq'; +import { Faq } from 'shared/components'; import { Layout } from 'shared/layout'; import { RolesPageSwitcher } from 'shared/navigate'; import { AcceptInvite } from './accept-invite'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; export const AcceptInvitePage: FC = () => { return ( + ); }; diff --git a/features/accept-invite/accept-invite.tsx b/features/accept-invite/accept-invite.tsx index 224a94e4..8ce6040e 100644 --- a/features/accept-invite/accept-invite.tsx +++ b/features/accept-invite/accept-invite.tsx @@ -1,7 +1,6 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { AcceptInviteForm } from './accept-invite-form'; -import { Faq } from 'shared/components'; export const AcceptInvite = () => { const key = useWeb3Key(); @@ -10,7 +9,6 @@ export const AcceptInvite = () => { - ); }; diff --git a/features/add-bond/add-bond-form/add-bond-form-info.tsx b/features/add-bond/add-bond-form/add-bond-form-info.tsx index c4a942d8..d0595ea8 100644 --- a/features/add-bond/add-bond-form/add-bond-form-info.tsx +++ b/features/add-bond/add-bond-form/add-bond-form-info.tsx @@ -1,10 +1,11 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { DataTable, DataTableRow } from '@lidofinance/lido-ui'; -import { ONE_ETH, TOKENS } from 'consts/tokens'; +import { ONE_ETH } from 'consts/tokens'; import { useWatch } from 'react-hook-form'; import { FormatToken } from 'shared/formatters'; +import { useExchangeRate } from 'shared/hooks'; import { AddBondFormInputType } from './context'; import { useReceiveAmount } from './hooks/use-receive-amount'; -import { useExchangeRate } from 'shared/hooks'; export const AddBondFormInfo = () => { const [token, bondAmount] = useWatch< @@ -15,17 +16,25 @@ export const AddBondFormInfo = () => { }); const receive = useReceiveAmount(bondAmount, token); - const exchange = useExchangeRate(token); + const { data: exchange, isPending: isExchangeLoading } = useExchangeRate(); return ( - - - + + + - {token !== TOKENS.STETH && ( - + {token !== TOKENS.steth && ( + ={' '} - + )} diff --git a/features/add-bond/add-bond-form/add-bond-form.tsx b/features/add-bond/add-bond-form/add-bond-form.tsx index 3c027f96..784abf3d 100644 --- a/features/add-bond/add-bond-form/add-bond-form.tsx +++ b/features/add-bond/add-bond-form/add-bond-form.tsx @@ -1,12 +1,9 @@ import { FC, memo } from 'react'; -import { AddBondFormProvider } from './context'; +import { AddBondDataProvider, AddBondFormProvider } from './context'; import { FormBlock } from 'shared/components'; -import { - BaseFormLoader, - FormControllerStyled, -} from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; import { AddBondFormInfo } from './add-bond-form-info'; import { AmountInput } from './controls/amount-input'; import { Info } from './controls/info'; @@ -15,18 +12,20 @@ import { TokenSelect } from './controls/token-select'; export const AddBondForm: FC = memo(() => { return ( - - - - - - - - - - - - - + + + + +
+ + + + + + +
+
+
+
); }); diff --git a/features/add-bond/add-bond-form/context/add-bond-data-provider.tsx b/features/add-bond/add-bond-form/context/add-bond-data-provider.tsx new file mode 100644 index 00000000..687f4228 --- /dev/null +++ b/features/add-bond/add-bond-form/context/add-bond-data-provider.tsx @@ -0,0 +1,94 @@ +import { + KEY_OPERATOR_BALANCE, + KEY_STAKE_LIMIT, + useCsmStatus, + useEthereumBalance, + useNodeOperatorId, + useOperatorBalance, + useStakeLimit, + useStethBalance, + useWstethBalance, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type AddBondFormNetworkData } from './types'; + +const useAddBondFormNetworkData: NetworkData = () => { + const nodeOperatorId = useNodeOperatorId(); + + const ethBalanceQuery = useEthereumBalance(); + const stethBalanceQuery = useStethBalance(); + const wstethBalanceQuery = useWstethBalance(); + const bondQuery = useOperatorBalance(nodeOperatorId); + const maxStakeEthQuery = useStakeLimit(); + + const ethBalance = ethBalanceQuery.data; + const stethBalance = stethBalanceQuery.data; + const wstethBalance = wstethBalanceQuery.data; + const bond = bondQuery.data; + const maxStakeEth = maxStakeEthQuery.data; + + const isEthBalanceLoading = ethBalanceQuery.isPending; + const isStethBalanceLoading = stethBalanceQuery.isPending; + const isWstethBalanceLoading = wstethBalanceQuery.isPending; + const isBondLoading = bondQuery.isPending; + const isMaxStakeEthLoading = maxStakeEthQuery.isPending; + + const { data: status, isPending: isStatusLoading } = useCsmStatus(); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + ethBalanceQuery.queryKey, + stethBalanceQuery.queryKey, + wstethBalanceQuery.queryKey, + KEY_OPERATOR_BALANCE, + KEY_STAKE_LIMIT, + ]); + }, [ + invalidate, + ethBalanceQuery.queryKey, + stethBalanceQuery.queryKey, + wstethBalanceQuery.queryKey, + ]); + + const isPending = + isEthBalanceLoading || + isStethBalanceLoading || + isWstethBalanceLoading || + isBondLoading || + isMaxStakeEthLoading || + isStatusLoading; + + return { + data: { + nodeOperatorId, + ethBalance, + stethBalance, + wstethBalance, + bond, + maxStakeEth, + isPaused: status?.isPausedAccounting, + } as AddBondFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useAddBondFormData = useFormData; + +export const AddBondDataProvider: FC = ({ children }) => { + const networkData = useAddBondFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/add-bond/add-bond-form/context/add-bond-form-provider.tsx b/features/add-bond/add-bond-form/context/add-bond-form-provider.tsx index fbe09441..cc3034d2 100644 --- a/features/add-bond/add-bond-form/context/add-bond-form-provider.tsx +++ b/features/add-bond/add-bond-form/context/add-bond-form-provider.tsx @@ -1,59 +1,30 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, -} from 'shared/hook-form/form-controller'; -import { AddBondFormNetworkData, type AddBondFormInputType } from './types'; -import { useAddBondFormNetworkData } from './use-add-bond-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { AddBondUpdater } from './add-bond-updater'; +import { type AddBondFormInputType } from './types'; +import { useAddBondDefaultValues } from './use-add-bond-default-values'; import { useAddBondSubmit } from './use-add-bond-submit'; import { useAddBondValidation } from './use-add-bond-validation'; -import { useFormRevalidate } from './use-form-revalidate'; -import { useGetDefaultValues } from './use-get-default-values'; - -export const useAddBondFormData = useFormData; export const AddBondFormProvider: FC = ({ children }) => { - const [networkData, revalidate] = useAddBondFormNetworkData(); - const validationResolver = useAddBondValidation(networkData); - const asyncDefaultValues = useGetDefaultValues(networkData); + const resolver = useAddBondValidation(); + const defaultValues = useAddBondDefaultValues(); const formObject = useForm({ - defaultValues: asyncDefaultValues, - resolver: validationResolver, + defaultValues, + resolver, mode: 'onChange', }); - useFormRevalidate(formObject); - - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { addBond } = useAddBondSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - AddBondFormInputType, - AddBondFormNetworkData - > = useMemo( - () => ({ - onSubmit: addBond, - retryEvent, - }), - [addBond, retryEvent], - ); + const submitter = useAddBondSubmit(); return ( - - - {children} - - + + + {children} + ); }; diff --git a/features/add-bond/add-bond-form/context/add-bond-updater.tsx b/features/add-bond/add-bond-form/context/add-bond-updater.tsx new file mode 100644 index 00000000..6decf504 --- /dev/null +++ b/features/add-bond/add-bond-form/context/add-bond-updater.tsx @@ -0,0 +1,19 @@ +import { FC, useEffect } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { AddBondFormInputType } from './types'; + +export const AddBondUpdater: FC = () => { + const [token] = useWatch({ + name: ['token'], + }); + + const { trigger } = useFormContext(); + + useEffect(() => { + void trigger('bondAmount'); + // trigger is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token]); + + return null; +}; diff --git a/features/add-bond/add-bond-form/context/index.ts b/features/add-bond/add-bond-form/context/index.ts index 265faa46..aedc2555 100644 --- a/features/add-bond/add-bond-form/context/index.ts +++ b/features/add-bond/add-bond-form/context/index.ts @@ -1,2 +1,3 @@ export * from './add-bond-form-provider'; +export * from './add-bond-data-provider'; export * from './types'; diff --git a/features/add-bond/add-bond-form/context/types.ts b/features/add-bond/add-bond-form/context/types.ts index 501894f9..f3da996a 100644 --- a/features/add-bond/add-bond-form/context/types.ts +++ b/features/add-bond/add-bond-form/context/types.ts @@ -1,26 +1,16 @@ -import { BigNumber } from 'ethers'; -import { type TOKENS } from 'consts/tokens'; -import { BondBalance, LoadingRecord, NodeOperatorId } from 'types'; +import { BondBalance, NodeOperatorId, TOKENS } from '@lidofinance/lido-csm-sdk'; export type AddBondFormInputType = { token: TOKENS; - bondAmount?: BigNumber; + bondAmount?: bigint; }; export type AddBondFormNetworkData = { - nodeOperatorId?: NodeOperatorId; - etherBalance?: BigNumber; - stethBalance?: BigNumber; - wstethBalance?: BigNumber; - bond?: BondBalance; - maxStakeEther?: BigNumber | null; - isPaused?: boolean; - loading: LoadingRecord< - | 'etherBalance' - | 'stethBalance' - | 'wstethBalance' - | 'bond' - | 'maxStakeEther' - | 'status' - >; + nodeOperatorId: NodeOperatorId; + ethBalance: bigint; + stethBalance: bigint; + wstethBalance: bigint; + bond: BondBalance; + maxStakeEth: bigint; + isPaused: boolean; }; diff --git a/features/add-bond/add-bond-form/context/use-add-bond-default-values.ts b/features/add-bond/add-bond-form/context/use-add-bond-default-values.ts new file mode 100644 index 00000000..39c4af45 --- /dev/null +++ b/features/add-bond/add-bond-form/context/use-add-bond-default-values.ts @@ -0,0 +1,16 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { getMaxBalanceToken } from 'modules/web3'; +import { useFormDefaultValues } from 'shared/hook-form/form-controller'; +import { AddBondFormInputType, AddBondFormNetworkData } from './types'; + +export const useAddBondDefaultValues = () => { + return useFormDefaultValues( + (data) => ({ + token: getMaxBalanceToken({ + [TOKENS.eth]: data.ethBalance, + [TOKENS.steth]: data.stethBalance, + [TOKENS.wsteth]: data.wstethBalance, + }), + }), + ); +}; diff --git a/features/add-bond/add-bond-form/context/use-add-bond-form-network-data.tsx b/features/add-bond/add-bond-form/context/use-add-bond-form-network-data.tsx deleted file mode 100644 index 3326d00e..00000000 --- a/features/add-bond/add-bond-form/context/use-add-bond-form-network-data.tsx +++ /dev/null @@ -1,97 +0,0 @@ -import { - useEthereumBalance, - useSTETHBalance, - useWSTETHBalance, -} from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { - useCsmPaused, - useNodeOperatorBalance, - useStakingLimitInfo, -} from 'shared/hooks'; -import { type AddBondFormNetworkData } from '../context/types'; - -export const useAddBondFormNetworkData = (): [ - AddBondFormNetworkData, - () => Promise, -] => { - const nodeOperatorId = useNodeOperatorId(); - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - const { - data: stethBalance, - update: updateStethBalance, - initialLoading: isStethBalanceLoading, - } = useSTETHBalance(STRATEGY_LAZY); - const { - data: wstethBalance, - update: updateWstethBalance, - initialLoading: isWstethBalanceLoading, - } = useWSTETHBalance(STRATEGY_LAZY); - const { - data: bond, - update: updateBond, - initialLoading: isBondLoading, - } = useNodeOperatorBalance(nodeOperatorId); - const { - data: maxStakeEther, - update: updateMaxStakeEther, - initialLoading: isMaxStakeEtherLoading, - } = useStakingLimitInfo(); - - const { data: status, initialLoading: isStatusLoading } = useCsmPaused(); - - const revalidate = useCallback(async () => { - await Promise.allSettled([ - updateStethBalance(), - updateWstethBalance(), - updateEtherBalance(), - updateBond(), - updateMaxStakeEther(), - ]); - }, [ - updateStethBalance, - updateWstethBalance, - updateEtherBalance, - updateBond, - updateMaxStakeEther, - ]); - - const loading = useMemo( - () => ({ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - isBondLoading, - isMaxStakeEtherLoading, - isStatusLoading, - }), - [ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - isBondLoading, - isMaxStakeEtherLoading, - isStatusLoading, - ], - ); - - return [ - { - etherBalance, - stethBalance, - wstethBalance, - bond, - nodeOperatorId, - maxStakeEther, - isPaused: status?.isAccountingPaused, - loading, - }, - revalidate, - ]; -}; diff --git a/features/add-bond/add-bond-form/context/use-add-bond-submit.ts b/features/add-bond/add-bond-form/context/use-add-bond-submit.ts index b4449e3a..1d0d1b70 100644 --- a/features/add-bond/add-bond-form/context/use-add-bond-submit.ts +++ b/features/add-bond/add-bond-form/context/use-add-bond-submit.ts @@ -1,140 +1,89 @@ -import { BigNumber } from 'ethers'; -import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; - -import { TOKENS } from 'consts/tokens'; import { - useCSAccountingRPC, - useCSModuleWeb3, - usePermitOrApprove, - useSendTx, -} from 'shared/hooks'; -import { GatherPermitSignatureResult } from 'shared/hooks'; + AddBondResult, + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; +import { useCallback } from 'react'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { addExtraWei, runWithTransactionLogger } from 'utils'; -import { AddBondFormInputType, AddBondFormNetworkData } from '../context'; +import invariant from 'tiny-invariant'; import { useTxModalStagesAddBond } from '../hooks/use-tx-modal-stages-add-bond'; +import { AddBondFormInputType, AddBondFormNetworkData } from './types'; -type UseAddBondOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type AddBondMethodParams = { - amount: BigNumber; - permit: GatherPermitSignatureResult; - nodeOperatorId: NodeOperatorId; -}; - -// encapsulates eth/steth/wsteth flows -const useAddBondTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (token: TOKENS, params: AddBondMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - switch (token) { - case TOKENS.ETH: - return { - tx: await CSModuleWeb3.populateTransaction.depositETH( - params.nodeOperatorId, - { - value: params.amount, - }, - ), - txName: 'depositETH', - }; - case TOKENS.STETH: - return { - tx: await CSModuleWeb3.populateTransaction.depositStETH( - params.nodeOperatorId, - params.amount, - params.permit, - ), - txName: 'depositStETH', - }; - case TOKENS.WSTETH: - return { - tx: await CSModuleWeb3.populateTransaction.depositWstETH( - params.nodeOperatorId, - params.amount, - params.permit, - ), - txName: 'depositWstETH', - }; - } - }, - [CSModuleWeb3], - ); -}; - -export const useAddBondSubmit = ({ onConfirm, onRetry }: UseAddBondOptions) => { +export const useAddBondSubmit: FormSubmitterHook< + AddBondFormInputType, + AddBondFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesAddBond(); - const CSAccounting = useCSAccountingRPC(); - const getTx = useAddBondTx(); - const sendTx = useSendTx(); - const getPermitOrApprove = usePermitOrApprove(); - - const addBond = useCallback( + return useCallback( async ( - { bondAmount: amount, token }: AddBondFormInputType, - { nodeOperatorId }: AddBondFormNetworkData, - ): Promise => { - invariant(token, 'Token is not defined'); - invariant(amount, 'BondAmount is not defined'); - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); + { bondAmount: amount, token }, + { nodeOperatorId }, + { onConfirm, onRetry }, + ) => { + invariant(amount !== undefined, 'BondAmount is not defined'); try { - const { permit } = await getPermitOrApprove({ - token, - amount: addExtraWei(amount, token), - txModalStages, - }); - - txModalStages.sign({ amount, token }); - - const tx = await getTx(token, { + const callback: TransactionCallback = async ({ + stage, + payload, + }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ amount, token }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ amount, token }, payload.hash); + break; + case TransactionCallbackStage.PERMIT_SIGN: + txModalStages.signPermit(); + break; + case TransactionCallbackStage.APPROVE_SIGN: + txModalStages.signApproval(payload.amount, payload.token); + break; + case TransactionCallbackStage.APPROVE_RECEIPT: + txModalStages.pendingApproval( + payload.amount, + payload.token, + payload.hash, + ); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success( + { + balance: payload.result.current, + }, + payload.hash, + ); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.bond.addBond({ nodeOperatorId, + token, amount, - permit, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'AddBond signing', - () => sendTx(tx), - ); - - txModalStages.pending({ amount, token }, txHash); - - await runWithTransactionLogger('AddBond block confirmation', waitTx); - - // TODO: move to onConfirm - const { current } = await CSAccounting.getBondSummary(nodeOperatorId); - await onConfirm?.(); - txModalStages.success({ balance: current }, txHash); - return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [ - getTx, - getPermitOrApprove, - txModalStages, - CSAccounting, - onConfirm, - sendTx, - onRetry, - ], + [csm.bond, txModalStages], ); - - return { - addBond, - }; }; diff --git a/features/add-bond/add-bond-form/context/use-add-bond-validation.ts b/features/add-bond/add-bond-form/context/use-add-bond-validation.ts index b2f52c93..63c048c3 100644 --- a/features/add-bond/add-bond-form/context/use-add-bond-validation.ts +++ b/features/add-bond/add-bond-form/context/use-add-bond-validation.ts @@ -1,42 +1,32 @@ -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; import { - handleResolverValidationError, + useFormValidation, validateBondAmount, validateEtherAmount, } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; import type { AddBondFormInputType, AddBondFormNetworkData } from './types'; +// import invaria t from 'tiny-invariant'; -export const useAddBondValidation = (networkData: AddBondFormNetworkData) => { - const dataPromise = useAwaitNetworkData(networkData); - - return useCallback>( - async (values) => { - try { - const { token, bondAmount } = values; - - const { stethBalance, wstethBalance, etherBalance, maxStakeEther } = - await dataPromise; +export const useAddBondValidation = () => { + return useFormValidation( + 'token', + async ({ token, bondAmount }, data, validate) => { + // invariant(token !== undefined, 'Token is not defined'); + // invariant(bondAmount !== undefined, 'BondAmount is not defined'); + await validate(['token', 'bondAmount'], () => validateBondAmount({ token, bondAmount, - maxStakeEther, - etherBalance, - stethBalance, - wstethBalance, - }); - validateEtherAmount('bondAmount', bondAmount, token); + maxStakeEth: data.maxStakeEth, + ethBalance: data.ethBalance, + stethBalance: data.stethBalance, + wstethBalance: data.wstethBalance, + }), + ); - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError(error, 'AddBondForm', 'token'); - } + await validate('bondAmount', () => + validateEtherAmount('bondAmount', bondAmount, token), + ); }, - [dataPromise], ); }; diff --git a/features/add-bond/add-bond-form/context/use-form-revalidate.ts b/features/add-bond/add-bond-form/context/use-form-revalidate.ts deleted file mode 100644 index fa69b03e..00000000 --- a/features/add-bond/add-bond-form/context/use-form-revalidate.ts +++ /dev/null @@ -1,14 +0,0 @@ -import { UseFormReturn } from 'react-hook-form'; -import { AddBondFormInputType } from './types'; -import { useEffect } from 'react'; - -export const useFormRevalidate = ({ - watch, - trigger, -}: UseFormReturn) => { - const [token] = watch(['token']); - - useEffect(() => { - void trigger('bondAmount'); - }, [token, trigger]); -}; diff --git a/features/add-bond/add-bond-form/context/use-get-default-values.ts b/features/add-bond/add-bond-form/context/use-get-default-values.ts deleted file mode 100644 index b6db8b2c..00000000 --- a/features/add-bond/add-bond-form/context/use-get-default-values.ts +++ /dev/null @@ -1,46 +0,0 @@ -import { useMemo } from 'react'; -import { useDefaultValues } from 'shared/hooks'; -import { getMaxBalanceToken } from 'utils'; -import { AddBondFormInputType, AddBondFormNetworkData } from './types'; - -export const useGetDefaultValues = ({ - etherBalance, - stethBalance, - wstethBalance, - loading: { - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - }, -}: AddBondFormNetworkData) => { - return useDefaultValues( - useMemo(() => { - if ( - [ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - ].some(Boolean) - ) { - return undefined; - } - - const token = getMaxBalanceToken({ - etherBalance, - stethBalance, - wstethBalance, - }); - - return { - token, - }; - }, [ - etherBalance, - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - stethBalance, - wstethBalance, - ]), - ); -}; diff --git a/features/add-bond/add-bond-form/controls/amount-input.tsx b/features/add-bond/add-bond-form/controls/amount-input.tsx index 4836d445..fc31fb82 100644 --- a/features/add-bond/add-bond-form/controls/amount-input.tsx +++ b/features/add-bond/add-bond-form/controls/amount-input.tsx @@ -8,7 +8,6 @@ export const AmountInput: React.FC = () => { const token = useWatch({ name: 'token' }); const max = useMaxValue(token); - // TODO: reset amount on token switch return ( <> Enter token amount diff --git a/features/add-bond/add-bond-form/controls/info.tsx b/features/add-bond/add-bond-form/controls/info.tsx index 54bf12f1..2f4c7446 100644 --- a/features/add-bond/add-bond-form/controls/info.tsx +++ b/features/add-bond/add-bond-form/controls/info.tsx @@ -1,33 +1,35 @@ -import { BOND_EXCESS, BOND_INSUFFICIENT } from 'consts/text'; -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { UNBONDED_VALIDATORS_LINK } from 'consts/external-links'; +import { BOND_INSUFFICIENT } from 'consts/text'; import { FC } from 'react'; import { Latice, MatomoLink, Stack, TitledAmount } from 'shared/components'; import { useAddBondFormData } from '../context'; export const Info: FC = () => { - const { bond, loading } = useAddBondFormData(); + const { bond } = useAddBondFormData(true); return ( <> - + {bond?.isInsufficient ? (

Your Node Operator has an Insufficient bond because of the penalty - applied. Now your Node Operator’s bond is less than required to - cover the Node Operator’s current validators. + applied. Now your Node Operator's bond is less than required + to cover the Node Operator's current validators.
Action required:
@@ -41,7 +43,10 @@ export const Info: FC = () => {
Adding a bond serves as a voluntary security measure for your Node Operator to prevent your validators from becoming{' '} - + unbonded {' '} and being requested to exit in case of applied penalties. diff --git a/features/add-bond/add-bond-form/controls/submit-button.tsx b/features/add-bond/add-bond-form/controls/submit-button.tsx index bcd979dd..bb50e765 100644 --- a/features/add-bond/add-bond-form/controls/submit-button.tsx +++ b/features/add-bond/add-bond-form/controls/submit-button.tsx @@ -3,13 +3,10 @@ import { useAddBondFormData } from '../context'; export const SubmitButton = () => { const { isPaused } = useAddBondFormData(); + if (isPaused) { return ; } - return ( - - Add Bond - - ); + return Add Bond; }; diff --git a/features/add-bond/add-bond-form/controls/token-select.tsx b/features/add-bond/add-bond-form/controls/token-select.tsx index 2f8813d7..1cba4c76 100644 --- a/features/add-bond/add-bond-form/controls/token-select.tsx +++ b/features/add-bond/add-bond-form/controls/token-select.tsx @@ -1,37 +1,22 @@ -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { FormTitle, TokenAmount } from 'shared/components'; import { TokenButtonsHookForm } from 'shared/hook-form/controls'; import { useAddBondFormData } from '../context'; export const TokenSelect: React.FC = () => { - const { etherBalance, stethBalance, wstethBalance, loading } = - useAddBondFormData(); + const { ethBalance, stethBalance, wstethBalance } = useAddBondFormData(true); return ( <> Choose bond token + [TOKENS.eth]: , + [TOKENS.steth]: ( + ), - [TOKENS.STETH]: ( - - ), - [TOKENS.WSTETH]: ( - + [TOKENS.wsteth]: ( + ), }} /> diff --git a/features/add-bond/add-bond-form/hooks/use-max-value.ts b/features/add-bond/add-bond-form/hooks/use-max-value.ts index c261b81b..09af6489 100644 --- a/features/add-bond/add-bond-form/hooks/use-max-value.ts +++ b/features/add-bond/add-bond-form/hooks/use-max-value.ts @@ -1,21 +1,20 @@ -import { Zero } from '@ethersproject/constants'; -import { TOKENS } from 'consts/tokens'; import { useMemo } from 'react'; import { useAddBondFormData } from '../context'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const useMaxValue = (token: TOKENS) => { - const { etherBalance, stethBalance, wstethBalance } = useAddBondFormData(); + const { ethBalance, stethBalance, wstethBalance } = useAddBondFormData(); const max = useMemo(() => { switch (token) { - case TOKENS.ETH: - return etherBalance; // TODO: minus gas cost - case TOKENS.STETH: + case TOKENS.eth: + return ethBalance; // TODO: minus gas cost + case TOKENS.steth: return stethBalance; - case TOKENS.WSTETH: + case TOKENS.wsteth: return wstethBalance; } - }, [etherBalance, stethBalance, token, wstethBalance]); + }, [ethBalance, stethBalance, token, wstethBalance]); - return max ?? Zero; + return max ?? 0n; }; diff --git a/features/add-bond/add-bond-form/hooks/use-receive-amount.ts b/features/add-bond/add-bond-form/hooks/use-receive-amount.ts index 681d143f..e22c1aa3 100644 --- a/features/add-bond/add-bond-form/hooks/use-receive-amount.ts +++ b/features/add-bond/add-bond-form/hooks/use-receive-amount.ts @@ -1,18 +1,14 @@ -import { Zero } from '@ethersproject/constants'; -import { TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; -import { useStethByWsteth } from 'shared/hooks'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { useStETHByWstETH } from 'modules/web3'; -export const useReceiveAmount = ( - amount: BigNumber | undefined, - token: TOKENS, -) => { - const { data: wsteth, loading: wstethLoadng } = useStethByWsteth( - (token === TOKENS.WSTETH && amount) || undefined, +// TODO: use exchange rate +export const useReceiveAmount = (amount: bigint | undefined, token: TOKENS) => { + const { data: wsteth, isPending: wstethLoadng } = useStETHByWstETH( + (token === TOKENS.wsteth && amount) || undefined, ); return { - amount: (token === TOKENS.WSTETH ? wsteth : amount) ?? Zero, - loading: token === TOKENS.WSTETH ? wstethLoadng : false, + amount: (token === TOKENS.wsteth ? wsteth : amount) ?? 0n, + loading: token === TOKENS.wsteth ? wstethLoadng : false, }; }; diff --git a/features/add-bond/add-bond-form/hooks/use-tx-modal-stages-add-bond.tsx b/features/add-bond/add-bond-form/hooks/use-tx-modal-stages-add-bond.tsx index af60bc26..0575390b 100644 --- a/features/add-bond/add-bond-form/hooks/use-tx-modal-stages-add-bond.tsx +++ b/features/add-bond/add-bond-form/hooks/use-tx-modal-stages-add-bond.tsx @@ -1,6 +1,4 @@ -import type { BigNumber } from 'ethers'; - -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { TransactionModalTransitStage, TxStageOperationSucceedBalanceShown, @@ -14,7 +12,7 @@ const STAGE_OPERATION_ARGS = { }; type Props = { - amount: BigNumber; + amount: bigint; token: TOKENS; }; @@ -43,13 +41,13 @@ const getTxModalStagesAddBond = ( />, ), - success: ({ balance }: { balance: BigNumber }, txHash?: string) => + success: ({ balance }: { balance: bigint }, txHash?: string) => transitStage( , { isClosableOnLedger: true, diff --git a/features/add-bond/add-bond-page.tsx b/features/add-bond/add-bond-page.tsx index e9865fc2..da82fdc5 100644 --- a/features/add-bond/add-bond-page.tsx +++ b/features/add-bond/add-bond-page.tsx @@ -3,15 +3,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { BondPageSwitcher } from 'shared/navigate'; import { AddBond } from './add-bond'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_BOND } from 'faq'; export const AddBondPage: FC = () => ( + ); diff --git a/features/add-bond/add-bond.tsx b/features/add-bond/add-bond.tsx index b4f019d2..f7bd40d5 100644 --- a/features/add-bond/add-bond.tsx +++ b/features/add-bond/add-bond.tsx @@ -1,8 +1,7 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { AddBondForm } from './add-bond-form'; -import { Faq } from 'shared/components'; export const AddBond = () => { const key = useWeb3Key(); @@ -11,7 +10,6 @@ export const AddBond = () => { - ); }; diff --git a/features/add-keys/add-keys-page.tsx b/features/add-keys/add-keys-page.tsx index d98f5794..5d61320b 100644 --- a/features/add-keys/add-keys-page.tsx +++ b/features/add-keys/add-keys-page.tsx @@ -3,15 +3,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { KeysPageSwitcher } from 'shared/navigate'; import { AddKeys } from './add-keys'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; export const AddKeysPage: FC = () => ( + ); diff --git a/features/add-keys/add-keys.tsx b/features/add-keys/add-keys.tsx index 8e11f466..863edc48 100644 --- a/features/add-keys/add-keys.tsx +++ b/features/add-keys/add-keys.tsx @@ -1,8 +1,7 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; -import { AddKeysForm } from './add-keys/add-keys-form'; -import { Faq } from 'shared/components'; +import { useWeb3Key } from 'shared/hooks'; import { ShareLimitBanner } from '../create-node-operator/share-limit-banner'; +import { AddKeysForm } from './add-keys/add-keys-form'; export const AddKeys = () => { const key = useWeb3Key(); @@ -12,7 +11,6 @@ export const AddKeys = () => { - ); }; diff --git a/features/add-keys/add-keys/add-keys-form-info.tsx b/features/add-keys/add-keys/add-keys-form-info.tsx index d405a26a..431555ee 100644 --- a/features/add-keys/add-keys/add-keys-form-info.tsx +++ b/features/add-keys/add-keys/add-keys-form-info.tsx @@ -7,18 +7,17 @@ export const AddKeysFormInfo = () => { name: ['depositData'], }); - const { shareLimit } = useAddKeysFormData(); + const { shareLimit } = useAddKeysFormData(true); return ( {depositData.length} - {shareLimit?.queue.toString()} + {shareLimit.queue.toString()} ); diff --git a/features/add-keys/add-keys/add-keys-form.tsx b/features/add-keys/add-keys/add-keys-form.tsx index b4fbf534..55fbae81 100644 --- a/features/add-keys/add-keys/add-keys-form.tsx +++ b/features/add-keys/add-keys/add-keys-form.tsx @@ -1,36 +1,35 @@ import { FC, memo } from 'react'; -import { AddKeysFormProvider } from './context'; +import { AddKeysDataProvider, AddKeysFormProvider } from './context'; +import { DepositQueue } from 'features/view-keys/deposit-queue'; import { FormBlock } from 'shared/components'; -import { - BaseFormLoader, - FormControllerStyled, -} from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; import { AddKeysFormInfo } from './add-keys-form-info'; import { AmountInput } from './controls/amount-input'; +import { KeysConfirm } from './controls/keys-confirm'; import { KeysInput } from './controls/keys-input'; import { SubmitButton } from './controls/submit-button'; import { TokenSelect } from './controls/token-select'; -import { KeysConfirm } from './controls/keys-confirm'; -import { DepositQueue } from 'features/view-keys/deposit-queue'; export const AddKeysForm: FC = memo(() => { return ( - - - - - - - - - - - - - - - + + + + +

+ + + + + + + + + + + + ); }); diff --git a/features/add-keys/add-keys/context/add-keys-data-provider.tsx b/features/add-keys/add-keys/context/add-keys-data-provider.tsx new file mode 100644 index 00000000..d3eb5c65 --- /dev/null +++ b/features/add-keys/add-keys/context/add-keys-data-provider.tsx @@ -0,0 +1,137 @@ +import { + KEY_DEPOSIT_QUEUE_BATCHES, + KEY_OPERATOR_BALANCE, + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + KEY_OPERATOR_KEYS_TO_MIGRATE, + KEY_SHARE_LIMIT, + KEY_STAKE_LIMIT, + useCsmStatus, + useCurveParameters, + useEthereumBalance, + useNodeOperatorId, + useOperatorBalance, + useOperatorCurveId, + useOperatorInfo, + useShareLimit, + useStakeLimit, + useStethBalance, + useWstethBalance, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type AddKeysFormNetworkData } from './types'; + +const useAddKeysFormNetworkData: NetworkData = () => { + const { data: status, isPending: isStatusLoading } = useCsmStatus(); + const nodeOperatorId = useNodeOperatorId(); + + const ethBalanceQuery = useEthereumBalance(); + const stethBalanceQuery = useStethBalance(); + const wstethBalanceQuery = useWstethBalance(); + const bondQuery = useOperatorBalance(nodeOperatorId); + const maxStakeEthQuery = useStakeLimit(); + const shareLimitQuery = useShareLimit(); + + const ethBalance = ethBalanceQuery.data; + const stethBalance = stethBalanceQuery.data; + const wstethBalance = wstethBalanceQuery.data; + const bond = bondQuery.data; + const maxStakeEth = maxStakeEthQuery.data; + const shareLimit = shareLimitQuery.data; + + const isEthBalanceLoading = ethBalanceQuery.isPending; + const isStethBalanceLoading = stethBalanceQuery.isPending; + const isWstethBalanceLoading = wstethBalanceQuery.isPending; + const isBondLoading = bondQuery.isPending; + const isMaxStakeEthLoading = maxStakeEthQuery.isPending; + const isShareLimitLoading = shareLimitQuery.isPending; + + const { data: curveId, isPending: isCurveIdLoading } = + useOperatorCurveId(nodeOperatorId); + const { data: curveParameters, isPending: isCurveParametersLoading } = + useCurveParameters(curveId); + + const { data: operatorInfo, isPending: isOperatorInfoLoading } = + useOperatorInfo(nodeOperatorId); + + // const { data: nonWithdrawnKeys } = useNonWithdrawnKeysCount(`${nodeOperatorId}`); + + // const { data: keysAvailable } = useKeysAvailable({ + // curveId, + // nonWithdrawnKeys, + // bond, + // ethBalance, + // stethBalance, + // wstethBalance, + // }); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + ethBalanceQuery.queryKey, + stethBalanceQuery.queryKey, + wstethBalanceQuery.queryKey, + KEY_OPERATOR_BALANCE, + KEY_SHARE_LIMIT, + KEY_STAKE_LIMIT, + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + KEY_OPERATOR_KEYS_TO_MIGRATE, + KEY_DEPOSIT_QUEUE_BATCHES, + ]); + }, [ + invalidate, + ethBalanceQuery.queryKey, + stethBalanceQuery.queryKey, + wstethBalanceQuery.queryKey, + ]); + + const isPending = + isEthBalanceLoading || + isStethBalanceLoading || + isWstethBalanceLoading || + isMaxStakeEthLoading || + isCurveParametersLoading || + isBondLoading || + isStatusLoading || + isShareLimitLoading || + isCurveIdLoading || + isOperatorInfoLoading; + + return { + data: { + nodeOperatorId, + curveId, + operatorInfo, + curveParameters, + stethBalance, + wstethBalance, + ethBalance, + bond, + maxStakeEth, + shareLimit, + isPaused: status?.isPaused, + } as AddKeysFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useAddKeysFormData = useFormData; + +export const AddKeysDataProvider: FC = ({ children }) => { + const networkData = useAddKeysFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/add-keys/add-keys/context/add-keys-form-provider.tsx b/features/add-keys/add-keys/context/add-keys-form-provider.tsx index 33b13e32..41db7752 100644 --- a/features/add-keys/add-keys/context/add-keys-form-provider.tsx +++ b/features/add-keys/add-keys/context/add-keys-form-provider.tsx @@ -1,62 +1,30 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormData, - useFormDepositData, -} from 'shared/hook-form/form-controller'; -import { useFormControllerRetry } from 'shared/hook-form/form-controller/use-form-controller-retry-delegate'; -import { AddKeysFormInputType, AddKeysFormNetworkData } from './types'; -import { useAddKeysFormNetworkData } from './use-add-keys-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { AddKeysUpdater } from './add-keys-updater'; +import { AddKeysFormInputType } from './types'; +import { useAddKeysDefaultValues } from './use-add-keys-default-values'; import { useAddKeysSubmit } from './use-add-keys-submit'; import { useAddKeysValidation } from './use-add-keys-validation'; -import { useFormBondAmount } from './use-form-bond-amount'; -import { useGetDefaultValues } from './use-get-default-values'; - -export const useAddKeysFormData = useFormData; export const AddKeysFormProvider: FC = ({ children }) => { - const [networkData, revalidate] = useAddKeysFormNetworkData(); - const validationResolver = useAddKeysValidation(networkData); - - const asyncDefaultValues = useGetDefaultValues(networkData); + const resolver = useAddKeysValidation(); + const asyncDefaultValues = useAddKeysDefaultValues(); const formObject = useForm({ defaultValues: asyncDefaultValues, - resolver: validationResolver, + resolver, mode: 'onChange', }); - useFormBondAmount(formObject, networkData); - useFormDepositData(formObject); - - const { retryEvent, retryFire } = useFormControllerRetry(); - - const addKeys = useAddKeysSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - AddKeysFormInputType, - AddKeysFormNetworkData - > = useMemo( - () => ({ - onSubmit: addKeys, - retryEvent, - }), - [addKeys, retryEvent], - ); + const submitter = useAddKeysSubmit(); return ( - - - {children} - - + + + {children} + ); }; diff --git a/features/add-keys/add-keys/context/add-keys-updater.tsx b/features/add-keys/add-keys/context/add-keys-updater.tsx new file mode 100644 index 00000000..3637aa34 --- /dev/null +++ b/features/add-keys/add-keys/context/add-keys-updater.tsx @@ -0,0 +1,38 @@ +import { useBondNextKeysCount } from 'modules/web3'; +import { FC, useEffect } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { useAddKeysFormData } from './add-keys-data-provider'; +import { AddKeysFormInputType } from './types'; + +export const AddKeysUpdater: FC = () => { + const [token, depositData] = useWatch< + AddKeysFormInputType, + ['token', 'depositData'] + >({ name: ['token', 'depositData'] }); + + const keysCount = depositData?.length ?? 0; + + const { trigger, setValue } = useFormContext(); + + const { nodeOperatorId } = useAddKeysFormData(); + + const { data: bondAmount } = useBondNextKeysCount({ + nodeOperatorId, + keysCount, + token, + }); + + useEffect(() => { + void trigger('bondAmount'); + // trigger is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token]); + + useEffect(() => { + setValue('bondAmount', bondAmount, { shouldValidate: true }); + // setValue is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [bondAmount]); + + return null; +}; diff --git a/features/add-keys/add-keys/context/index.ts b/features/add-keys/add-keys/context/index.ts index d344aeb8..eb1b329f 100644 --- a/features/add-keys/add-keys/context/index.ts +++ b/features/add-keys/add-keys/context/index.ts @@ -1,2 +1,3 @@ export * from './add-keys-form-provider'; +export * from './add-keys-data-provider'; export * from './types'; diff --git a/features/add-keys/add-keys/context/types.ts b/features/add-keys/add-keys/context/types.ts index d0feb472..63332666 100644 --- a/features/add-keys/add-keys/context/types.ts +++ b/features/add-keys/add-keys/context/types.ts @@ -1,35 +1,29 @@ -import { type TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; -import { DepositDataInputType } from 'shared/hook-form/form-controller'; -import { KeysAvailable, ShareLimitInfo } from 'shared/hooks'; -import { BondBalance, LoadingRecord, NodeOperatorId } from 'types'; +import { + BondBalance, + CurveParameters, + NodeOperatorId, + NodeOperatorInfo, + ShareLimitInfo, + TOKENS, +} from '@lidofinance/lido-csm-sdk'; +import { DepositDataInputType } from 'shared/hook-form/deposit-data'; export type AddKeysFormInputType = { token: TOKENS; - bondAmount?: BigNumber; + bondAmount?: bigint; } & DepositDataInputType; export type AddKeysFormNetworkData = { - etherBalance?: BigNumber; - stethBalance?: BigNumber; - wstethBalance?: BigNumber; - nodeOperatorId?: NodeOperatorId; - keysUploadLimit?: number; - keysAvailable?: KeysAvailable; - bond?: BondBalance; - isPaused?: boolean; - maxStakeEther?: BigNumber | null; - shareLimit?: ShareLimitInfo; - blockNumber?: number; - loading: LoadingRecord< - | 'etherBalance' - | 'stethBalance' - | 'wstethBalance' - | 'bond' - | 'maxStakeEther' - | 'keysUploadLimit' - | 'status' - | 'shareLimit' - | 'blockNumber' - >; + ethBalance: bigint; + stethBalance: bigint; + wstethBalance: bigint; + nodeOperatorId: NodeOperatorId; + curveId: bigint; + operatorInfo: NodeOperatorInfo; + curveParameters: CurveParameters; + bond: BondBalance; + isPaused: boolean; + maxStakeEth: bigint; + shareLimit: ShareLimitInfo; + // keysAvailable: KeysAvailable; }; diff --git a/features/add-keys/add-keys/context/use-add-keys-default-values.ts b/features/add-keys/add-keys/context/use-add-keys-default-values.ts new file mode 100644 index 00000000..bfd10ef2 --- /dev/null +++ b/features/add-keys/add-keys/context/use-add-keys-default-values.ts @@ -0,0 +1,19 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { getMaxBalanceToken } from 'modules/web3'; +import { useFormDefaultValues } from 'shared/hook-form/form-controller'; +import { AddKeysFormInputType, AddKeysFormNetworkData } from './types'; + +export const useAddKeysDefaultValues = () => { + return useFormDefaultValues( + (data) => ({ + token: getMaxBalanceToken({ + [TOKENS.eth]: data.ethBalance, + [TOKENS.steth]: data.stethBalance, + [TOKENS.wsteth]: data.wstethBalance, + }), + depositData: [], + rawDepositData: '', + confirmKeysReady: false, + }), + ); +}; diff --git a/features/add-keys/add-keys/context/use-add-keys-form-network-data.tsx b/features/add-keys/add-keys/context/use-add-keys-form-network-data.tsx deleted file mode 100644 index 1bb8aeb2..00000000 --- a/features/add-keys/add-keys/context/use-add-keys-form-network-data.tsx +++ /dev/null @@ -1,144 +0,0 @@ -import { - useEthereumBalance, - useSTETHBalance, - useWSTETHBalance, -} from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { - useCsmPaused, - useCSMShareLimitInfo, - useKeysAvailable, - useKeysUploadLimit, - useNodeOperatorBalance, - useNodeOperatorCurveId, - useNonWithdrawnKeysCount, - useStakingLimitInfo, -} from 'shared/hooks'; -import { useBlockNumber } from 'wagmi'; -import { type AddKeysFormNetworkData } from './types'; - -export const useAddKeysFormNetworkData = (): [ - AddKeysFormNetworkData, - () => Promise, -] => { - const { data: blockNumber, isLoading: isBlockNumberLoading } = - useBlockNumber(); - const { data: status, initialLoading: isStatusLoading } = useCsmPaused(); - const nodeOperatorId = useNodeOperatorId(); - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - const { - data: stethBalance, - update: updateStethBalance, - initialLoading: isStethBalanceLoading, - } = useSTETHBalance(STRATEGY_LAZY); - const { - data: wstethBalance, - update: updateWstethBalance, - initialLoading: isWstethBalanceLoading, - } = useWSTETHBalance(STRATEGY_LAZY); - const { - data: bond, - update: updateBond, - initialLoading: isBondLoading, - } = useNodeOperatorBalance(nodeOperatorId); - const { - data: maxStakeEther, - update: updateMaxStakeEther, - initialLoading: isMaxStakeEtherLoading, - } = useStakingLimitInfo(); - - const { - data: shareLimit, - initialLoading: isShareLimitLoading, - update: updateShareLimit, - } = useCSMShareLimitInfo(); - - const { - data: keysUploadLimit, - update: updateKeysUploadLimit, - initialLoading: isKeysUploadLimitLoading, - } = useKeysUploadLimit(); - - const { data: curveId } = useNodeOperatorCurveId(nodeOperatorId); - - const { data: nonWithdrawnKeys } = useNonWithdrawnKeysCount(nodeOperatorId); - - const { data: keysAvailable } = useKeysAvailable({ - curveId, - keysUploadLimit, - nonWithdrawnKeys, - bond, - etherBalance, - stethBalance, - wstethBalance, - }); - - const revalidate = useCallback(async () => { - await Promise.allSettled([ - updateStethBalance(), - updateWstethBalance(), - updateEtherBalance(), - updateBond(), - updateKeysUploadLimit(), - updateShareLimit(), - updateMaxStakeEther(), - ]); - }, [ - updateStethBalance, - updateWstethBalance, - updateEtherBalance, - updateBond, - updateKeysUploadLimit, - updateShareLimit, - updateMaxStakeEther, - ]); - - const loading = useMemo( - () => ({ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - isMaxStakeEtherLoading, - isBondLoading, - isKeysUploadLimitLoading, - isStatusLoading, - isBlockNumberLoading, - isShareLimitLoading, - }), - [ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - isMaxStakeEtherLoading, - isBondLoading, - isKeysUploadLimitLoading, - isStatusLoading, - isBlockNumberLoading, - isShareLimitLoading, - ], - ); - - return [ - { - blockNumber, - nodeOperatorId, - keysUploadLimit, - keysAvailable, - stethBalance, - wstethBalance, - etherBalance, - bond, - maxStakeEther, - loading, - shareLimit, - isPaused: status?.isPaused || status?.isAccountingPaused, - }, - revalidate, - ]; -}; diff --git a/features/add-keys/add-keys/context/use-add-keys-submit.ts b/features/add-keys/add-keys/context/use-add-keys-submit.ts index 175ad2dc..02457aba 100644 --- a/features/add-keys/add-keys/context/use-add-keys-submit.ts +++ b/features/add-keys/add-keys/context/use-add-keys-submit.ts @@ -1,164 +1,103 @@ -import { TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; -import { BytesLike } from 'ethers/lib/utils.js'; -import { useCallback } from 'react'; import { - GatherPermitSignatureResult, - useCSModuleWeb3, - useKeysCache, - usePermitOrApprove, - useSendTx, -} from 'shared/hooks'; + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { PATH } from 'consts/urls'; +import { useLidoSDK } from 'modules/web3'; +import { useCallback } from 'react'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { useKeysCache } from 'shared/hooks'; +import { useNavigate } from 'shared/navigate'; import { handleTxError } from 'shared/transaction-modal'; import invariant from 'tiny-invariant'; -import { NodeOperatorId } from 'types'; -import { addExtraWei, formatKeys, runWithTransactionLogger } from 'utils'; import { useTxModalStagesAddKeys } from '../hooks/use-tx-modal-stages-add-keys'; import { AddKeysFormInputType, AddKeysFormNetworkData } from './types'; -type AddKeysOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type MethodParams = { - nodeOperatorId: NodeOperatorId; - bondAmount: BigNumber; - keysCount: number; - publicKeys: BytesLike; - signatures: BytesLike; - permit: GatherPermitSignatureResult; -}; - -// this encapsulates eth/steth/wsteth flows -const useAddKeysTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (token: TOKENS, params: MethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - switch (true) { - case token === TOKENS.STETH || params.bondAmount.isZero(): - return { - tx: await CSModuleWeb3.populateTransaction.addValidatorKeysStETH( - params.nodeOperatorId, - params.keysCount, - params.publicKeys, - params.signatures, - params.permit, - ), - txName: 'addValidatorKeysStETH', - }; - case token === TOKENS.ETH: - return { - tx: await CSModuleWeb3.populateTransaction.addValidatorKeysETH( - params.nodeOperatorId, - params.keysCount, - params.publicKeys, - params.signatures, - { value: params.bondAmount }, - ), - txName: 'addValidatorKeysETH', - }; - case token === TOKENS.WSTETH: - return { - tx: await CSModuleWeb3.populateTransaction.addValidatorKeysWstETH( - params.nodeOperatorId, - params.keysCount, - params.publicKeys, - params.signatures, - params.permit, - ), - txName: 'addValidatorKeysWstETH', - }; - default: { - throw new Error('Not implemented yet: true case'); - } - } - }, - [CSModuleWeb3], - ); -}; - -export const useAddKeysSubmit = ({ onConfirm, onRetry }: AddKeysOptions) => { +export const useAddKeysSubmit: FormSubmitterHook< + AddKeysFormInputType, + AddKeysFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesAddKeys(); - const getPermitOrApprove = usePermitOrApprove(); - const getTx = useAddKeysTx(); - const sendTx = useSendTx(); + const n = useNavigate(); - const { addCacheKeys } = useKeysCache(); + const { addCachePubkeys, removeCachePubkeys } = useKeysCache(); return useCallback( async ( - { depositData, token, bondAmount }: AddKeysFormInputType, - { nodeOperatorId }: AddKeysFormNetworkData, - ): Promise => { - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); - invariant(depositData.length, 'Keys is not defined'); - invariant(token, 'Token is not defined'); - invariant(bondAmount, 'BondAmount is not defined'); + { depositData, token, bondAmount: amount }, + { nodeOperatorId }, + { onConfirm, onRetry }, + ) => { + invariant(amount !== undefined, 'BondAmount is not defined'); - try { - const { permit } = await getPermitOrApprove({ - token, - amount: addExtraWei(bondAmount, token), - txModalStages, - }); - - const { keysCount, publicKeys, signatures } = formatKeys(depositData); - - txModalStages.sign({ - keysCount, - amount: bondAmount, - token, - nodeOperatorId, - }); + const pubkeys = depositData.map(({ pubkey }) => pubkey); - const tx = await getTx(token, { + try { + const keysCount = depositData.length; + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ keysCount, amount, token, nodeOperatorId }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending( + { keysCount, amount, token, nodeOperatorId }, + payload.hash, + ); + break; + case TransactionCallbackStage.PERMIT_SIGN: + txModalStages.signPermit(); + break; + case TransactionCallbackStage.APPROVE_SIGN: + txModalStages.signApproval(payload.amount, payload.token); + break; + case TransactionCallbackStage.APPROVE_RECEIPT: + txModalStages.pendingApproval( + payload.amount, + payload.token, + payload.hash, + ); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success( + { + keys: depositData.map((key) => key.pubkey), + }, + payload.hash, + ); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + addCachePubkeys(pubkeys); + + await csm.keys.addKeys({ nodeOperatorId, - bondAmount, - keysCount, - publicKeys, - signatures, - permit, + token, + amount, + depositData, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'AddKeys signing', - () => sendTx(tx), - ); - - txModalStages.pending( - { keysCount, amount: bondAmount, token, nodeOperatorId }, - txHash, - ); - - await runWithTransactionLogger('AddKeys block confirmation', waitTx); - await onConfirm?.(); - txModalStages.success( - { keys: depositData.map((key) => key.pubkey) }, - txHash, - ); - - // TODO: move to onConfirm - void addCacheKeys(depositData.map(({ pubkey }) => pubkey)); + void n(PATH.KEYS_VIEW); return true; } catch (error) { + removeCachePubkeys(pubkeys); return handleTxError(error, txModalStages, onRetry); } }, - [ - getPermitOrApprove, - txModalStages, - getTx, - onConfirm, - addCacheKeys, - sendTx, - onRetry, - ], + [addCachePubkeys, csm.keys, n, txModalStages, removeCachePubkeys], ); }; diff --git a/features/add-keys/add-keys/context/use-add-keys-validation.ts b/features/add-keys/add-keys/context/use-add-keys-validation.ts index ed7032c9..902a6c6f 100644 --- a/features/add-keys/add-keys/context/use-add-keys-validation.ts +++ b/features/add-keys/add-keys/context/use-add-keys-validation.ts @@ -1,71 +1,77 @@ -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; +import { useLidoSDK } from 'modules/web3'; import { - handleResolverValidationError, + useFormValidation, validateBondAmount, validateDepositData, ValidationError, } from 'shared/hook-form/validation'; -import { useAccount, useAwaitNetworkData } from 'shared/hooks'; import type { AddKeysFormInputType, AddKeysFormNetworkData } from './types'; -export const useAddKeysValidation = (networkData: AddKeysFormNetworkData) => { - const dataPromise = useAwaitNetworkData(networkData); - const { chainId } = useAccount(); +export const useAddKeysValidation = () => { + const { + csm: { depositData: sdk }, + } = useLidoSDK(); - return useCallback>( - async (values, _, options) => { - try { - const { token, bondAmount, depositData, confirmKeysReady } = values; - - const { - stethBalance, - wstethBalance, - etherBalance, - maxStakeEther, - keysUploadLimit, - blockNumber, - } = await dataPromise; + return useFormValidation( + 'token', + async ( + { token, bondAmount, depositData, rawDepositData, confirmKeysReady }, + { + operatorInfo, + curveParameters, + maxStakeEth, + ethBalance, + stethBalance, + wstethBalance, + }, + validate, + ) => { + // FIXME: validate on submit that token, bondAmount and depositData.length are defined + await validate(['token', 'bondAmount'], () => validateBondAmount({ token, bondAmount, - maxStakeEther, - etherBalance, + maxStakeEth, + ethBalance, stethBalance, wstethBalance, - }); + }), + ); - if ( - options.names?.includes('depositData') || - options.names?.includes('rawDepositData') - ) - await validateDepositData({ - depositData, - chainId, - keysUploadLimit, - blockNumber, - }); + // TODO: validate length is zero + await validate('rawDepositData', () => { + if (rawDepositData) { + const { error } = sdk.parseDepositData(rawDepositData); + if (error) { + throw new ValidationError('rawDepositData', error); + } + } else { + throw new ValidationError('rawDepositData', ''); + } + }); + + // TODO: refactor this validation + await validate(['rawDepositData', 'depositData'], async () => { + await validateDepositData({ + depositData, + sdk, + keysLimit: curveParameters?.keysLimit, + currentActiveKeys: + operatorInfo && + operatorInfo.totalAddedKeys - operatorInfo.totalWithdrawnKeys, + }); + }); - if (options.names?.includes('confirmKeysReady') && !confirmKeysReady) { + await validate('confirmKeysReady', () => { + if (!confirmKeysReady) { throw new ValidationError( 'confirmKeysReady', 'Please confirm that the keys are ready', ); } - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError( - error, - 'AddKeysForm', - 'depositData', - ); - } + }); }, - [chainId, dataPromise], + [sdk], ); }; diff --git a/features/add-keys/add-keys/context/use-form-bond-amount.ts b/features/add-keys/add-keys/context/use-form-bond-amount.ts deleted file mode 100644 index 3661fd71..00000000 --- a/features/add-keys/add-keys/context/use-form-bond-amount.ts +++ /dev/null @@ -1,26 +0,0 @@ -import { useEffect } from 'react'; -import { UseFormReturn } from 'react-hook-form'; -import { useNodeOperatorNextKeysBond } from 'shared/hooks'; -import { AddKeysFormInputType, AddKeysFormNetworkData } from './types'; - -export const useFormBondAmount = ( - { watch, setValue, trigger }: UseFormReturn, - { nodeOperatorId }: AddKeysFormNetworkData, -) => { - const [token, depositData] = watch(['token', 'depositData']); - - const { data: bondAmount } = useNodeOperatorNextKeysBond({ - nodeOperatorId, - keysCount: depositData?.length, - token, - }); - - // TODO: move to somethere - useEffect(() => { - void trigger('bondAmount'); - }, [token, trigger]); - - useEffect(() => { - setValue('bondAmount', bondAmount, { shouldValidate: true }); - }, [bondAmount, setValue]); -}; diff --git a/features/add-keys/add-keys/context/use-get-default-values.ts b/features/add-keys/add-keys/context/use-get-default-values.ts deleted file mode 100644 index 468d9bd7..00000000 --- a/features/add-keys/add-keys/context/use-get-default-values.ts +++ /dev/null @@ -1,49 +0,0 @@ -import { useMemo } from 'react'; -import { useDefaultValues } from 'shared/hooks'; -import { getMaxBalanceToken } from 'utils'; -import { AddKeysFormInputType, AddKeysFormNetworkData } from './types'; - -export const useGetDefaultValues = ({ - etherBalance, - stethBalance, - wstethBalance, - loading: { - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - }, -}: AddKeysFormNetworkData) => { - return useDefaultValues( - useMemo(() => { - if ( - [ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - ].some(Boolean) - ) { - return undefined; - } - - const token = getMaxBalanceToken({ - etherBalance, - stethBalance, - wstethBalance, - }); - - return { - token, - depositData: [], - rawDepositData: '', - confirmKeysReady: false, - }; - }, [ - etherBalance, - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - stethBalance, - wstethBalance, - ]), - ); -}; diff --git a/features/add-keys/add-keys/controls/amount-input.tsx b/features/add-keys/add-keys/controls/amount-input.tsx index d22fb848..4fe30288 100644 --- a/features/add-keys/add-keys/controls/amount-input.tsx +++ b/features/add-keys/add-keys/controls/amount-input.tsx @@ -1,7 +1,7 @@ import { useFormState, useWatch } from 'react-hook-form'; import { InputAmount } from 'shared/components/input-amount'; -import { getTokenDisplayName } from 'utils/getTokenDisplayName'; +import { getTokenDisplayName } from 'utils'; import { AddKeysFormInputType } from '../context'; export const AmountInput = () => { @@ -13,11 +13,12 @@ export const AmountInput = () => { return ( ); }; diff --git a/features/add-keys/add-keys/controls/keys-confirm.tsx b/features/add-keys/add-keys/controls/keys-confirm.tsx index d604a073..d271df94 100644 --- a/features/add-keys/add-keys/controls/keys-confirm.tsx +++ b/features/add-keys/add-keys/controls/keys-confirm.tsx @@ -1,29 +1,29 @@ import { Text } from '@lidofinance/lido-ui'; +import { SHARE_LIMIT_STATUS, useShareLimitStatus } from 'modules/web3'; import { FC } from 'react'; import { Stack } from 'shared/components'; import { CheckboxHookForm } from 'shared/hook-form/controls'; -import { SHARE_LIMIT_STATUS } from 'shared/hooks'; -import { useAddKeysFormData } from '../context'; export const KeysConfirm: FC = () => { - const { shareLimit } = useAddKeysFormData(); + // uses already loaded share limit by AddKeysFormDataProvider + const { data: status } = useShareLimitStatus(); return ( - + I confirm that:
  • My nodes are synced, running, and ready for the validator activation
  • - {shareLimit?.status === SHARE_LIMIT_STATUS.APPROACHING && ( + {status === SHARE_LIMIT_STATUS.APPROACHING && (
  • I understand that the deposit time for my keys can be months or longer because CSM is approaching its stake share limit
  • )} - {shareLimit?.status === SHARE_LIMIT_STATUS.REACHED && ( + {status === SHARE_LIMIT_STATUS.REACHED && (
  • I understand that my newly uploaded keys are very unlikely to receive deposits in the near future because CSM has reached its diff --git a/features/add-keys/add-keys/controls/keys-input.tsx b/features/add-keys/add-keys/controls/keys-input.tsx index 91332778..9a307242 100644 --- a/features/add-keys/add-keys/controls/keys-input.tsx +++ b/features/add-keys/add-keys/controls/keys-input.tsx @@ -1,22 +1,15 @@ -import { ABOUT_DEPOSIT_DATA_LINK } from 'consts/external-links'; +import { UPLOAD_DEPOSIT_DATA_LINK } from 'consts/external-links'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { useFormState } from 'react-hook-form'; import { FormTitle, MatomoLink } from 'shared/components'; -import { DepositDataInputHookForm } from 'shared/hook-form/controls'; -import { AddKeysFormInputType } from '../context'; +import { DepositDataHookForm } from 'shared/hook-form/controls'; export const KeysInput = () => { - const { errors } = useFormState({ - name: ['depositData', 'rawDepositData'], - }); - const error = errors.rawDepositData?.message || errors.depositData?.message; - return ( <> Learn more @@ -25,7 +18,8 @@ export const KeysInput = () => { > Upload deposit data - + + ); }; diff --git a/features/add-keys/add-keys/controls/submit-button.tsx b/features/add-keys/add-keys/controls/submit-button.tsx index fb723190..6f3abb62 100644 --- a/features/add-keys/add-keys/controls/submit-button.tsx +++ b/features/add-keys/add-keys/controls/submit-button.tsx @@ -1,32 +1,12 @@ -import { Note } from 'shared/components'; import { PausedButton, SubmitButtonHookForm } from 'shared/hook-form/controls'; -import { useKeysTotalLimit } from 'shared/hooks'; import { useAddKeysFormData } from '../context'; export const SubmitButton = () => { - const { keysUploadLimit, isPaused } = useAddKeysFormData(); - const { data: keysTotalLimit } = useKeysTotalLimit(); - - const keysLimitReached = keysUploadLimit === 0; + const { isPaused } = useAddKeysFormData(); if (isPaused) { return ; } - return ( - <> - - {keysLimitReached ? 'Keys limit has been reached' : 'Submit keys'} - - {keysLimitReached && keysTotalLimit && ( - - You have reached the Early Access upload limit of {keysTotalLimit}{' '} - keys. You cannot upload more. - - )} - - ); + return {'Submit keys'}; }; diff --git a/features/add-keys/add-keys/controls/token-select.tsx b/features/add-keys/add-keys/controls/token-select.tsx index 55c57edc..14b98a22 100644 --- a/features/add-keys/add-keys/controls/token-select.tsx +++ b/features/add-keys/add-keys/controls/token-select.tsx @@ -1,10 +1,10 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { BOND_EXCESS, BOND_INSUFFICIENT } from 'consts/text'; -import { TOKENS } from 'consts/tokens'; import { PATH } from 'consts/urls'; import { FormTitle, - KeysAvailable, + // KeysAvailable, Stack, TitledAmount, TokenAmount, @@ -15,13 +15,12 @@ import { useAddKeysFormData } from '../context'; export const TokenSelect: React.FC = () => { const { - etherBalance, + ethBalance, stethBalance, wstethBalance, - keysAvailable, + // keysAvailable, bond, - loading, - } = useAddKeysFormData(); + } = useAddKeysFormData(true); return ( <> @@ -29,7 +28,7 @@ export const TokenSelect: React.FC = () => { extra={ How bond is calculated @@ -40,34 +39,22 @@ export const TokenSelect: React.FC = () => { - - + + {/* */} ), - [TOKENS.STETH]: ( + [TOKENS.steth]: ( - - + + {/* */} ), - [TOKENS.WSTETH]: ( + [TOKENS.wsteth]: ( - - + + {/* */} ), }} @@ -79,9 +66,8 @@ export const TokenSelect: React.FC = () => { ? 'Will be added to the transaction amount' : 'Will be subtracted from the transaction amount' } - loading={loading.isBondLoading} amount={bond?.delta} - token={TOKENS.STETH} + token={TOKENS.steth} /> ); diff --git a/features/add-keys/add-keys/hooks/use-tx-modal-stages-add-keys.tsx b/features/add-keys/add-keys/hooks/use-tx-modal-stages-add-keys.tsx index a084dd0a..3bc89b90 100644 --- a/features/add-keys/add-keys/hooks/use-tx-modal-stages-add-keys.tsx +++ b/features/add-keys/add-keys/hooks/use-tx-modal-stages-add-keys.tsx @@ -1,5 +1,4 @@ -import { TOKENS } from 'consts/tokens'; -import type { BigNumber } from 'ethers'; +import { NodeOperatorId, TOKENS } from '@lidofinance/lido-csm-sdk'; import { AfterKeysUpload, TransactionModalTransitStage, @@ -8,7 +7,6 @@ import { useTransactionModalStage, } from 'shared/transaction-modal'; import { TxStageSignOperationKeys } from 'shared/transaction-modal/tx-stages-composed/tx-stage-keys-operation'; -import { NodeOperatorId } from 'types'; const STAGE_OPERATION_ARGS = { operationText: 'Uploading', @@ -16,7 +14,7 @@ const STAGE_OPERATION_ARGS = { type Props = { keysCount: number; - amount: BigNumber; + amount: bigint; token: TOKENS; nodeOperatorId: NodeOperatorId; }; diff --git a/features/change-role/change-manager-role-page.tsx b/features/change-role/change-manager-role-page.tsx index 9b427ede..7095e1dd 100644 --- a/features/change-role/change-manager-role-page.tsx +++ b/features/change-role/change-manager-role-page.tsx @@ -3,15 +3,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { RolesPageSwitcher } from 'shared/navigate'; import { ChangeManagerRole } from './change-manager-role'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_ROLES } from 'faq'; export const ChangeManagerRolePage: FC = () => ( + ); diff --git a/features/change-role/change-manager-role.tsx b/features/change-role/change-manager-role.tsx index 5029fee5..e0f3e6c5 100644 --- a/features/change-role/change-manager-role.tsx +++ b/features/change-role/change-manager-role.tsx @@ -1,8 +1,7 @@ -import { ROLES } from 'consts/roles'; +import { ROLES } from '@lidofinance/lido-csm-sdk'; import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { ChangeRoleForm } from './change-role-form'; -import { Faq } from 'shared/components'; export const ChangeManagerRole = () => { const key = useWeb3Key(); @@ -12,7 +11,6 @@ export const ChangeManagerRole = () => { - ); }; diff --git a/features/change-role/change-reward-role-page.tsx b/features/change-role/change-reward-role-page.tsx index 56669429..d39532bc 100644 --- a/features/change-role/change-reward-role-page.tsx +++ b/features/change-role/change-reward-role-page.tsx @@ -1,17 +1,19 @@ import { FC } from 'react'; +import { FAQ_ROLES } from 'faq'; +import { Faq } from 'shared/components'; import { Layout } from 'shared/layout'; import { RolesPageSwitcher } from 'shared/navigate'; import { ChangeRewardRole } from './change-reward-role'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; export const ChangeRewardRolePage: FC = () => ( + ); diff --git a/features/change-role/change-reward-role.tsx b/features/change-role/change-reward-role.tsx index 03627d76..f10c0d02 100644 --- a/features/change-role/change-reward-role.tsx +++ b/features/change-role/change-reward-role.tsx @@ -1,9 +1,7 @@ +import { ROLES } from '@lidofinance/lido-csm-sdk'; import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; - +import { useWeb3Key } from 'shared/hooks'; import { ChangeRoleForm } from './change-role-form'; -import { ROLES } from 'consts/roles'; -import { Faq } from 'shared/components'; export const ChangeRewardRole = () => { const key = useWeb3Key(); @@ -12,7 +10,6 @@ export const ChangeRewardRole = () => { - ); }; diff --git a/features/change-role/change-role-form/change-role-form-loader.tsx b/features/change-role/change-role-form/change-role-form-loader.tsx index eaaf3c03..8a8ecb17 100644 --- a/features/change-role/change-role-form/change-role-form-loader.tsx +++ b/features/change-role/change-role-form/change-role-form-loader.tsx @@ -1,19 +1,13 @@ import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { ChangeRoleFormInputType, useChangeRoleFormData } from './context'; +import { FormLoader } from 'shared/hook-form/form-controller'; +import { useChangeRoleFormData } from './context'; import { Info } from './controls/info'; export const ChangeRoleFormLoader: FC = ({ children }) => { - const { isLoading } = useFormState(); - const { loading, isManagerReset, isRewardsChange, isPropose } = + const { isManagerReset, isRewardsChange, isPropose } = useChangeRoleFormData(); const isView = !(isManagerReset || isRewardsChange || isPropose); - return ( - - {isView ? : children} - - ); + return {isView ? : children}; }; diff --git a/features/change-role/change-role-form/change-role-form.tsx b/features/change-role/change-role-form/change-role-form.tsx index 4af6e537..22fe1f32 100644 --- a/features/change-role/change-role-form/change-role-form.tsx +++ b/features/change-role/change-role-form/change-role-form.tsx @@ -1,30 +1,33 @@ import { FC, memo } from 'react'; -import { ChangeRoleFormProvider } from './context'; - import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; import { ChangeRoleFormInfo } from './change-role-form-info'; -import { ChangeRoleFormProviderProps } from './context'; +import { + ChangeRoleDataProvider, + ChangeRoleDataProviderProps, + ChangeRoleFormProvider, +} from './context'; import { AddressInput } from './controls/address-input'; import { Info } from './controls/info'; import { SubmitButton } from './controls/submit-button'; -import { ChangeRoleFormLoader } from './change-role-form-loader'; // TODO: update layout title/subtitle -export const ChangeRoleForm: FC = memo((props) => { +export const ChangeRoleForm: FC = memo((props) => { return ( - - - - - - - - - - - - + + + + +
    + + + + + +
    +
    +
    +
    ); }); diff --git a/features/change-role/change-role-form/context/change-role-data-provider.tsx b/features/change-role/change-role-form/context/change-role-data-provider.tsx new file mode 100644 index 00000000..18456205 --- /dev/null +++ b/features/change-role/change-role-form/context/change-role-data-provider.tsx @@ -0,0 +1,95 @@ +import { ROLES } from '@lidofinance/lido-csm-sdk'; +import { + KEY_OPERATOR_INFO, + KEY_OPERATOR_IS_OWNER, + useDappStatus, + useNodeOperatorId, + useOperatorInfo, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import invariant from 'tiny-invariant'; +import { compareLowercase } from 'utils'; +import { type ChangeRoleFormNetworkData } from './types'; + +const useChangeRoleFormNetworkData: NetworkData< + ChangeRoleFormNetworkData, + ROLES +> = (role) => { + const { address } = useDappStatus(); + invariant(address); + + const nodeOperatorId = useNodeOperatorId(); + const infoQuery = useOperatorInfo(nodeOperatorId); + + const info = infoQuery.data; + const isInfoLoading = infoQuery.isPending; + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([KEY_OPERATOR_INFO, KEY_OPERATOR_IS_OWNER]); + }, [invalidate]); + + const currentAddress = + role === ROLES.REWARDS ? info?.rewardsAddress : info?.managerAddress; + const proposedAddress = + role === ROLES.REWARDS + ? info?.proposedRewardsAddress + : info?.proposedManagerAddress; + + const isManagerReset = + role === ROLES.MANAGER && + !info?.extendedManagerPermissions && + compareLowercase(info?.rewardsAddress, address) && + !compareLowercase(info?.managerAddress, address); + + const isRewardsChange = + role === ROLES.REWARDS && + !!info?.extendedManagerPermissions && + compareLowercase(info.managerAddress, address); + + const isPropose = + !isManagerReset && + !isRewardsChange && + compareLowercase(currentAddress, address); + + const extendedManagerPermissions = info?.extendedManagerPermissions; + + return { + data: { + address, + role, + currentAddress, + proposedAddress, + nodeOperatorId, + isManagerReset, + isRewardsChange, + isPropose, + extendedManagerPermissions, + } as ChangeRoleFormNetworkData, + isPending: isInfoLoading, + revalidate, + }; +}; + +export const useChangeRoleFormData = useFormData; + +export type ChangeRoleDataProviderProps = { role: ROLES }; + +export const ChangeRoleDataProvider: FC< + PropsWithChildren +> = ({ children, role }) => { + const networkData = useChangeRoleFormNetworkData(role); + + return ( + + {children} + + ); +}; diff --git a/features/change-role/change-role-form/context/change-role-form-provider.tsx b/features/change-role/change-role-form/context/change-role-form-provider.tsx index 2d9ebbf0..3604fc89 100644 --- a/features/change-role/change-role-form/context/change-role-form-provider.tsx +++ b/features/change-role/change-role-form/context/change-role-form-provider.tsx @@ -1,64 +1,45 @@ -import { ROLES } from 'consts/roles'; -import { FC, PropsWithChildren, useMemo } from 'react'; +import { ROLES } from '@lidofinance/lido-csm-sdk'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, + FormControllerProvider, + useFormDefaultValues, } from 'shared/hook-form/form-controller'; -import { type ChangeRoleFormInputType } from './types'; -import { useChangeRoleFormNetworkData } from './use-change-role-form-network-data'; +import { + ChangeRoleFormNetworkData, + type ChangeRoleFormInputType, +} from './types'; import { useChangeRoleSubmit } from './use-change-role-submit'; - -import { useFormData } from 'shared/hook-form/form-controller'; -import { type ChangeRoleFormNetworkData } from './types'; import { useChangeRoleValidation } from './use-change-role-validation'; -import { useGetDefaultValues } from './use-get-default-values'; - -export const useChangeRoleFormData = useFormData; export type ChangeRoleFormProviderProps = { role: ROLES }; export const ChangeRoleFormProvider: FC< PropsWithChildren -> = ({ children, role }) => { - const [networkData, revalidate] = useChangeRoleFormNetworkData({ role }); - const validationResolver = useChangeRoleValidation(networkData); +> = ({ children }) => { + const resolver = useChangeRoleValidation(); - const asyncDefaultValues = useGetDefaultValues(networkData); + const defaultValues = useFormDefaultValues< + ChangeRoleFormInputType, + ChangeRoleFormNetworkData + >((data) => ({ + isRevoke: false, + address: data.isManagerReset ? data.address : undefined, + })); const formObject = useForm({ - defaultValues: asyncDefaultValues, - resolver: validationResolver, + defaultValues, + resolver, mode: 'onChange', }); - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { changeRole } = useChangeRoleSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - ChangeRoleFormInputType, - ChangeRoleFormNetworkData - > = useMemo( - () => ({ - onSubmit: changeRole, - retryEvent, - }), - [changeRole, retryEvent], - ); + const submitter = useChangeRoleSubmit(); return ( - - - {children} - - + + {children} + ); }; diff --git a/features/change-role/change-role-form/context/index.ts b/features/change-role/change-role-form/context/index.ts index 6f271ce6..cc0632b8 100644 --- a/features/change-role/change-role-form/context/index.ts +++ b/features/change-role/change-role-form/context/index.ts @@ -1,2 +1,3 @@ +export * from './change-role-data-provider'; export * from './change-role-form-provider'; export * from './types'; diff --git a/features/change-role/change-role-form/context/types.ts b/features/change-role/change-role-form/context/types.ts index bf880e02..1d79f089 100644 --- a/features/change-role/change-role-form/context/types.ts +++ b/features/change-role/change-role-form/context/types.ts @@ -1,19 +1,19 @@ -import { ROLES } from 'consts/roles'; -import { LoadingRecord, NodeOperatorId } from 'types'; +import { NodeOperatorId, ROLES } from '@lidofinance/lido-csm-sdk'; +import { Address } from 'viem'; export type ChangeRoleFormInputType = { - address?: string; + address?: Address; isRevoke: boolean; }; export type ChangeRoleFormNetworkData = { - address: string; + address: Address; role: ROLES; - nodeOperatorId?: NodeOperatorId; - currentAddress?: string; - proposedAddress?: string; + nodeOperatorId: NodeOperatorId; + extendedManagerPermissions: boolean; + currentAddress: Address; + proposedAddress: Address; isManagerReset: boolean; isRewardsChange: boolean; isPropose: boolean; - loading: LoadingRecord<'info'>; }; diff --git a/features/change-role/change-role-form/context/use-change-role-form-network-data.tsx b/features/change-role/change-role-form/context/use-change-role-form-network-data.tsx deleted file mode 100644 index dffda9f0..00000000 --- a/features/change-role/change-role-form/context/use-change-role-form-network-data.tsx +++ /dev/null @@ -1,73 +0,0 @@ -import { ROLES } from 'consts/roles'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { useAccount, useNodeOperatorInfo } from 'shared/hooks'; -import invariant from 'tiny-invariant'; -import { compareLowercase } from 'utils'; -import { type ChangeRoleFormNetworkData } from './types'; - -export const useChangeRoleFormNetworkData = ({ - role, -}: { - role: ROLES; -}): [ChangeRoleFormNetworkData, () => Promise] => { - const { address } = useAccount(); - invariant(address); - - const nodeOperatorId = useNodeOperatorId(); - const { - data: info, - update: updateInfo, - initialLoading: isInfoLoading, - } = useNodeOperatorInfo(nodeOperatorId); - - // TODO: force udpate info - const revalidate = useCallback(async () => { - await Promise.allSettled([updateInfo()]); - }, [updateInfo]); - - const loading = useMemo( - () => ({ - isInfoLoading, - }), - [isInfoLoading], - ); - - const currentAddress = - role === ROLES.REWARDS ? info?.rewardAddress : info?.managerAddress; - const proposedAddress = - role === ROLES.REWARDS - ? info?.proposedRewardAddress - : info?.proposedManagerAddress; - - const isManagerReset = - role === ROLES.MANAGER && - !info?.extendedManagerPermissions && - compareLowercase(info?.rewardAddress, address) && - !compareLowercase(info?.managerAddress, address); - - const isRewardsChange = - role === ROLES.REWARDS && - !!info?.extendedManagerPermissions && - compareLowercase(info.managerAddress, address); - - const isPropose = - !isManagerReset && - !isRewardsChange && - compareLowercase(currentAddress, address); - - return [ - { - address, - role, - currentAddress, - proposedAddress, - nodeOperatorId, - isManagerReset, - isRewardsChange, - isPropose, - loading, - }, - revalidate, - ]; -}; diff --git a/features/change-role/change-role-form/context/use-change-role-submit.ts b/features/change-role/change-role-form/context/use-change-role-submit.ts index a60ba576..f803f25e 100644 --- a/features/change-role/change-role-form/context/use-change-role-submit.ts +++ b/features/change-role/change-role-form/context/use-change-role-submit.ts @@ -1,12 +1,15 @@ +import { + NodeOperatorId, + NodeOperatorShortInfo, + ROLES, + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useAppendOperator, useLidoSDK } from 'modules/web3'; import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; - -import { AddressZero } from '@ethersproject/constants'; -import { ROLES } from 'consts/roles'; -import { useCSModuleWeb3, useSendTx } from 'shared/hooks'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; +import { Address, zeroAddress } from 'viem'; import { ChangeRoleFormInputType, ChangeRoleFormNetworkData } from '.'; import { useConfirmReproposeModal, @@ -14,19 +17,14 @@ import { } from '../hooks/use-confirm-modal'; import { useTxModalStagesChangeRole } from '../hooks/use-tx-modal-stages-change-role'; -type UseChangeRoleOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - type ChangeRoleMethodParams = { - address: string; + address: Address; nodeOperatorId: NodeOperatorId; + callback: TransactionCallback; }; -// encapsulates eth/steth/wsteth flows const useChangeRoleTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); + const { csm } = useLidoSDK(); return useCallback( async ( @@ -34,67 +32,46 @@ const useChangeRoleTx = () => { role, isManagerReset, isRewardsChange, - }: { role: ROLES; isRewardsChange: boolean; isManagerReset: boolean }, + }: Pick< + ChangeRoleFormNetworkData, + 'role' | 'isManagerReset' | 'isRewardsChange' + >, params: ChangeRoleMethodParams, ) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - switch (true) { case isRewardsChange: - return { - tx: await CSModuleWeb3.populateTransaction.changeNodeOperatorRewardAddress( - params.nodeOperatorId, - params.address, - ), - txName: 'changeNodeOperatorRewardAddress', - }; + return csm.roles.changeRewardsRole(params); case isManagerReset: - return { - tx: await CSModuleWeb3.populateTransaction.resetNodeOperatorManagerAddress( - params.nodeOperatorId, - ), - txName: 'resetNodeOperatorManagerAddress', - }; + return csm.roles.resetManagerRole(params); case role === ROLES.REWARDS: - return { - tx: await CSModuleWeb3.populateTransaction.proposeNodeOperatorRewardAddressChange( - params.nodeOperatorId, - params.address, - ), - txName: 'proposeNodeOperatorRewardAddressChange', - }; + return csm.roles.proposeRewardsRole(params); case role === ROLES.MANAGER: - return { - tx: await CSModuleWeb3.populateTransaction.proposeNodeOperatorManagerAddressChange( - params.nodeOperatorId, - params.address, - ), - txName: 'proposeNodeOperatorManagerAddressChange', - }; + return csm.roles.proposeManagerRole(params); default: { throw new Error('Not implemented yet: true case'); } } }, - [CSModuleWeb3], + [csm], ); }; -export const useChangeRoleSubmit = ({ - onConfirm, - onRetry, -}: UseChangeRoleOptions) => { +export const useChangeRoleSubmit: FormSubmitterHook< + ChangeRoleFormInputType, + ChangeRoleFormNetworkData +> = () => { const { txModalStages } = useTxModalStagesChangeRole(); - const getTx = useChangeRoleTx(); - const sendTx = useSendTx(); + const changeRoleMethod = useChangeRoleTx(); + + const appendNO = useAppendOperator(); const confirmRepropose = useConfirmReproposeModal(); const confirmRewardsRole = useConfirmRewardsRoleModal(); - const changeRole = useCallback( + return useCallback( async ( - { address: addressRaw, isRevoke }: ChangeRoleFormInputType, + { address: addressRaw, isRevoke }, { nodeOperatorId, proposedAddress, @@ -103,13 +80,13 @@ export const useChangeRoleSubmit = ({ isPropose, isManagerReset, isRewardsChange, - }: ChangeRoleFormNetworkData, - ): Promise => { - const address = isRevoke ? AddressZero : addressRaw; - invariant(role, 'Role is not defined'); - invariant(address, 'Addess is not defined'); - invariant(currentAddress, 'CurrentAddess is not defined'); - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); + }, + { onConfirm, onRetry }, + ) => { + const address = isRevoke ? zeroAddress : (addressRaw ?? zeroAddress); + if (!address) { + throw new Error('Address is not defined'); + } if ( !isRevoke && @@ -130,7 +107,7 @@ export const useChangeRoleSubmit = ({ } try { - txModalStages.sign({ + const props = { address, currentAddress, role, @@ -138,50 +115,47 @@ export const useChangeRoleSubmit = ({ isRevoke, isRewardsChange, isManagerReset, - }); - - const tx = await getTx( + }; + + const callback: TransactionCallback = async ({ + stage, + payload, + }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign(props); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending(props, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success(props, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + const { result } = await changeRoleMethod( { role, isRewardsChange, isManagerReset }, { nodeOperatorId, address, + callback, }, ); - const [txHash, waitTx] = await runWithTransactionLogger( - 'ChangeRole signing', - () => sendTx(tx), - ); - - txModalStages.pending( - { - address, - currentAddress, - role, - isPropose, - isRevoke, - isRewardsChange, - isManagerReset, - }, - txHash, - ); - - await runWithTransactionLogger('ChangeRole block confirmation', waitTx); - await onConfirm?.(); - txModalStages.success( - { - address, - currentAddress, - role, - isPropose, - isRevoke, - isRewardsChange, - isManagerReset, - }, - txHash, - ); + if (result) { + appendNO(result); + } return true; } catch (error) { @@ -191,15 +165,9 @@ export const useChangeRoleSubmit = ({ [ confirmRewardsRole, confirmRepropose, - getTx, + changeRoleMethod, txModalStages, - onConfirm, - sendTx, - onRetry, + appendNO, ], ); - - return { - changeRole, - }; }; diff --git a/features/change-role/change-role-form/context/use-change-role-validation.ts b/features/change-role/change-role-form/context/use-change-role-validation.ts index 9cf6b206..a26ae454 100644 --- a/features/change-role/change-role-form/context/use-change-role-validation.ts +++ b/features/change-role/change-role-form/context/use-change-role-validation.ts @@ -1,34 +1,29 @@ -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; import { - handleResolverValidationError, + useFormValidation, ValidationError, } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; import { compareLowercase } from 'utils'; +import { isAddress } from 'viem'; import type { ChangeRoleFormInputType, ChangeRoleFormNetworkData, } from './types'; -import { isAddress } from 'ethers/lib/utils.js'; - -export const useChangeRoleValidation = ( - networkData: ChangeRoleFormNetworkData, -) => { - const dataPromise = useAwaitNetworkData(networkData); - - return useCallback>( - async (values) => { - try { - const { address, isRevoke } = values; - - const { currentAddress, proposedAddress, isPropose } = - await dataPromise; +export const useChangeRoleValidation = () => { + return useFormValidation( + 'address', + async ( + { address, isRevoke }, + { currentAddress, proposedAddress, isPropose }, + validate, + ) => { + await validate('address', () => { if (!isRevoke && !isAddress(address ?? '')) { throw new ValidationError('address', 'Specify a valid address'); } + }); + await validate('address', () => { if ( !isRevoke && isPropose && @@ -39,7 +34,9 @@ export const useChangeRoleValidation = ( 'Should not be same as current address', ); } + }); + await validate('address', () => { if ( !isRevoke && isPropose && @@ -50,19 +47,7 @@ export const useChangeRoleValidation = ( 'Should not be same as proposed address', ); } - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError( - error, - 'ChangeRoleForm', - 'address', - ); - } + }); }, - [dataPromise], ); }; diff --git a/features/change-role/change-role-form/context/use-get-default-values.tsx b/features/change-role/change-role-form/context/use-get-default-values.tsx deleted file mode 100644 index 870d5af2..00000000 --- a/features/change-role/change-role-form/context/use-get-default-values.tsx +++ /dev/null @@ -1,21 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { useAwaiter } from 'shared/hooks'; -import { ChangeRoleFormInputType, ChangeRoleFormNetworkData } from './types'; - -export const useGetDefaultValues = ({ - isManagerReset, - address, - loading: { isInfoLoading }, -}: ChangeRoleFormNetworkData) => { - const values: ChangeRoleFormInputType | undefined = useMemo(() => { - if (isInfoLoading) return undefined; - return { - isRevoke: false, - address: isManagerReset ? address : undefined, - }; - }, [address, isInfoLoading, isManagerReset]); - - const { awaiter } = useAwaiter(values); - - return useCallback(() => awaiter, [awaiter]); -}; diff --git a/features/change-role/change-role-form/controls/address-input.tsx b/features/change-role/change-role-form/controls/address-input.tsx index a2e87777..33a91828 100644 --- a/features/change-role/change-role-form/controls/address-input.tsx +++ b/features/change-role/change-role-form/controls/address-input.tsx @@ -4,7 +4,7 @@ import { useRole } from '../hooks/use-role'; import { useChangeRoleFormData } from '../context'; export const AddressInput: React.FC = () => { - const { isManagerReset } = useChangeRoleFormData(); + const { isManagerReset } = useChangeRoleFormData(true); const role = useRole(); return ( diff --git a/features/change-role/change-role-form/controls/info.tsx b/features/change-role/change-role-form/controls/info.tsx index 87edf5ec..430cc0cb 100644 --- a/features/change-role/change-role-form/controls/info.tsx +++ b/features/change-role/change-role-form/controls/info.tsx @@ -1,14 +1,23 @@ import { FC, useCallback } from 'react'; import { useFormContext } from 'react-hook-form'; -import { Latice, TitledAddress, Warning } from 'shared/components'; +import { Latice, Stack, TitledAddress, Warning } from 'shared/components'; import { SubmitButtonHookForm } from 'shared/hook-form/controls'; import { ChangeRoleFormInputType, useChangeRoleFormData } from '../context'; import { useRole } from '../hooks/use-role'; +import { Text } from '@lidofinance/lido-ui'; +import { isAddressEqual } from 'viem'; +import { ROLES } from '@lidofinance/lido-csm-sdk'; export const Info: FC = () => { - const role = useRole(); - const { currentAddress, proposedAddress, isPropose } = - useChangeRoleFormData(); + const roleTitle = useRole(); + const { + currentAddress, + proposedAddress, + isPropose, + address, + extendedManagerPermissions, + role, + } = useChangeRoleFormData(true); const { setValue } = useFormContext(); const revokeHandle = useCallback(() => { @@ -19,27 +28,47 @@ export const Info: FC = () => { <> - - - {isPropose && ( - - Revoke - - )} - + isYou={isAddressEqual(currentAddress, address)} + isOwner={ + extendedManagerPermissions + ? role === ROLES.MANAGER + : role === ROLES.REWARDS } - address={proposedAddress} /> + + {proposedAddress && ( + + + + {isPropose && ( + + Revoke + + )} + + } + address={proposedAddress} + /> + + Action required + + +
      +
    1. Connect to CSM UI with the proposed address
    2. +
    3. Go to Roles tab → Inbox requests to confirm the change
    4. +
    +
    +
    + )}
    ); diff --git a/features/change-role/change-role-form/controls/submit-button.tsx b/features/change-role/change-role-form/controls/submit-button.tsx index d694e17f..b2257093 100644 --- a/features/change-role/change-role-form/controls/submit-button.tsx +++ b/features/change-role/change-role-form/controls/submit-button.tsx @@ -7,9 +7,10 @@ import { useRole } from '../hooks/use-role'; export const SubmitButton = () => { const role = useRole(); - const { isPropose, isManagerReset } = useChangeRoleFormData(); + const { isPropose, isManagerReset } = useChangeRoleFormData(true); const { setValue } = useFormContext(); + // TODO: move this to somethere ? const clickHandle = useCallback(() => { setValue('isRevoke', false); }, [setValue]); @@ -22,9 +23,7 @@ export const SubmitButton = () => { return ( <> - - {title} - + {title} {isPropose && ( To complete the address change, the owner of the new address must diff --git a/features/change-role/change-role-form/hooks/use-role.ts b/features/change-role/change-role-form/hooks/use-role.ts index 9a309896..e824d159 100644 --- a/features/change-role/change-role-form/hooks/use-role.ts +++ b/features/change-role/change-role-form/hooks/use-role.ts @@ -2,6 +2,6 @@ import { getRoleTitle } from 'shared/node-operator'; import { useChangeRoleFormData } from '../context'; export const useRole = () => { - const { role } = useChangeRoleFormData(); + const { role } = useChangeRoleFormData(true); return getRoleTitle(role); }; diff --git a/features/change-role/change-role-form/hooks/use-tx-modal-stages-change-role.tsx b/features/change-role/change-role-form/hooks/use-tx-modal-stages-change-role.tsx index 45724103..77017183 100644 --- a/features/change-role/change-role-form/hooks/use-tx-modal-stages-change-role.tsx +++ b/features/change-role/change-role-form/hooks/use-tx-modal-stages-change-role.tsx @@ -1,7 +1,10 @@ -import { ROLES } from 'consts/roles'; +import { ROLES } from '@lidofinance/lido-csm-sdk'; +import { Text } from '@lidofinance/lido-ui'; import { capitalize } from 'lodash'; +import { Address as AddressComponent } from 'shared/components'; import { getRoleTitle } from 'shared/node-operator'; import { + AfterAddressProposed, TransactionModalTransitStage, TxStagePending, TxStageSign, @@ -9,10 +12,11 @@ import { getGeneralTransactionModalStages, useTransactionModalStage, } from 'shared/transaction-modal'; +import { Address } from 'viem'; type Props = { - address: string; - currentAddress: string; + address: Address; + currentAddress: Address; role: ROLES; isManagerReset: boolean; isRewardsChange: boolean; @@ -20,38 +24,78 @@ type Props = { isRevoke: boolean; }; -// TODO: show address with
    component const getTexts = (props: Props) => { return props.isManagerReset || props.isRewardsChange ? { sign: { title: `You are changing ${getRoleTitle(props.role)} address`, - description: `New address ${props.address}`, + description: ( + <> + New {getRoleTitle(props.role)} address is{' '} + + + + + ), }, success: { title: `${capitalize(getRoleTitle(props.role))} address has been changed`, - description: `New address ${props.address}`, + description: ( + <> + New {getRoleTitle(props.role)} address is{' '} + + + + + ), }, } : props.isRevoke ? { sign: { title: `You are revoking request for ${getRoleTitle(props.role)} address change`, - description: `Address stays ${props.currentAddress}`, + description: ( + <> + Address stays{' '} + + + + + ), }, success: { title: `Proposed request for ${getRoleTitle(props.role)} address has been revoked`, - description: `Address stays ${props.currentAddress}`, + description: ( + <> + Address stays{' '} + + + + + ), }, } : { sign: { title: `You are proposing ${getRoleTitle(props.role)} address change`, - description: `Proposed address ${props.address}`, + description: ( + <> + Proposed address{' '} + + + + + ), }, success: { title: `New ${getRoleTitle(props.role)} address has been proposed`, - description: `To complete the address change, the owner of the new address must confirm the change`, + description: ( + <> +
    +
    + + + ), }, }; }; diff --git a/features/claim-bond/claim-bond-form/claim-bond-form-info.tsx b/features/claim-bond/claim-bond-form/claim-bond-form-info.tsx index 3c5994f4..35c15a89 100644 --- a/features/claim-bond/claim-bond-form/claim-bond-form-info.tsx +++ b/features/claim-bond/claim-bond-form/claim-bond-form-info.tsx @@ -1,19 +1,13 @@ -import { Zero } from '@ethersproject/constants'; import { DataTable, DataTableRow } from '@lidofinance/lido-ui'; -import { TOKENS } from 'consts/tokens'; import { useWatch } from 'react-hook-form'; +import { Address } from 'shared/components'; import { FormatToken } from 'shared/formatters'; -import styled from 'styled-components'; +import { useBondWillReceive } from 'shared/hooks'; import { ClaimBondFormInputType, useClaimBondFormData } from './context'; -import { useBondReceiveAmount } from './hooks/use-bond-receive-amount'; -import { Address } from 'shared/components'; -import { - AddressContainerStyle, - AddressStyle, -} from 'shared/components/address/styles'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const ClaimBondFormInfo = () => { - const { rewardsAddress } = useClaimBondFormData(); + const { rewardsAddress, rewards } = useClaimBondFormData(true); const [token, amount, claimRewards] = useWatch< ClaimBondFormInputType, ['token', 'amount', 'claimRewards'] @@ -21,34 +15,37 @@ export const ClaimBondFormInfo = () => { name: ['token', 'amount', 'claimRewards'], }); - const bondReceive = useBondReceiveAmount(); + const [bondReceive] = useBondWillReceive( + token, + amount, + claimRewards ? rewards?.available : undefined, + ); return ( - + + <> Rewards Address ( -
    ) will receive - +
    + ) will receive + } + help="The recipient of the claim is the Rewards address. You can change the Rewards address on the Roles tab" > - + {claimRewards && ( - + )} ); }; - -const AddressStyled = styled.div` - ${AddressContainerStyle} { - display: inline-flex; - } - ${AddressStyle} { - font-weight: bold; - } -`; diff --git a/features/claim-bond/claim-bond-form/claim-bond-form.tsx b/features/claim-bond/claim-bond-form/claim-bond-form.tsx index ef4ff936..120bbf6e 100644 --- a/features/claim-bond/claim-bond-form/claim-bond-form.tsx +++ b/features/claim-bond/claim-bond-form/claim-bond-form.tsx @@ -1,12 +1,9 @@ import { FC, memo } from 'react'; -import { ClaimBondFormProvider } from './context'; +import { ClaimBondDataProvider, ClaimBondFormProvider } from './context'; import { FormBlock } from 'shared/components'; -import { - BaseFormLoader, - FormControllerStyled, -} from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; import { ClaimBondFormInfo } from './claim-bond-form-info'; import { AmountInput } from './controls/amount-input'; import { SourceSelect } from './controls/source-select'; @@ -15,18 +12,20 @@ import { TokenSelect } from './controls/token-select'; export const ClaimBondForm: FC = memo(() => { return ( - - - - - - - - - - - - - + + + + +
    + + + + + + +
    +
    +
    +
    ); }); diff --git a/features/claim-bond/claim-bond-form/context/claim-bond-data-provider.tsx b/features/claim-bond/claim-bond-form/context/claim-bond-data-provider.tsx new file mode 100644 index 00000000..dab46a30 --- /dev/null +++ b/features/claim-bond/claim-bond-form/context/claim-bond-data-provider.tsx @@ -0,0 +1,89 @@ +import { + KEY_OPERATOR_BALANCE, + KEY_OPERATOR_REWARDS, + useCsmStatus, + useIsContract, + useNodeOperatorId, + useOperatorBalance, + useOperatorInfo, + useOperatorRewards, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type ClaimBondFormNetworkData } from './types'; +import { useMaxValues } from './use-max-values'; + +const useClaimBondFormNetworkData: NetworkData< + ClaimBondFormNetworkData +> = () => { + const nodeOperatorId = useNodeOperatorId(); + + const bondQuery = useOperatorBalance(nodeOperatorId); + const rewardsQuery = useOperatorRewards(nodeOperatorId); + + const bond = bondQuery.data; + const rewards = rewardsQuery.data; + + const isBondLoading = bondQuery.isPending; + const isRewardsLoading = rewardsQuery.isPending; + + const { data: maxValues, isPending: isMaxValuesLoading } = useMaxValues({ + bond, + rewards, + }); + + const { data: nodeOperator, isPending: isInfoLoading } = + useOperatorInfo(nodeOperatorId); + + const rewardsAddress = nodeOperator?.rewardsAddress; + + const { data: isContract, isPending: isContractLoading } = + useIsContract(rewardsAddress); + + const { data: status, isPending: isStatusLoading } = useCsmStatus(); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([KEY_OPERATOR_BALANCE, KEY_OPERATOR_REWARDS]); + }, [invalidate]); + + const isPending = + isBondLoading || + isRewardsLoading || + isMaxValuesLoading || + isInfoLoading || + isContractLoading || + isStatusLoading; + + return { + data: { + nodeOperatorId, + bond, + rewards, + maxValues, + rewardsAddress, + isContract, + isPaused: status?.isPausedAccounting, + } as ClaimBondFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useClaimBondFormData = useFormData; + +export const ClaimBondDataProvider: FC = ({ children }) => { + const networkData = useClaimBondFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/claim-bond/claim-bond-form/context/claim-bond-form-provider.tsx b/features/claim-bond/claim-bond-form/context/claim-bond-form-provider.tsx index 4a1c4665..3bffe2be 100644 --- a/features/claim-bond/claim-bond-form/context/claim-bond-form-provider.tsx +++ b/features/claim-bond/claim-bond-form/context/claim-bond-form-provider.tsx @@ -1,60 +1,30 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, -} from 'shared/hook-form/form-controller'; -import { ClaimBondFormNetworkData, type ClaimBondFormInputType } from './types'; -import { useClaimBondFormNetworkData } from './use-claim-bond-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { ClaimBondUpdater } from './claim-bond-updater'; +import { type ClaimBondFormInputType } from './types'; +import { useClaimBondDefaultValues } from './use-claim-bond-default-values'; import { useClaimBondSubmit } from './use-claim-bond-submit'; import { useClaimBondValidation } from './use-claim-bond-validation'; -import { useFormRevalidate } from './use-form-revalidate'; -import { useGetDefaultValues } from './use-get-default-values'; - -export const useClaimBondFormData = useFormData; export const ClaimBondFormProvider: FC = ({ children }) => { - const [networkData, revalidate] = useClaimBondFormNetworkData(); - const validationResolver = useClaimBondValidation(networkData); - - const asyncDefaultValues = useGetDefaultValues(networkData); + const resolver = useClaimBondValidation(); + const defaultValues = useClaimBondDefaultValues(); const formObject = useForm({ - defaultValues: asyncDefaultValues, - resolver: validationResolver, + defaultValues, + resolver, mode: 'onChange', }); - useFormRevalidate(formObject); - - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { claimBond } = useClaimBondSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - ClaimBondFormInputType, - ClaimBondFormNetworkData - > = useMemo( - () => ({ - onSubmit: claimBond, - retryEvent, - }), - [claimBond, retryEvent], - ); + const submitter = useClaimBondSubmit(); return ( - - - {children} - - + + + {children} + ); }; diff --git a/features/claim-bond/claim-bond-form/context/claim-bond-updater.tsx b/features/claim-bond/claim-bond-form/context/claim-bond-updater.tsx new file mode 100644 index 00000000..f536d0eb --- /dev/null +++ b/features/claim-bond/claim-bond-form/context/claim-bond-updater.tsx @@ -0,0 +1,34 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { FC, useEffect } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { ClaimBondFormInputType } from './types'; +import { useClaimBondFormData } from './claim-bond-data-provider'; + +export const ClaimBondUpdater: FC = () => { + const [token, claimRewards, unlockedClaimTokens] = useWatch< + ClaimBondFormInputType, + ['token', 'claimRewards', 'unlockedClaimTokens'] + >({ name: ['token', 'claimRewards', 'unlockedClaimTokens'] }); + + const { trigger, setValue } = useFormContext(); + const { isContract } = useClaimBondFormData(); + + useEffect(() => { + void trigger('amount'); + // trigger is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token, claimRewards]); + + useEffect(() => { + if (!unlockedClaimTokens && isContract) { + setValue('token', TOKENS.wsteth, { + shouldTouch: true, + shouldValidate: true, + }); + } + // setValue is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [unlockedClaimTokens]); + + return null; +}; diff --git a/features/claim-bond/claim-bond-form/context/index.ts b/features/claim-bond/claim-bond-form/context/index.ts index f30d92f7..acd8920c 100644 --- a/features/claim-bond/claim-bond-form/context/index.ts +++ b/features/claim-bond/claim-bond-form/context/index.ts @@ -1,2 +1,3 @@ export * from './claim-bond-form-provider'; +export * from './claim-bond-data-provider'; export * from './types'; diff --git a/features/claim-bond/claim-bond-form/context/types.ts b/features/claim-bond/claim-bond-form/context/types.ts index 4ffa67ec..94465ccb 100644 --- a/features/claim-bond/claim-bond-form/context/types.ts +++ b/features/claim-bond/claim-bond-form/context/types.ts @@ -1,30 +1,24 @@ -import { type TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; import { BondBalance, - LoadingRecord, NodeOperatorId, - RewardsBalance, -} from 'types'; + Rewards, + TOKENS, +} from '@lidofinance/lido-csm-sdk'; import { MaxValues } from './use-max-values'; export type ClaimBondFormInputType = { token: TOKENS; - amount?: BigNumber; + amount?: bigint; claimRewards: boolean; - unlockClaimTokens: boolean; + unlockedClaimTokens: boolean; }; export type ClaimBondFormNetworkData = { - nodeOperatorId?: NodeOperatorId; - bond?: BondBalance; - rewards?: RewardsBalance; - maxValues?: MaxValues; - rewardsAddress?: string; - isContract?: boolean; - isSplitter?: boolean; - isPaused?: boolean; - loading: LoadingRecord< - 'bond' | 'rewards' | 'maxValues' | 'info' | 'contract' | 'status' - >; + nodeOperatorId: NodeOperatorId; + bond: BondBalance; + rewards: Rewards; + maxValues: MaxValues; + rewardsAddress: string; + isContract: boolean; + isPaused: boolean; }; diff --git a/features/claim-bond/claim-bond-form/context/use-claim-bond-default-values.ts b/features/claim-bond/claim-bond-form/context/use-claim-bond-default-values.ts new file mode 100644 index 00000000..66253b8c --- /dev/null +++ b/features/claim-bond/claim-bond-form/context/use-claim-bond-default-values.ts @@ -0,0 +1,13 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { useFormDefaultValues } from 'shared/hook-form/form-controller'; +import { ClaimBondFormInputType, ClaimBondFormNetworkData } from './types'; + +export const useClaimBondDefaultValues = () => { + return useFormDefaultValues( + (data) => ({ + token: data.isContract ? TOKENS.wsteth : TOKENS.steth, + claimRewards: data.rewards.available > 0n, + unlockedClaimTokens: false, + }), + ); +}; diff --git a/features/claim-bond/claim-bond-form/context/use-claim-bond-form-network-data.tsx b/features/claim-bond/claim-bond-form/context/use-claim-bond-form-network-data.tsx deleted file mode 100644 index 82daf947..00000000 --- a/features/claim-bond/claim-bond-form/context/use-claim-bond-form-network-data.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { - useCsmPaused, - useIsContract, - useNodeOperatorBalance, - useNodeOperatorInfo, - useNodeOperatorRewards, -} from 'shared/hooks'; -import { type ClaimBondFormNetworkData } from './types'; -import { useMaxValues } from './use-max-values'; - -export const useClaimBondFormNetworkData = (): [ - ClaimBondFormNetworkData, - () => Promise, -] => { - const nodeOperatorId = useNodeOperatorId(); - - const { - data: bond, - update: updateBond, - initialLoading: isBondLoading, - } = useNodeOperatorBalance(nodeOperatorId); - - const { - data: rewards, - update: updateRewards, - initialLoading: isRewardsLoading, - } = useNodeOperatorRewards(nodeOperatorId); - - const { data: maxValues, initialLoading: isMaxValuesLoading } = useMaxValues({ - bond, - rewards, - }); - - const { data: nodeOperator, initialLoading: isInfoLoading } = - useNodeOperatorInfo(nodeOperatorId); - - const rewardsAddress = nodeOperator?.rewardAddress; - - const { - isContract, - isSplitter, - isLoading: isContractLoading, - } = useIsContract(rewardsAddress); - - const { data: status, initialLoading: isStatusLoading } = useCsmPaused(); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateBond(), updateRewards()]); - }, [updateBond, updateRewards]); - - const loading = useMemo( - () => ({ - isBondLoading, - isRewardsLoading, - isMaxValuesLoading, - isInfoLoading, - isContractLoading, - isStatusLoading, - }), - [ - isBondLoading, - isContractLoading, - isInfoLoading, - isMaxValuesLoading, - isRewardsLoading, - isStatusLoading, - ], - ); - - return [ - { - nodeOperatorId, - bond, - rewards, - maxValues, - rewardsAddress, - isContract, - isSplitter, - isPaused: status?.isAccountingPaused, - loading, - }, - revalidate, - ]; -}; diff --git a/features/claim-bond/claim-bond-form/context/use-claim-bond-submit.ts b/features/claim-bond/claim-bond-form/context/use-claim-bond-submit.ts index d234a54b..845c3b0b 100644 --- a/features/claim-bond/claim-bond-form/context/use-claim-bond-submit.ts +++ b/features/claim-bond/claim-bond-form/context/use-claim-bond-submit.ts @@ -1,140 +1,73 @@ -import { BigNumber } from 'ethers'; -import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; - -import { Zero } from '@ethersproject/constants'; -import { TOKENS } from 'consts/tokens'; import { - useCSAccountingRPC, - useCSAccountingWeb3, - useCSModuleWeb3, - useSendTx, -} from 'shared/hooks'; + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; +import { useCallback } from 'react'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId, RewardProof } from 'types'; -import { runWithTransactionLogger } from 'utils'; -import { ClaimBondFormInputType, ClaimBondFormNetworkData } from '../context'; import { useTxModalStagesClaimBond } from '../hooks/use-tx-modal-stages-claim-bond'; +import { ClaimBondFormInputType, ClaimBondFormNetworkData } from './types'; -type UseClaimBondOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type ClaimBondMethodParams = { - nodeOperatorId: NodeOperatorId; - amount: BigNumber; - rewards: RewardProof; -}; - -// encapsulates eth/steth/wsteth flows -const useClaimBondTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - const CSAccountingWeb3 = useCSAccountingWeb3(); - - return useCallback( - async (token: TOKENS, params: ClaimBondMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - invariant(CSAccountingWeb3, 'must have CSAccountingWeb3'); - - if (params.amount.isZero()) - return { - tx: await CSAccountingWeb3.populateTransaction.pullFeeRewards( - params.nodeOperatorId, - params.rewards.shares, - params.rewards.proof, - ), - txName: 'pullFeeRewards', - }; - switch (token) { - case TOKENS.ETH: - return { - tx: await CSModuleWeb3.populateTransaction.claimRewardsUnstETH( - params.nodeOperatorId, - params.amount, - params.rewards.shares, - params.rewards.proof, - ), - txName: 'claimRewardsUnstETH', - }; - case TOKENS.STETH: - return { - tx: await CSModuleWeb3.populateTransaction.claimRewardsStETH( - params.nodeOperatorId, - params.amount, - params.rewards.shares, - params.rewards.proof, - ), - txName: 'claimRewardsStETH', - }; - case TOKENS.WSTETH: - return { - tx: await CSModuleWeb3.populateTransaction.claimRewardsWstETH( - params.nodeOperatorId, - params.amount, - params.rewards.shares, - params.rewards.proof, - ), - txName: 'claimRewardsWstETH', - }; - } - }, - [CSAccountingWeb3, CSModuleWeb3], - ); -}; - -export const useClaimBondSubmit = ({ - onConfirm, - onRetry, -}: UseClaimBondOptions) => { +export const useClaimBondSubmit: FormSubmitterHook< + ClaimBondFormInputType, + ClaimBondFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesClaimBond(); - const CSAccounting = useCSAccountingRPC(); - - const getTx = useClaimBondTx(); - const sendTx = useSendTx(); - const claimBond = useCallback( + return useCallback( async ( - { amount = Zero, token, claimRewards }: ClaimBondFormInputType, - { nodeOperatorId, rewards }: ClaimBondFormNetworkData, - ): Promise => { - invariant(token, 'Token is not defined'); - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); - + { amount = 0n, token, claimRewards }, + { nodeOperatorId, rewards }, + { onConfirm, onRetry }, + ) => { try { - txModalStages.sign({ amount, token }); + const args = { + amount, + token, + claimRewards, + rewards: rewards?.available, + }; + + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign(args); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending(args, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success(args, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; - const tx = await getTx(token, { + await csm.bond.claimBond({ nodeOperatorId, + token, amount, - rewards: (claimRewards && rewards) || { shares: Zero, proof: [] }, + proof: rewards?.proof, + shares: rewards?.shares, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'ClaimBond signing', - () => sendTx(tx), - ); - - txModalStages.pending({ amount, token }, txHash); - - await runWithTransactionLogger('ClaimBond block confirmation', waitTx); - await onConfirm?.(); - // TODO: move to onConfirm - const { current } = await CSAccounting.getBondSummary(nodeOperatorId); - - txModalStages.success({ balance: current, amount, token }, txHash); - return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [getTx, txModalStages, onConfirm, CSAccounting, sendTx, onRetry], + [csm.bond, txModalStages], ); - - return { - claimBond, - }; }; diff --git a/features/claim-bond/claim-bond-form/context/use-claim-bond-validation.ts b/features/claim-bond/claim-bond-form/context/use-claim-bond-validation.ts index 2ba5374b..ffc01128 100644 --- a/features/claim-bond/claim-bond-form/context/use-claim-bond-validation.ts +++ b/features/claim-bond/claim-bond-form/context/use-claim-bond-validation.ts @@ -1,53 +1,41 @@ -import { formatEther } from '@ethersproject/units'; -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; import { - handleResolverValidationError, - validateBignumberMax, + useFormValidation, + validateBigintMax, validateEtherAmount, } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; import { getTokenDisplayName } from 'utils'; +import { formatEther } from 'viem'; import type { ClaimBondFormInputType, ClaimBondFormNetworkData } from './types'; -export const useClaimBondValidation = ( - networkData: ClaimBondFormNetworkData, -) => { - const contextPromise = useAwaitNetworkData(networkData); - return useCallback>( - async (values, _, options) => { - try { - const { token, amount, claimRewards } = values; - const { maxValues, rewards } = await contextPromise; +export const useClaimBondValidation = () => { + return useFormValidation( + 'token', + async ( + { token, amount, claimRewards }, + { maxValues, rewards }, + validate, + ) => { + // FIXME: validate on submit that token and amount is defined - if (options.names?.includes('amount')) { - validateEtherAmount( + await validate('amount', () => { + validateEtherAmount( + 'amount', + amount, + token, + Boolean(claimRewards && rewards?.available), + ); + + const maxAmount = maxValues?.[token][Number(claimRewards)]; + if (amount && maxAmount) + validateBigintMax( 'amount', amount, - token, - claimRewards && rewards?.available.gt(0), - ); - - const maxAmount = maxValues?.[token][Number(claimRewards)]; - if (amount && maxAmount) - validateBignumberMax( - 'amount', - amount, + maxAmount, + `Entered ${getTokenDisplayName(token)} amount exceeds available to claim of ${formatEther( maxAmount, - `Entered ${getTokenDisplayName(token)} amount exceeds available to claim of ${formatEther( - maxAmount, - )}`, - ); - } - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError(error, 'ClaimBondForm', 'token'); - } + )}`, + ); + }); }, - [contextPromise], ); }; diff --git a/features/claim-bond/claim-bond-form/context/use-form-revalidate.ts b/features/claim-bond/claim-bond-form/context/use-form-revalidate.ts deleted file mode 100644 index 1bcfad03..00000000 --- a/features/claim-bond/claim-bond-form/context/use-form-revalidate.ts +++ /dev/null @@ -1,29 +0,0 @@ -import { UseFormReturn } from 'react-hook-form'; -import { ClaimBondFormInputType } from './types'; -import { useEffect } from 'react'; -import { TOKENS } from 'consts/tokens'; - -export const useFormRevalidate = ({ - watch, - trigger, - setValue, -}: UseFormReturn) => { - const [token, claimRewards, unlockClaimTokens] = watch([ - 'token', - 'claimRewards', - 'unlockClaimTokens', - ]); - - useEffect(() => { - void trigger('amount'); - }, [token, claimRewards, trigger]); - - useEffect(() => { - if (!unlockClaimTokens) { - setValue('token', TOKENS.WSTETH, { - shouldTouch: true, - shouldValidate: true, - }); - } - }, [setValue, unlockClaimTokens]); -}; diff --git a/features/claim-bond/claim-bond-form/context/use-get-default-values.ts b/features/claim-bond/claim-bond-form/context/use-get-default-values.ts deleted file mode 100644 index cfd196f9..00000000 --- a/features/claim-bond/claim-bond-form/context/use-get-default-values.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { TOKENS } from 'consts/tokens'; -import { useMemo } from 'react'; -import { useDefaultValues } from 'shared/hooks'; -import { ClaimBondFormInputType, ClaimBondFormNetworkData } from './types'; - -export const useGetDefaultValues = ({ - rewards, - isSplitter, - isContract, - loading, -}: ClaimBondFormNetworkData) => { - return useDefaultValues( - useMemo(() => { - if (Object.values(loading).some(Boolean)) { - return undefined; - } - - return { - token: isContract ? TOKENS.WSTETH : TOKENS.STETH, - claimRewards: rewards?.available.gt(0) ?? false, - unlockClaimTokens: !isSplitter, - }; - }, [isContract, isSplitter, loading, rewards?.available]), - ); -}; diff --git a/features/claim-bond/claim-bond-form/context/use-max-values.ts b/features/claim-bond/claim-bond-form/context/use-max-values.ts index 82e1ea7c..2a3071d6 100644 --- a/features/claim-bond/claim-bond-form/context/use-max-values.ts +++ b/features/claim-bond/claim-bond-form/context/use-max-values.ts @@ -1,42 +1,49 @@ -import { MAX_ETH_AMOUNT, TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; import { - useAvailableToClaim, - useMergeSwr, - useWstethBySteth, -} from 'shared/hooks'; -import { BondBalance, RewardsBalance } from 'types'; + BondBalance, + PerToken, + Rewards, + TOKENS, +} from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { MAX_ETH_AMOUNT } from 'consts/tokens'; +import { useWstethBySteth } from 'modules/web3'; +import { calculateAvailableToClaim } from 'utils'; -const limitMaxEth = (values: BigNumber[]) => - values.map((value) => (value.gt(MAX_ETH_AMOUNT) ? MAX_ETH_AMOUNT : value)); +const limitMaxEth = (value: bigint) => + value > MAX_ETH_AMOUNT ? MAX_ETH_AMOUNT : value; type Props = { bond?: BondBalance; - rewards?: RewardsBalance; - lockedBond?: BigNumber; + rewards?: Rewards; + lockedBond?: bigint; }; -export type MaxValues = Record< - TOKENS, - [BigNumber | undefined, BigNumber | undefined] ->; +export type MaxValues = PerToken<[bigint, bigint]>; +// TODO: reuse export const useMaxValues = ({ bond, rewards }: Props) => { - const maxBond = useAvailableToClaim({ + const maxBond = calculateAvailableToClaim({ bond, rewards: undefined, }); - const maxBondAndRewards = useAvailableToClaim({ + const maxBondAndRewards = calculateAvailableToClaim({ bond, rewards, }); - const bondSwr = useWstethBySteth(maxBond); - const bondAndRewardsSwr = useWstethBySteth(maxBondAndRewards); + const { data: maxBondWsteth } = useWstethBySteth(maxBond); + const { data: maxBondAndRewardsWsteth } = useWstethBySteth(maxBondAndRewards); - return useMergeSwr([bondSwr, bondAndRewardsSwr], { - [TOKENS.ETH]: limitMaxEth([maxBond, maxBondAndRewards]), - [TOKENS.STETH]: [maxBond, maxBondAndRewards], - [TOKENS.WSTETH]: [bondSwr.data, bondAndRewardsSwr.data], - } as MaxValues); + return useQuery({ + enabled: + maxBondWsteth !== undefined && maxBondAndRewardsWsteth !== undefined, + queryKey: ['use-max-values', { bond, rewards: rewards?.available }], + queryFn: () => + ({ + [TOKENS.eth]: [limitMaxEth(maxBond), limitMaxEth(maxBondAndRewards)], + [TOKENS.steth]: [maxBond, maxBondAndRewards], + // eslint-disable-next-line @typescript-eslint/no-non-null-assertion + [TOKENS.wsteth]: [maxBondWsteth!, maxBondAndRewardsWsteth!], + }) as MaxValues, + }); }; diff --git a/features/claim-bond/claim-bond-form/controls/amount-input.tsx b/features/claim-bond/claim-bond-form/controls/amount-input.tsx index ebdc3d38..6dc3ad3d 100644 --- a/features/claim-bond/claim-bond-form/controls/amount-input.tsx +++ b/features/claim-bond/claim-bond-form/controls/amount-input.tsx @@ -1,22 +1,21 @@ -import { TOKENS } from 'consts/tokens'; import { useWatch } from 'react-hook-form'; import { FormTitle, Note } from 'shared/components'; import { FormatToken } from 'shared/formatters'; import { TokenAmountInputHookForm } from 'shared/hook-form/controls'; import { ClaimBondFormInputType, useClaimBondFormData } from '../context'; import { useInsufficientBondCoverAmount } from '../hooks/use-insufficient-bond-cover-amount'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const AmountInput: React.FC = () => { const [token, claimRewards] = useWatch< ClaimBondFormInputType, ['token', 'claimRewards'] >({ name: ['token', 'claimRewards'] }); - const { maxValues } = useClaimBondFormData(); - const maxAmount = maxValues?.[token][Number(claimRewards)]; + const { maxValues } = useClaimBondFormData(true); + const maxAmount = maxValues[token][Number(claimRewards)]; const coverInsufficientAmount = useInsufficientBondCoverAmount(); - // TODO: reset amount on token switch, on disabled return ( <> Enter token amount @@ -24,11 +23,11 @@ export const AmountInput: React.FC = () => { fieldName="amount" token={token} maxValue={maxAmount} - disabled={maxAmount?.eq(0)} + disabled={!maxAmount} /> - {coverInsufficientAmount && ( + {!!coverInsufficientAmount && ( - {' '} + {' '} of Rewards will compensate for the Insufficient bond )} diff --git a/features/claim-bond/claim-bond-form/controls/source-select.tsx b/features/claim-bond/claim-bond-form/controls/source-select.tsx index 63357616..4fbb14a2 100644 --- a/features/claim-bond/claim-bond-form/controls/source-select.tsx +++ b/features/claim-bond/claim-bond-form/controls/source-select.tsx @@ -1,6 +1,7 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { Checkbox } from '@lidofinance/lido-ui'; import { BOND_EXCESS, BOND_INSUFFICIENT } from 'consts/text'; -import { TOKENS } from 'consts/tokens'; +import { useFrameInfo } from 'modules/web3'; import { FC, useEffect } from 'react'; import { useController, useFormContext } from 'react-hook-form'; import { @@ -10,10 +11,14 @@ import { Stack, TitledSelectableAmount, } from 'shared/components'; +import { formatDate } from 'utils'; import { ClaimBondFormInputType, useClaimBondFormData } from '../context'; export const SourceSelect: FC = () => { - const { bond, rewards, loading, maxValues } = useClaimBondFormData(); + const { bond, rewards, maxValues } = useClaimBondFormData(true); + const { data: nextDistribution } = useFrameInfo( + (data) => data.lastReport + data.frameDuration, + ); const { field } = useController({ name: 'claimRewards', @@ -22,7 +27,8 @@ export const SourceSelect: FC = () => { const { setValue } = useFormContext(); - const availableToClaim = maxValues?.[TOKENS.STETH][Number(field.value)]; + const availableToClaim = maxValues[TOKENS.steth][Number(field.value)]; + const nextRewardsDate = formatDate(nextDistribution); useEffect(() => { if (bond?.isInsufficient) { @@ -30,20 +36,15 @@ export const SourceSelect: FC = () => { } }, [bond?.isInsufficient, setValue]); - const showLockedBond = bond?.locked.gt(0); + const showLockedBond = !!bond?.locked; return ( <> - + Available to claim - + - + { {...field} value="" checked={!!field.value} - disabled={!rewards?.available.gt(0)} + disabled={!rewards?.available} /> } - help="The rewards amount available to claim, obtained from all active validators of the Node Operator" - loading={loading.isRewardsLoading} + help={`The rewards amount available to claim, obtained from all active validators of the Node Operator. Next rewards distribution is expected on ${nextRewardsDate}`} + helpIcon="calendar" amount={rewards?.available} - token={TOKENS.STETH} + token={TOKENS.steth} + data-testid="rewardsSource" /> { } help={ bond?.isInsufficient - ? 'Insufficient bond is the missing amount of stETH required to cover all operator’s keys. In case of a bond insufficient, "unbonded" validators are requested for exit by the protocol' - : 'The bond amount available to claim without having to exit validators' + ? 'Insufficient bond is the missing amount of stETH required to cover all operator’s keys' + : 'The bond amount available to claim without having to exit validators. Increases daily' } + helpIcon={bond?.isInsufficient ? undefined : 'calendar'} sign={bond?.isInsufficient ? 'minus' : 'plus'} - loading={loading.isBondLoading} amount={bond?.delta} - token={TOKENS.STETH} + token={TOKENS.steth} + data-testid="excessBondSource" /> {showLockedBond && ( } - help="Bond may be locked in the case of an MEV stealing event reported by a dedicated committee. This measure ensures that Node Operators are held accountable for any misbehavior or rule violations." - loading={loading.isBondLoading} + help="Bond may be locked in the case of an MEV stealing event reported by a dedicated committee. This measure ensures that Node Operators are held accountable for any misbehavior or rule violations" amount={bond?.locked} - token={TOKENS.ETH} + token={TOKENS.eth} sign="minus" /> )} diff --git a/features/claim-bond/claim-bond-form/controls/submit-button.tsx b/features/claim-bond/claim-bond-form/controls/submit-button.tsx index 82909fe4..35c88071 100644 --- a/features/claim-bond/claim-bond-form/controls/submit-button.tsx +++ b/features/claim-bond/claim-bond-form/controls/submit-button.tsx @@ -1,22 +1,31 @@ +import { useWatch } from 'react-hook-form'; import { PausedButton, SubmitButtonHookForm } from 'shared/hook-form/controls'; import { ClaimBondFormInputType, useClaimBondFormData } from '../context'; -import { useWatch } from 'react-hook-form'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const SubmitButton = () => { - const claimRewards = useWatch({ - name: 'claimRewards', + const [claimRewards, token, amount] = useWatch< + ClaimBondFormInputType, + ['claimRewards', 'token', 'amount'] + >({ + name: ['claimRewards', 'token', 'amount'], }); - const { isPaused } = useClaimBondFormData(); + const { isPaused, maxValues } = useClaimBondFormData(true); if (isPaused) { return ; } - // TODO: disable - // TODO: nothing to claim - return ( - - {claimRewards ? 'Claim Rewards and Bond' : 'Claim Bond'} - - ); + const maxWithRewards = maxValues[TOKENS.steth][1]; + const isNothingToClaim = !maxWithRewards; + const isPullRewards = amount !== undefined && amount === 0n && claimRewards; + const text = isNothingToClaim + ? 'Nothing to claim' + : token === TOKENS.eth + ? 'Request withdrawal to the Rewards Address' + : isPullRewards + ? 'Claim rewards to the Bond balance' + : 'Claim to the Rewards Address'; + + return {text}; }; diff --git a/features/claim-bond/claim-bond-form/controls/token-select.tsx b/features/claim-bond/claim-bond-form/controls/token-select.tsx index fa76423e..d3cf8d4b 100644 --- a/features/claim-bond/claim-bond-form/controls/token-select.tsx +++ b/features/claim-bond/claim-bond-form/controls/token-select.tsx @@ -1,11 +1,11 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { Checkbox } from '@lidofinance/lido-ui'; +import { INSTANT_WAITING_TIME } from 'consts'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { TOKENS } from 'consts/tokens'; import { PATH } from 'consts/urls'; import { useController, useWatch } from 'react-hook-form'; import { FormTitle, - MatomoLink, Note, Stack, TokenAmount, @@ -16,26 +16,32 @@ import { TokenButtonsHookForm } from 'shared/hook-form/controls'; import { LocalLink } from 'shared/navigate'; import { getTokenDisplayName } from 'utils'; import { ClaimBondFormInputType, useClaimBondFormData } from '../context'; +import { useWithdrawalWaitingTime } from '../hooks/use-withdrawal-waiting-time'; export const TokenSelect: React.FC = () => { const [token, claimRewards] = useWatch< ClaimBondFormInputType, ['token', 'claimRewards'] >({ name: ['token', 'claimRewards'] }); - const { loading, maxValues, isContract, isSplitter } = useClaimBondFormData(); - const isLoading = loading.isBondLoading || loading.isRewardsLoading; + const { maxValues, isContract } = useClaimBondFormData(true); + + const maxEthAmount = maxValues?.[TOKENS.eth]?.[1]; + const { + data: { text: waitingTimeValue } = {}, + isPending: isWaitingTimeLoading, + } = useWithdrawalWaitingTime(maxEthAmount); const { field: unlockField } = useController< ClaimBondFormInputType, - 'unlockClaimTokens' + 'unlockedClaimTokens' >({ - name: 'unlockClaimTokens', + name: 'unlockedClaimTokens', }); return ( <> Choose a token to claim - {isContract && !isSplitter && ( + {isContract && ( The Rewards Address of your Node Operator seems to be a smart contract. Please ensure the smart contract you use for the Reward @@ -45,57 +51,56 @@ export const TokenSelect: React.FC = () => { )} ), - [TOKENS.STETH]: ( + [TOKENS.steth]: ( ), - [TOKENS.WSTETH]: ( + [TOKENS.wsteth]: ( ), }} /> - {token === TOKENS.ETH && ( + {token === TOKENS.eth && ( After receiving NFT you will need to claim ETH manually. Follow{' '} FAQ @@ -103,21 +108,13 @@ export const TokenSelect: React.FC = () => { for more details. )} - {isSplitter && ( + {isContract && ( <> - The Rewards Address of your Node Operator is a splitter contract. It - is strongly recommended to claim bond and rewards in wstETH only. - ETH withdrawal NFT is not compatible with the splitter, while a - rebasing token like stETH may not receive incremental rewards. More - information can be found in the{' '} - - splits.org documentation - - . + The Rewards Address of your Node Operator seems to be a smart + contract. Please ensure the smart contract you use for the Reward + Address is compatible with the chosen token for claiming of your + bond/rewards. { - const [token, amount] = useWatch< - ClaimBondFormInputType, - ['token', 'amount', 'claimRewards'] - >({ - name: ['token', 'amount', 'claimRewards'], - }); - - const { rewards } = useClaimBondFormData(); - - const stethAmount = useStethAmount(token, amount ?? Zero); - const bondReceive = rewards?.available.sub(stethAmount ?? Zero) ?? Zero; - - return bondReceive.lt(0) ? Zero : bondReceive; -}; diff --git a/features/claim-bond/claim-bond-form/hooks/use-insufficient-bond-cover-amount.ts b/features/claim-bond/claim-bond-form/hooks/use-insufficient-bond-cover-amount.ts index 6a8d0e2e..8e1fc7bc 100644 --- a/features/claim-bond/claim-bond-form/hooks/use-insufficient-bond-cover-amount.ts +++ b/features/claim-bond/claim-bond-form/hooks/use-insufficient-bond-cover-amount.ts @@ -1,11 +1,10 @@ -import { Zero } from '@ethersproject/constants'; import { useClaimBondFormData } from '../context'; export const useInsufficientBondCoverAmount = () => { const { bond, rewards } = useClaimBondFormData(); return bond?.isInsufficient - ? bond.delta.gt(rewards?.available ?? Zero) + ? bond.delta > (rewards?.available ?? 0n) ? rewards?.available : bond.delta : undefined; diff --git a/features/claim-bond/claim-bond-form/hooks/use-steth-amount.ts b/features/claim-bond/claim-bond-form/hooks/use-steth-amount.ts deleted file mode 100644 index 275118a2..00000000 --- a/features/claim-bond/claim-bond-form/hooks/use-steth-amount.ts +++ /dev/null @@ -1,11 +0,0 @@ -import { TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; -import { useStethByWsteth } from 'shared/hooks'; - -export const useStethAmount = (token: TOKENS, amount?: BigNumber) => { - const { data: wstethToSteth } = useStethByWsteth( - (token === TOKENS.WSTETH && amount) || undefined, - ); - - return token === TOKENS.WSTETH ? wstethToSteth : amount; -}; diff --git a/features/claim-bond/claim-bond-form/hooks/use-tx-modal-stages-claim-bond.tsx b/features/claim-bond/claim-bond-form/hooks/use-tx-modal-stages-claim-bond.tsx index 97c2c312..1837c3aa 100644 --- a/features/claim-bond/claim-bond-form/hooks/use-tx-modal-stages-claim-bond.tsx +++ b/features/claim-bond/claim-bond-form/hooks/use-tx-modal-stages-claim-bond.tsx @@ -1,28 +1,26 @@ -import type { BigNumber } from 'ethers'; - -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { getExternalLinks } from 'consts/external-links'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { PATH } from 'consts/urls'; import { MatomoLink } from 'shared/components'; import { TxLinkEtherscan } from 'shared/components/tx-link-etherscan'; +import { LocalLink } from 'shared/navigate'; import { TransactionModalTransitStage, TxAmount, - TxStageOperationSucceedBalanceShown, - TxStageSignOperationAmount, + TxStageClaim, TxStageSuccess, getGeneralTransactionModalStages, useTransactionModalStage, } from 'shared/transaction-modal'; -import { getExternalLinks } from 'consts/external-links'; -import { LocalLink } from 'shared/navigate'; -import { PATH } from 'consts/urls'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -const STAGE_OPERATION_ARGS = { - operationText: 'Claiming Bond', +type Props = { + amount: bigint; + token: TOKENS; + claimRewards: boolean; + rewards?: bigint; }; - -type Props = { amount: BigNumber; token: TOKENS }; -type SuccessProps = { amount: BigNumber; balance: BigNumber; token: TOKENS }; +type SuccessProps = { amount: bigint; token: TOKENS }; const { stakeWidget } = getExternalLinks(); @@ -31,44 +29,25 @@ const getTxModalStagesClaimBond = ( ) => ({ ...getGeneralTransactionModalStages(transitStage), - sign: ({ amount, token }: Props) => - transitStage( - , - ), + sign: (props: Props) => transitStage(), - pending: ({ amount, token }: Props, txHash?: string) => - transitStage( - , - ), + pending: (props: Props, txHash?: string) => + transitStage(), - success: ({ amount, balance, token }: SuccessProps, txHash?: string) => + success: ({ amount, token }: SuccessProps, txHash?: string) => transitStage( - token === TOKENS.ETH ? ( - // TODO: matomo events + token === TOKENS.eth ? ( Request withdrawal of{' '} - has been sent. + has been sent. Check{' '} - + Claim tab on the Lido Staking Widget {' '} to view your withdrawal requests or view your transaction on{' '} @@ -78,7 +57,7 @@ const getTxModalStagesClaimBond = ( Add NFT to your wallet to monitor the status of your request. This guide @@ -88,11 +67,14 @@ const getTxModalStagesClaimBond = ( } /> ) : ( - + Transaction can be viewed on{' '} + . + + } /> ), { diff --git a/features/claim-bond/claim-bond-form/hooks/use-withdrawal-waiting-time.ts b/features/claim-bond/claim-bond-form/hooks/use-withdrawal-waiting-time.ts new file mode 100644 index 00000000..f6d823f3 --- /dev/null +++ b/features/claim-bond/claim-bond-form/hooks/use-withdrawal-waiting-time.ts @@ -0,0 +1,45 @@ +import { LidoSDKWithdraw } from '@lidofinance/lido-ethereum-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { parseISO } from 'date-fns'; +import { useLidoSDK } from 'modules/web3'; +import { plural } from 'utils'; +import { countDaysLeft } from 'utils/format-date'; + +type WaitingTimeByAmountResponse = Awaited< + ReturnType +>; + +export const useWithdrawalWaitingTime = (amount?: bigint) => { + const { withdraw } = useLidoSDK(); + + return useQuery({ + queryKey: ['withdrawal-waiting-time', amount?.toString()], + enabled: amount !== undefined, + ...STRATEGY_CONSTANT, + queryFn: async () => + withdraw.waitingTime.getWithdrawalWaitingTimeByAmount({ + amount, + }), + select: selectWithdrawalWaitingTime, + }); +}; + +export const selectWithdrawalWaitingTime = ( + data: WaitingTimeByAmountResponse, +) => { + const days = + (countDaysLeft(parseISO(data?.requestInfo?.finalizationAt)) ?? 0) + 1; + + if (Number.isNaN(days) || days < 0) { + return { + days: 0, + text: '—', + }; + } + + return { + days, + text: `~ ${days} ${plural({ value: days, variants: ['day', 'days'] })}`, + }; +}; diff --git a/features/claim-bond/claim-bond-page.tsx b/features/claim-bond/claim-bond-page.tsx index d88a3bbb..6a5a85de 100644 --- a/features/claim-bond/claim-bond-page.tsx +++ b/features/claim-bond/claim-bond-page.tsx @@ -3,15 +3,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { BondPageSwitcher } from 'shared/navigate'; import { ClaimBond } from './claim-bond'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_BOND } from 'faq'; export const ClaimBondPage: FC = () => ( + ); diff --git a/features/claim-bond/claim-bond.tsx b/features/claim-bond/claim-bond.tsx index 2dc63a7c..752bad13 100644 --- a/features/claim-bond/claim-bond.tsx +++ b/features/claim-bond/claim-bond.tsx @@ -1,8 +1,7 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { ClaimBondForm } from './claim-bond-form'; -import { Faq } from 'shared/components'; export const ClaimBond = () => { const key = useWeb3Key(); @@ -11,7 +10,6 @@ export const ClaimBond = () => { - ); }; diff --git a/features/claim-type/claim-type-form/claim-type-form-info.tsx b/features/claim-type/claim-type-form/claim-type-form-info.tsx new file mode 100644 index 00000000..39584f4b --- /dev/null +++ b/features/claim-type/claim-type-form/claim-type-form-info.tsx @@ -0,0 +1,5 @@ +import { DataTable } from '@lidofinance/lido-ui'; + +export const ClaimTypeFormInfo = () => { + return ; +}; diff --git a/features/claim-type/claim-type-form/claim-type-form-loader.tsx b/features/claim-type/claim-type-form/claim-type-form-loader.tsx new file mode 100644 index 00000000..e17cf0d3 --- /dev/null +++ b/features/claim-type/claim-type-form/claim-type-form-loader.tsx @@ -0,0 +1,41 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormLoader } from 'shared/hook-form/form-controller'; +import { useClaimTypeFormData } from './context'; +import { Info } from './controls/info'; +import { ClaimTypeSuccess } from './claim-type-success'; + +export const ClaimTypeFormLoader: FC = ({ children }) => { + const { + canClaimCurve, + proof, + currentCurveId, + newCurveId, + icsPaused, + justClaimed, + } = useClaimTypeFormData(); + + const isClaimed = + currentCurveId === newCurveId && currentCurveId !== undefined; + const isEmpty = !proof?.proof || proof.isConsumed; + const isView = !canClaimCurve; + + if (justClaimed) { + return ; + } + + return ( + ICS claiming is currently paused + ) : isClaimed ? ( + <>You have already claimed the ICS operator type + ) : ( + isEmpty && <>You are not eligible to claim the ICS operator type + ) + } + > + {isView ? : children} + + ); +}; diff --git a/features/claim-type/claim-type-form/claim-type-form.tsx b/features/claim-type/claim-type-form/claim-type-form.tsx new file mode 100644 index 00000000..98d70614 --- /dev/null +++ b/features/claim-type/claim-type-form/claim-type-form.tsx @@ -0,0 +1,27 @@ +import { FC, memo } from 'react'; + +import { FormBlock } from 'shared/components'; +import { Form } from 'shared/hook-form/form-controller'; +import { ClaimTypeFormInfo } from './claim-type-form-info'; +import { ClaimTypeFormLoader } from './claim-type-form-loader'; +import { ClaimTypeDataProvider, ClaimTypeFormProvider } from './context'; +import { Info } from './controls/info'; +import { SubmitButton } from './controls/submit-button'; + +export const ClaimTypeForm: FC = memo(() => { + return ( + + + + +
    + + + + +
    +
    +
    +
    + ); +}); diff --git a/features/claim-type/claim-type-form/claim-type-success.tsx b/features/claim-type/claim-type-form/claim-type-success.tsx new file mode 100644 index 00000000..49d710f1 --- /dev/null +++ b/features/claim-type/claim-type-form/claim-type-success.tsx @@ -0,0 +1,64 @@ +import { Text } from '@lidofinance/lido-ui'; +import { FC, useCallback, useRef } from 'react'; +import Confetti from 'react-canvas-confetti/dist/presets/realistic'; +import { + TConductorInstance, + TOnInitPresetFn, +} from 'react-canvas-confetti/dist/types'; +import { Stack } from 'shared/components'; +import { + BadgeMain, + BadgeText, + BadgeWrapper, + canvasStyles, + StyledButton, + StyledContainer, +} from './styles'; + +export const ClaimTypeSuccess: FC = () => { + const controller = useRef(); + + const onInitHandler: TOnInitPresetFn = ({ conductor }) => { + controller.current = conductor; + }; + + const fire = useCallback(() => { + controller.current?.shoot(); + }, []); + + return ( + + ({ + ...options, + origin: { + x: 0.3 + Math.random() * 0.4, + y: 0.4 + Math.random() * 0.3, + }, + })} + /> + + + ICS + + + + + Congratulations! + + + You have claimed the Identified Community Staker operator type +
    + You can see the new parameters for your Node Operator by clicking the + ICS badge at the top of the screen +
    +
    + + Amazing! + +
    + ); +}; diff --git a/features/claim-type/claim-type-form/confirm-claim-type-modal.tsx b/features/claim-type/claim-type-form/confirm-claim-type-modal.tsx new file mode 100644 index 00000000..bd1bbef2 --- /dev/null +++ b/features/claim-type/claim-type-form/confirm-claim-type-modal.tsx @@ -0,0 +1,31 @@ +import { Button, Modal, Text } from '@lidofinance/lido-ui'; + +import type { ModalComponentType } from 'providers/modal-provider'; +import { Stack } from 'shared/components'; +import { ConfirmModalProps } from 'shared/hooks'; + +export const ConfirmClaimTypeModal: ModalComponentType = ({ + onConfirm, + onReject, + ...props +}) => { + return ( + + + + + You are claiming the Identified Community Staker operator type + + + This action is irreversible, you will not be able to claim your + current operator type back. + + + + + + + ); +}; diff --git a/features/claim-type/claim-type-form/context/claim-type-data-provider.tsx b/features/claim-type/claim-type-form/context/claim-type-data-provider.tsx new file mode 100644 index 00000000..095a7601 --- /dev/null +++ b/features/claim-type/claim-type-form/context/claim-type-data-provider.tsx @@ -0,0 +1,108 @@ +import { + KEY_ICS_PROOF, + KEY_OPERATOR_BALANCE, + KEY_OPERATOR_CURVE_ID, + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + KEY_OPERATOR_KEYS_TO_MIGRATE, + useCurveParameters, + useDappStatus, + useIcsCurveId, + useIcsPaused, + useIcsProof, + useNodeOperatorId, + useOperatorCurveId, + useOperatorIsOwner, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback, useState } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useCanClaimICS, useInvalidate } from 'shared/hooks'; +import { type ClaimTypeFormNetworkData } from './types'; + +const useClaimTypeFormNetworkData: NetworkData< + ClaimTypeFormNetworkData +> = () => { + const [justClaimed, setJustClaimed] = useState(false); + + const { address } = useDappStatus(); + const nodeOperatorId = useNodeOperatorId(); + + const { data: icsPaused, isPending: isIcsPausedLoading } = useIcsPaused(); + const currentCurveIdQuery = useOperatorCurveId(nodeOperatorId); + const proofQuery = useIcsProof(address); + + const currentCurveId = currentCurveIdQuery.data; + const proof = proofQuery.data; + + const isCurrentCurveIdLoading = currentCurveIdQuery.isPending; + const isProofLoading = proofQuery.isPending; + + const { isPending: isIsOwnerLoading } = useOperatorIsOwner({ + address, + nodeOperatorId, + }); + const canClaimCurve = useCanClaimICS(); + + const { data: newCurveId, isPending: isNewCurveIdLoading } = useIcsCurveId(); + const { data: currentParameters, isPending: isCurrentParametersLoading } = + useCurveParameters(currentCurveId); + const { data: newParameters, isPending: isNewParametersLoading } = + useCurveParameters(newCurveId); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + KEY_OPERATOR_CURVE_ID, + KEY_ICS_PROOF, + KEY_OPERATOR_INFO, + KEY_OPERATOR_BALANCE, + KEY_OPERATOR_KEYS, + KEY_OPERATOR_KEYS_TO_MIGRATE, + ]); + + setJustClaimed(true); + }, [invalidate]); + + const isPending = + isIcsPausedLoading || + isIsOwnerLoading || + isCurrentCurveIdLoading || + isCurrentParametersLoading || + isNewCurveIdLoading || + isNewParametersLoading || + isProofLoading; + + return { + data: { + nodeOperatorId, + address, + icsPaused, + currentCurveId, + currentParameters, + newCurveId, + newParameters, + proof, + canClaimCurve, + justClaimed, + } as ClaimTypeFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useClaimTypeFormData = useFormData; + +export const ClaimTypeDataProvider: FC = ({ children }) => { + const networkData = useClaimTypeFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/claim-type/claim-type-form/context/claim-type-form-provider.tsx b/features/claim-type/claim-type-form/context/claim-type-form-provider.tsx new file mode 100644 index 00000000..29c9a888 --- /dev/null +++ b/features/claim-type/claim-type-form/context/claim-type-form-provider.tsx @@ -0,0 +1,25 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormProvider, useForm } from 'react-hook-form'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { type ClaimTypeFormInputType } from './types'; +import { useClaimTypeSubmit } from './use-claim-type-submit'; +import { useClaimTypeValidation } from './use-claim-type-validation'; + +export const ClaimTypeFormProvider: FC = ({ children }) => { + const resolver = useClaimTypeValidation(); + + const formObject = useForm({ + resolver, + mode: 'onChange', + }); + + const submitter = useClaimTypeSubmit(); + + return ( + + + {children} + + + ); +}; diff --git a/features/claim-type/claim-type-form/context/index.ts b/features/claim-type/claim-type-form/context/index.ts new file mode 100644 index 00000000..ad33b9bc --- /dev/null +++ b/features/claim-type/claim-type-form/context/index.ts @@ -0,0 +1,3 @@ +export * from './claim-type-data-provider'; +export * from './claim-type-form-provider'; +export * from './types'; diff --git a/features/claim-type/claim-type-form/context/types.ts b/features/claim-type/claim-type-form/context/types.ts new file mode 100644 index 00000000..5530c9aa --- /dev/null +++ b/features/claim-type/claim-type-form/context/types.ts @@ -0,0 +1,20 @@ +import { AddressProof, CurveParameters } from '@lidofinance/lido-csm-sdk'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { Address } from 'viem'; + +export type ClaimTypeFormInputType = { + curveId: bigint; +}; + +export type ClaimTypeFormNetworkData = { + address: Address; + nodeOperatorId: NodeOperatorId; + icsPaused: boolean; + canClaimCurve: boolean; + currentCurveId: bigint; + currentParameters: CurveParameters; + newCurveId: bigint; + newParameters: CurveParameters; + proof: AddressProof; + justClaimed?: boolean; +}; diff --git a/features/claim-type/claim-type-form/context/use-claim-type-submit.ts b/features/claim-type/claim-type-form/context/use-claim-type-submit.ts new file mode 100644 index 00000000..088cfdc6 --- /dev/null +++ b/features/claim-type/claim-type-form/context/use-claim-type-submit.ts @@ -0,0 +1,75 @@ +import { useCallback } from 'react'; + +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { handleTxError } from 'shared/transaction-modal'; +import invariant from 'tiny-invariant'; +import { ClaimTypeFormInputType, ClaimTypeFormNetworkData } from '.'; +import { useConfirmClaimTypeModal } from '../hooks/use-confirm-modal'; +import { useTxModalStagesClaimType } from '../hooks/use-tx-modal-stages-claim-type'; + +export const useClaimTypeSubmit: FormSubmitterHook< + ClaimTypeFormInputType, + ClaimTypeFormNetworkData +> = () => { + const { csm } = useLidoSDK(); + const { txModalStages } = useTxModalStagesClaimType(); + const confirmClaimtype = useConfirmClaimTypeModal(); + + return useCallback( + async ( + _: ClaimTypeFormInputType, + { nodeOperatorId, proof }, + { onConfirm, onRetry }, + ) => { + invariant(proof.proof, 'Proof is not defined'); + + try { + if (!(await confirmClaimtype({}))) { + return false; + } + + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({}); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({}, payload.hash); + break; + case TransactionCallbackStage.DONE: { + payload; + txModalStages.success({}, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.icsGate.claimCurve({ + nodeOperatorId, + proof: proof.proof, + callback, + }); + + window.scrollTo({ top: 0 }); + await onConfirm?.(); + + return true; + } catch (error) { + return handleTxError(error, txModalStages, onRetry); + } + }, + [confirmClaimtype, csm.icsGate, txModalStages], + ); +}; diff --git a/features/claim-type/claim-type-form/context/use-claim-type-validation.ts b/features/claim-type/claim-type-form/context/use-claim-type-validation.ts new file mode 100644 index 00000000..6ae94f94 --- /dev/null +++ b/features/claim-type/claim-type-form/context/use-claim-type-validation.ts @@ -0,0 +1,36 @@ +import { + useFormValidation, + ValidationError, +} from 'shared/hook-form/validation'; +import type { ClaimTypeFormInputType, ClaimTypeFormNetworkData } from './types'; + +export const useClaimTypeValidation = () => { + return useFormValidation( + 'curveId', + async (_, { canClaimCurve, proof, icsPaused }, validate) => { + await validate('curveId', () => { + if (!proof.proof) { + throw new ValidationError('curveId', 'proof is not provided'); + } + }); + + await validate('curveId', () => { + if (proof.isConsumed) { + throw new ValidationError( + 'curveId', + 'claim has already been consumed', + ); + } + }); + + await validate('curveId', () => { + if (!canClaimCurve) { + throw new ValidationError('curveId', 'only owner can claim type'); + } + if (icsPaused) { + throw new ValidationError('curveId', 'ICS is paused'); + } + }); + }, + ); +}; diff --git a/features/claim-type/claim-type-form/controls/info.tsx b/features/claim-type/claim-type-form/controls/info.tsx new file mode 100644 index 00000000..f6d39905 --- /dev/null +++ b/features/claim-type/claim-type-form/controls/info.tsx @@ -0,0 +1,30 @@ +import { Accordion, Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { CompareParametersList, FormTitle } from 'shared/components'; +import { useClaimTypeFormData } from '../context'; +import styled from 'styled-components'; + +export const Info: FC = () => { + const { currentParameters, newParameters } = useClaimTypeFormData(); + return ( + <> + Claim Identified Community Staker operator type + + You are eligible to claim a new operator type. Claiming the Identified + Community Staker operator type will change some parameters for your node + operator according to the section below. + + + + + + ); +}; + +const AccordionStyle = styled(Accordion)` + background: var(--lido-color-backgroundSecondary); + + p { + margin: 0; + } +`; diff --git a/features/claim-type/claim-type-form/controls/submit-button.tsx b/features/claim-type/claim-type-form/controls/submit-button.tsx new file mode 100644 index 00000000..42270195 --- /dev/null +++ b/features/claim-type/claim-type-form/controls/submit-button.tsx @@ -0,0 +1,12 @@ +import { SubmitButtonHookForm } from 'shared/hook-form/controls'; +import { useClaimTypeFormData } from '../context'; + +export const SubmitButton = () => { + const { icsPaused } = useClaimTypeFormData(); + + return ( + + Claim operator type + + ); +}; diff --git a/features/claim-type/claim-type-form/hooks/use-confirm-modal.ts b/features/claim-type/claim-type-form/hooks/use-confirm-modal.ts new file mode 100644 index 00000000..e5754f25 --- /dev/null +++ b/features/claim-type/claim-type-form/hooks/use-confirm-modal.ts @@ -0,0 +1,6 @@ +import { getUseConfirmModal } from 'shared/hooks'; +import { ConfirmClaimTypeModal } from '../confirm-claim-type-modal'; + +export const useConfirmClaimTypeModal = getUseConfirmModal( + ConfirmClaimTypeModal, +); diff --git a/features/claim-type/claim-type-form/hooks/use-tx-modal-stages-claim-type.tsx b/features/claim-type/claim-type-form/hooks/use-tx-modal-stages-claim-type.tsx new file mode 100644 index 00000000..543d9189 --- /dev/null +++ b/features/claim-type/claim-type-form/hooks/use-tx-modal-stages-claim-type.tsx @@ -0,0 +1,43 @@ +import { + TransactionModalTransitStage, + TxStagePending, + TxStageSign, + TxStageSuccess, + getGeneralTransactionModalStages, + useTransactionModalStage, +} from 'shared/transaction-modal'; + +type Props = unknown; + +const getTxModalStagesClaimType = ( + transitStage: TransactionModalTransitStage, +) => ({ + ...getGeneralTransactionModalStages(transitStage), + + sign: (_: Props) => + transitStage( + , + ), + + pending: (_: Props, txHash?: string) => + transitStage(), + + success: (_: Props, txHash?: string) => + transitStage( + , + { + isClosableOnLedger: true, + }, + ), +}); + +export const useTxModalStagesClaimType = () => { + return useTransactionModalStage(getTxModalStagesClaimType); +}; diff --git a/features/claim-type/claim-type-form/index.ts b/features/claim-type/claim-type-form/index.ts new file mode 100644 index 00000000..5633f429 --- /dev/null +++ b/features/claim-type/claim-type-form/index.ts @@ -0,0 +1 @@ +export { ClaimTypeForm } from './claim-type-form'; diff --git a/features/claim-type/claim-type-form/styles.tsx b/features/claim-type/claim-type-form/styles.tsx new file mode 100644 index 00000000..b8493c40 --- /dev/null +++ b/features/claim-type/claim-type-form/styles.tsx @@ -0,0 +1,63 @@ +import { OPERATOR_TYPE } from '@lidofinance/lido-csm-sdk'; +import { Button, Text } from '@lidofinance/lido-ui'; +import { StackStyle } from 'shared/components'; +import { CURVE_VARIANTS } from 'shared/node-operator/curve-badge/styles'; +import styled, { CSSProperties } from 'styled-components'; + +export const StyledContainer = styled(StackStyle).attrs({ + $direction: 'column', +})` + gap: 40px; + max-width: 420px; + text-align: center; + align-self: center; + align-items: center; +`; + +export const StyledButton = styled(Button)` + max-width: 360px; +`; + +export const BadgeWrapper = styled.div` + position: relative; + display: grid; + width: 150px; + height: 120px; + + &:before { + content: ''; + grid-area: 1 / 1; + filter: blur(38px); + opacity: 0.8; + ${CURVE_VARIANTS[OPERATOR_TYPE.ICS]} + } +`; + +export const BadgeMain = styled.div` + grid-area: 1 / 1; + display: flex; + align-items: center; + justify-content: center; + z-index: 1; + border-radius: 28px; + border: 4px solid rgba(var(--lido-rgb-foreground), 0.8); + ${CURVE_VARIANTS[OPERATOR_TYPE.ICS]} + background-origin: border-box; +`; + +export const BadgeText = styled(Text)` + font-weight: 700; + font-size: 36px; + letter-spacing: -0.5pt; + color: var(--lido-color-foreground); +`; + +export const canvasStyles: CSSProperties = { + position: 'fixed', + pointerEvents: 'none', + width: '100%', + height: '100%', + top: 0, + left: 0, + zIndex: 9999, +}; diff --git a/features/claim-type/claim-type-page.tsx b/features/claim-type/claim-type-page.tsx new file mode 100644 index 00000000..b1e130e2 --- /dev/null +++ b/features/claim-type/claim-type-page.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; + +import { FAQ_OPERATOR_TYPE } from 'faq'; +import { Faq } from 'shared/components'; +import { Layout } from 'shared/layout'; +import { ClaimType } from './claim-type'; +import { TypePageSwitcher } from 'shared/navigate'; + +export const ClaimTypePage: FC = () => ( + + + + + +); diff --git a/features/claim-type/claim-type.tsx b/features/claim-type/claim-type.tsx new file mode 100644 index 00000000..30481d53 --- /dev/null +++ b/features/claim-type/claim-type.tsx @@ -0,0 +1,15 @@ +import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; +import { useWeb3Key } from 'shared/hooks'; + +import { ClaimTypeForm } from './claim-type-form'; + +export const ClaimType = () => { + const key = useWeb3Key(); + return ( + <> + + + + + ); +}; diff --git a/features/claim-type/index.ts b/features/claim-type/index.ts new file mode 100644 index 00000000..6f435fcd --- /dev/null +++ b/features/claim-type/index.ts @@ -0,0 +1,2 @@ +export * from './claim-type-page'; +export * from './claim-type'; diff --git a/features/create-node-operator/create-node-operator-page.tsx b/features/create-node-operator/create-node-operator-page.tsx index 0bfc7f0a..caa4220f 100644 --- a/features/create-node-operator/create-node-operator-page.tsx +++ b/features/create-node-operator/create-node-operator-page.tsx @@ -2,14 +2,16 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { CreateNodeOperator } from './create-node-operator'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; export const CreateNodeOperatorPage: FC = () => ( + ); diff --git a/features/create-node-operator/create-node-operator.tsx b/features/create-node-operator/create-node-operator.tsx index a1d7133d..8cebab31 100644 --- a/features/create-node-operator/create-node-operator.tsx +++ b/features/create-node-operator/create-node-operator.tsx @@ -1,10 +1,9 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; -import { SubmitKeysForm } from './submit-keys-form'; -import { Faq } from 'shared/components'; import { OtherModuleBanner } from './other-module-banner'; import { ShareLimitBanner } from './share-limit-banner'; +import { SubmitKeysForm } from './submit-keys-form'; export const CreateNodeOperator = () => { const key = useWeb3Key(); @@ -15,7 +14,6 @@ export const CreateNodeOperator = () => { - ); }; diff --git a/features/create-node-operator/other-module-banner/other-module-banner.tsx b/features/create-node-operator/other-module-banner/other-module-banner.tsx index 76ec399b..4a21a3b9 100644 --- a/features/create-node-operator/other-module-banner/other-module-banner.tsx +++ b/features/create-node-operator/other-module-banner/other-module-banner.tsx @@ -3,12 +3,18 @@ import { getExternalLinks } from 'consts/external-links'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { FC } from 'react'; import { MatomoLink } from 'shared/components'; -import { useOperatorInOtherModule } from 'shared/hooks'; import { StyledAccordion } from './styles'; +import { useDappStatus, useOtherModule } from 'modules/web3'; + +const REPLACEMENTS: Record = { + 'curated-onchain-v1': 'Lido Curated', +}; export const OtherModuleBanner: FC = () => { const { operatorsWidget } = getExternalLinks(); - const { data: moduleName } = useOperatorInOtherModule(); + const { address } = useDappStatus(); + const { data } = useOtherModule(address); + const moduleName = (data && REPLACEMENTS[data]) ?? data; if (!moduleName) return null; diff --git a/features/create-node-operator/share-limit-banner/share-limit-banner.tsx b/features/create-node-operator/share-limit-banner/share-limit-banner.tsx index f6a079c3..f185bceb 100644 --- a/features/create-node-operator/share-limit-banner/share-limit-banner.tsx +++ b/features/create-node-operator/share-limit-banner/share-limit-banner.tsx @@ -1,7 +1,12 @@ import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { + SHARE_LIMIT_STATUS, + useHasPriorityQueueSpots, + useShareLimit, + useShareLimitStatus, +} from 'modules/web3'; import { FC } from 'react'; import { Banner } from 'shared/components'; -import { SHARE_LIMIT_STATUS, useCSMShareLimitInfo } from 'shared/hooks'; import { LocalLink } from 'shared/navigate'; type Props = { activeLeft: string; queue: string }; @@ -15,7 +20,7 @@ const ReachedBanner: FC = () => ( the near future (possibly for months).
    Read more in the FAQ section @@ -37,7 +42,7 @@ const ExhaustedBanner: FC = ({ activeLeft, queue }) => ( can be active for CSM is constantly changing due to protocol dynamics.
    Read more in the FAQ section @@ -56,7 +61,7 @@ const ApproachingBanner: FC = ({ activeLeft, queue }) => ( can be active for CSM is constantly changing due to protocol dynamics.
    Read more in the FAQ section @@ -65,18 +70,24 @@ const ApproachingBanner: FC = ({ activeLeft, queue }) => ( ); export const ShareLimitBanner: FC = () => { - const { data } = useCSMShareLimitInfo(); + const { data } = useShareLimit(); + const { data: status } = useShareLimitStatus(); + const { data: hasPrioritySpots } = useHasPriorityQueueSpots(); + + if (!data || !status) { + return null; + } return ( <> - {data?.status === SHARE_LIMIT_STATUS.REACHED ? ( + {status === SHARE_LIMIT_STATUS.REACHED ? ( - ) : data?.status === SHARE_LIMIT_STATUS.EXHAUSTED ? ( + ) : status === SHARE_LIMIT_STATUS.EXHAUSTED && !hasPrioritySpots ? ( - ) : data?.status === SHARE_LIMIT_STATUS.APPROACHING ? ( + ) : status === SHARE_LIMIT_STATUS.APPROACHING ? ( > = ({ - Rewards Address - -
    - + + Rewards Address + {!extendedManagerPermissions && } + +
    - Manager Address - -
    - + + Manager Address + {extendedManagerPermissions && } + +
    {extendedManagerPermissions && } diff --git a/features/create-node-operator/submit-keys-form/context/index.ts b/features/create-node-operator/submit-keys-form/context/index.ts index eaf7d583..ba180a0c 100644 --- a/features/create-node-operator/submit-keys-form/context/index.ts +++ b/features/create-node-operator/submit-keys-form/context/index.ts @@ -1,2 +1,3 @@ export * from './submit-keys-form-provider'; +export * from './submit-keys-data-provider'; export * from './types'; diff --git a/features/create-node-operator/submit-keys-form/context/submit-keys-data-provider.tsx b/features/create-node-operator/submit-keys-form/context/submit-keys-data-provider.tsx new file mode 100644 index 00000000..afd220d9 --- /dev/null +++ b/features/create-node-operator/submit-keys-form/context/submit-keys-data-provider.tsx @@ -0,0 +1,140 @@ +import { + KEY_DEPOSIT_QUEUE_BATCHES, + KEY_ICS_PROOF, + KEY_SHARE_LIMIT, + KEY_STAKE_LIMIT, + useCsmStatus, + useCurveParameters, + useDappStatus, + useDefaultCurveId, + useEthereumBalance, + useIcsCurveId, + useIcsPaused, + useIcsProof, + useShareLimit, + useShareLimitStatus, + useStakeLimit, + useStethBalance, + useWstethBalance, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type SubmitKeysFormNetworkData } from './types'; + +const useSubmitKeysFormNetworkData: NetworkData< + SubmitKeysFormNetworkData +> = () => { + const { data: status, isPending: isStatusLoading } = useCsmStatus(); + + const ethBalanceQuery = useEthereumBalance(); + const stethBalanceQuery = useStethBalance(); + const wstethBalanceQuery = useWstethBalance(); + const shareLimitQuery = useShareLimit(); + const maxStakeEthQuery = useStakeLimit(); + + const ethBalance = ethBalanceQuery.data; + const stethBalance = stethBalanceQuery.data; + const wstethBalance = wstethBalanceQuery.data; + const shareLimit = shareLimitQuery.data; + const maxStakeEth = maxStakeEthQuery.data; + + const isEthBalanceLoading = ethBalanceQuery.isPending; + const isStethBalanceLoading = stethBalanceQuery.isPending; + const isWstethBalanceLoading = wstethBalanceQuery.isPending; + const isShareLimitLoading = shareLimitQuery.isPending; + const isMaxStakeEtherLoading = maxStakeEthQuery.isPending; + + const { address } = useDappStatus(); + const proofQuery = useIcsProof(address); + + const proof = proofQuery.data; + const isProofLoading = proofQuery.isPending; + + const { data: isIcsPaused, isPending: isIcsPausedLoading } = useIcsPaused(); + const { data: defCurveId, isPending: isDefCurveIdLoading } = + useDefaultCurveId(); + const { data: icsCurveId, isPending: isIcsCurveIdLoading } = useIcsCurveId(); + + const isIcs = !isIcsPaused && proof?.proof && !proof.isConsumed; + const curveId = isIcs ? icsCurveId : defCurveId; + + const { data: curveParameters, isPending: isCurveParametersLoading } = + useCurveParameters(curveId); + + const { data: shareLimitStatus } = useShareLimitStatus(); + + // const { data: keysAvailable } = useKeysAvailable({ + // curveId, + // ethBalance, + // stethBalance, + // wstethBalance, + // }); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + ethBalanceQuery.queryKey, + stethBalanceQuery.queryKey, + wstethBalanceQuery.queryKey, + KEY_SHARE_LIMIT, + KEY_STAKE_LIMIT, + KEY_ICS_PROOF, + KEY_DEPOSIT_QUEUE_BATCHES, + ]); + }, [ + invalidate, + ethBalanceQuery.queryKey, + stethBalanceQuery.queryKey, + wstethBalanceQuery.queryKey, + ]); + + const isPending = + isStethBalanceLoading || + isWstethBalanceLoading || + isEthBalanceLoading || + isMaxStakeEtherLoading || + isStatusLoading || + isShareLimitLoading || + isProofLoading || + isIcsPausedLoading || + isDefCurveIdLoading || + isIcsCurveIdLoading || + isCurveParametersLoading; + + return { + data: { + address, + isPaused: status?.isPaused, + proof: (isIcs && proof.proof) || undefined, + stethBalance, + wstethBalance, + ethBalance, + curveId, + curveParameters, + maxStakeEth, + shareLimit, + shareLimitStatus, + // keysAvailable, + } as SubmitKeysFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useSubmitKeysFormData = useFormData; + +export const SubmitKeysDataProvider: FC = ({ children }) => { + const networkData = useSubmitKeysFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/create-node-operator/submit-keys-form/context/submit-keys-form-provider.tsx b/features/create-node-operator/submit-keys-form/context/submit-keys-form-provider.tsx index e766ab02..4dd57c39 100644 --- a/features/create-node-operator/submit-keys-form/context/submit-keys-form-provider.tsx +++ b/features/create-node-operator/submit-keys-form/context/submit-keys-form-provider.tsx @@ -1,68 +1,33 @@ -import { useModifyContext } from 'providers/modify-provider'; -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, - useFormDepositData, -} from 'shared/hook-form/form-controller'; -import { - SubmitKeysFormNetworkData, - type SubmitKeysFormInputType, -} from './types'; -import { useFormBondAmount } from './use-form-bond-amount'; -import { useGetDefaultValues } from './use-get-default-values'; -import { useSubmitKeysFormNetworkData } from './use-submit-keys-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { SubmitKeysUpdater } from './submit-keys-updater'; +import { type SubmitKeysFormInputType } from './types'; +import { useSubmitKeysDefaultValues } from './use-submit-keys-default-values'; import { useSubmitKeysSubmit } from './use-submit-keys-submit'; import { useSubmitKeysValidation } from './use-submit-keys-validation'; -export const useSubmitKeysFormData = useFormData; - export const SubmitKeysFormProvider: FC = ({ children }) => { - const [networkData, revalidate] = useSubmitKeysFormNetworkData(); - const validationResolver = useSubmitKeysValidation(networkData); - - const { referrer } = useModifyContext(); - - const asyncDefaultValues = useGetDefaultValues(networkData, referrer); + const resolver = useSubmitKeysValidation(); + const defaultValues = useSubmitKeysDefaultValues(); const formObject = useForm({ - defaultValues: asyncDefaultValues, - resolver: validationResolver, + defaultValues, + resolver, mode: 'onChange', }); - useFormBondAmount(formObject, networkData); - useFormDepositData(formObject); - - const { retryEvent, retryFire } = useFormControllerRetry(); - - const submitKeys = useSubmitKeysSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - SubmitKeysFormInputType, - SubmitKeysFormNetworkData - > = useMemo( - () => ({ - onSubmit: submitKeys, - retryEvent, - }), - [submitKeys, retryEvent], - ); + const submitter = useSubmitKeysSubmit(); return ( - - - {children} - - + + + {children} + ); }; diff --git a/features/create-node-operator/submit-keys-form/context/submit-keys-updater.tsx b/features/create-node-operator/submit-keys-form/context/submit-keys-updater.tsx new file mode 100644 index 00000000..fd29d589 --- /dev/null +++ b/features/create-node-operator/submit-keys-form/context/submit-keys-updater.tsx @@ -0,0 +1,38 @@ +import { useBondByKeysCount } from 'modules/web3'; +import { FC, useEffect } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { useSubmitKeysFormData } from './submit-keys-data-provider'; +import { SubmitKeysFormInputType } from './types'; + +export const SubmitKeysUpdater: FC = () => { + const [token, depositData] = useWatch< + SubmitKeysFormInputType, + ['token', 'depositData'] + >({ name: ['token', 'depositData'] }); + + const keysCount = depositData?.length ?? 0; + + const { trigger, setValue } = useFormContext(); + + const { curveId } = useSubmitKeysFormData(); + + const { data: bondAmount } = useBondByKeysCount({ + keysCount, + token, + curveId, + }); + + useEffect(() => { + void trigger('bondAmount'); + // trigger are stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [token]); + + useEffect(() => { + setValue('bondAmount', bondAmount, { shouldValidate: true }); + // setValue are stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [bondAmount]); + + return null; +}; diff --git a/features/create-node-operator/submit-keys-form/context/types.ts b/features/create-node-operator/submit-keys-form/context/types.ts index 6391b1ae..3530565e 100644 --- a/features/create-node-operator/submit-keys-form/context/types.ts +++ b/features/create-node-operator/submit-keys-form/context/types.ts @@ -1,43 +1,35 @@ -import { type TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; -import { DepositDataInputType } from 'shared/hook-form/form-controller'; -import { KeysAvailable, ShareLimitInfo } from 'shared/hooks'; -import { LoadingRecord, Proof } from 'types'; -import { Address } from 'wagmi'; +import { + CurveParameters, + Proof, + ShareLimitInfo, + ShareLimitStatus, + TOKENS, +} from '@lidofinance/lido-csm-sdk'; +import { DepositDataInputType } from 'shared/hook-form/deposit-data'; +import { Address } from 'viem'; export type SubmitKeysFormInputType = { token: TOKENS; - bondAmount?: BigNumber; + bondAmount?: bigint; referrer?: Address; - rewardsAddress?: string; - managerAddress?: string; + rewardsAddress?: Address; + managerAddress?: Address; extendedManagerPermissions: boolean; specifyCustomAddresses: boolean; specifyReferrrer: boolean; } & DepositDataInputType; export type SubmitKeysFormNetworkData = { - etherBalance?: BigNumber; - stethBalance?: BigNumber; - wstethBalance?: BigNumber; - eaProof?: Proof; - curveId?: BigNumber; - maxStakeEther?: BigNumber | null; - keysUploadLimit?: number; - keysAvailable?: KeysAvailable; - isPaused?: boolean; - shareLimit?: ShareLimitInfo; - blockNumber?: number; - loading: LoadingRecord< - | 'etherBalance' - | 'stethBalance' - | 'wstethBalance' - | 'eaProof' - | 'curveId' - | 'keysUploadLimit' - | 'maxStakeEther' - | 'status' - | 'shareLimit' - | 'blockNumber' - >; + address: Address; + ethBalance: bigint; + stethBalance: bigint; + wstethBalance: bigint; + curveId: bigint; + curveParameters: CurveParameters; + maxStakeEth: bigint; + isPaused: boolean; + proof?: Proof; + shareLimit: ShareLimitInfo; + shareLimitStatus: ShareLimitStatus; + // keysAvailable: KeysAvailable; }; diff --git a/features/create-node-operator/submit-keys-form/context/use-form-bond-amount.ts b/features/create-node-operator/submit-keys-form/context/use-form-bond-amount.ts deleted file mode 100644 index 0c9a84f5..00000000 --- a/features/create-node-operator/submit-keys-form/context/use-form-bond-amount.ts +++ /dev/null @@ -1,25 +0,0 @@ -import { UseFormReturn } from 'react-hook-form'; -import { useNodeOperatorFirstKeysBond } from 'shared/hooks'; -import { SubmitKeysFormInputType, SubmitKeysFormNetworkData } from './types'; -import { useEffect } from 'react'; - -export const useFormBondAmount = ( - { watch, setValue, trigger }: UseFormReturn, - { curveId }: SubmitKeysFormNetworkData, -) => { - const [token, depositData] = watch(['token', 'depositData']); - - const { data: bondAmount } = useNodeOperatorFirstKeysBond({ - keysCount: depositData?.length, - token, - curveId, - }); - - useEffect(() => { - void trigger('bondAmount'); - }, [token, trigger]); - - useEffect(() => { - setValue('bondAmount', bondAmount, { shouldValidate: true }); - }, [bondAmount, setValue]); -}; diff --git a/features/create-node-operator/submit-keys-form/context/use-get-default-values.ts b/features/create-node-operator/submit-keys-form/context/use-get-default-values.ts deleted file mode 100644 index bc0cbadb..00000000 --- a/features/create-node-operator/submit-keys-form/context/use-get-default-values.ts +++ /dev/null @@ -1,58 +0,0 @@ -import { useMemo } from 'react'; -import { getMaxBalanceToken } from 'utils'; -import { Address } from 'wagmi'; -import { SubmitKeysFormInputType, SubmitKeysFormNetworkData } from './types'; -import { useDefaultValues } from 'shared/hooks'; - -export const useGetDefaultValues = ( - { - etherBalance, - stethBalance, - wstethBalance, - loading: { - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - }, - }: SubmitKeysFormNetworkData, - referrer?: Address, -) => { - return useDefaultValues( - useMemo(() => { - if ( - [ - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - ].some(Boolean) - ) { - return undefined; - } - - const token = getMaxBalanceToken({ - etherBalance, - stethBalance, - wstethBalance, - }); - - return { - token, - depositData: [], - rawDepositData: '', - confirmKeysReady: false, - extendedManagerPermissions: false, - specifyCustomAddresses: false, - specifyReferrrer: false, - referrer, - }; - }, [ - etherBalance, - isEtherBalanceLoading, - isStethBalanceLoading, - isWstethBalanceLoading, - referrer, - stethBalance, - wstethBalance, - ]), - ); -}; diff --git a/features/create-node-operator/submit-keys-form/context/use-submit-keys-default-values.ts b/features/create-node-operator/submit-keys-form/context/use-submit-keys-default-values.ts new file mode 100644 index 00000000..17b4eff1 --- /dev/null +++ b/features/create-node-operator/submit-keys-form/context/use-submit-keys-default-values.ts @@ -0,0 +1,27 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { getMaxBalanceToken } from 'modules/web3'; +import { useModifyContext } from 'providers/modify-provider'; +import { useFormDefaultValues } from 'shared/hook-form/form-controller'; +import { SubmitKeysFormInputType, SubmitKeysFormNetworkData } from './types'; + +export const useSubmitKeysDefaultValues = () => { + const { referrer } = useModifyContext(); + + return useFormDefaultValues< + SubmitKeysFormInputType, + SubmitKeysFormNetworkData + >((data) => ({ + token: getMaxBalanceToken({ + [TOKENS.eth]: data.ethBalance, + [TOKENS.steth]: data.stethBalance, + [TOKENS.wsteth]: data.wstethBalance, + }), + depositData: [], + rawDepositData: '', + confirmKeysReady: false, + extendedManagerPermissions: false, + specifyCustomAddresses: false, + specifyReferrrer: false, + referrer, + })); +}; diff --git a/features/create-node-operator/submit-keys-form/context/use-submit-keys-form-network-data.tsx b/features/create-node-operator/submit-keys-form/context/use-submit-keys-form-network-data.tsx deleted file mode 100644 index 3aba60b8..00000000 --- a/features/create-node-operator/submit-keys-form/context/use-submit-keys-form-network-data.tsx +++ /dev/null @@ -1,139 +0,0 @@ -import { - useEthereumBalance, - useSTETHBalance, - useWSTETHBalance, -} from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; -import { useCallback, useMemo } from 'react'; -import { - useCsmCurveId, - useCsmEarlyAdoption, - useCsmEarlyAdoptionProofConsumed, - useCsmPaused, - useCSMShareLimitInfo, - useKeysAvailable, - useKeysUploadLimit, - useStakingLimitInfo, -} from 'shared/hooks'; -import { useBlockNumber } from 'wagmi'; -import { type SubmitKeysFormNetworkData } from './types'; - -export const useSubmitKeysFormNetworkData = (): [ - SubmitKeysFormNetworkData, - () => Promise, -] => { - const { data: blockNumber, isLoading: isBlockNumberLoading } = - useBlockNumber(); - - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - const { - data: stethBalance, - update: updateStethBalance, - initialLoading: isStethBalanceLoading, - } = useSTETHBalance(STRATEGY_LAZY); - const { - data: wstethBalance, - update: updateWstethBalance, - initialLoading: isWstethBalanceLoading, - } = useWSTETHBalance(STRATEGY_LAZY); - - const { data: ea, initialLoading: isEaProofLoading } = useCsmEarlyAdoption(); - const eaProof = ea?.proof; - - const { data: curveId, initialLoading: isCurveIdLoading } = - useCsmCurveId(!!eaProof); - - const { mutate: mutateConsumed } = useCsmEarlyAdoptionProofConsumed(); - - const { - data: shareLimit, - initialLoading: isShareLimitLoading, - update: updateShareLimit, - } = useCSMShareLimitInfo(); - - const { - data: maxStakeEther, - update: updateMaxStakeEther, - initialLoading: isMaxStakeEtherLoading, - } = useStakingLimitInfo(); - - const { data: keysUploadLimit, initialLoading: isKeysUploadLimitLoading } = - useKeysUploadLimit(); - - const { data: keysAvailable } = useKeysAvailable({ - curveId, - keysUploadLimit, - etherBalance, - stethBalance, - wstethBalance, - }); - - const { data: status, initialLoading: isStatusLoading } = useCsmPaused(); - - const revalidate = useCallback(async () => { - await Promise.allSettled([ - updateStethBalance(), - updateWstethBalance(), - updateEtherBalance(), - mutateConsumed(true), // @note hack to revalidate without loading state - updateShareLimit(), - updateMaxStakeEther(), - ]); - }, [ - updateStethBalance, - updateWstethBalance, - updateEtherBalance, - mutateConsumed, - updateShareLimit, - updateMaxStakeEther, - ]); - - const loading = useMemo( - () => ({ - isStethBalanceLoading, - isWstethBalanceLoading, - isEtherBalanceLoading, - isEaProofLoading, - isCurveIdLoading, - isKeysUploadLimitLoading, - isMaxStakeEtherLoading, - isBlockNumberLoading, - isStatusLoading, - isShareLimitLoading, - }), - [ - isStethBalanceLoading, - isWstethBalanceLoading, - isEtherBalanceLoading, - isEaProofLoading, - isCurveIdLoading, - isKeysUploadLimitLoading, - isMaxStakeEtherLoading, - isBlockNumberLoading, - isStatusLoading, - isShareLimitLoading, - ], - ); - - return [ - { - blockNumber, - stethBalance, - wstethBalance, - etherBalance, - eaProof, - curveId, - keysUploadLimit, - keysAvailable, - maxStakeEther, - shareLimit, - isPaused: status?.isPaused || status?.isAccountingPaused, - loading, - }, - revalidate, - ]; -}; diff --git a/features/create-node-operator/submit-keys-form/context/use-submit-keys-submit.ts b/features/create-node-operator/submit-keys-form/context/use-submit-keys-submit.ts index 0a171f81..91f3df61 100644 --- a/features/create-node-operator/submit-keys-form/context/use-submit-keys-submit.ts +++ b/features/create-node-operator/submit-keys-form/context/use-submit-keys-submit.ts @@ -1,132 +1,68 @@ -import { TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; -import { BytesLike } from 'ethers/lib/utils.js'; -import { useNodeOperatorContext } from 'providers/node-operator-provider'; -import { useCallback } from 'react'; import { - GatherPermitSignatureResult, - useAddressCompare, - useAskHowDidYouLearnCsm, - useCSModuleWeb3, - useKeysCache, - usePermitOrApprove, - useSendTx, -} from 'shared/hooks'; -import { handleTxError } from 'shared/transaction-modal'; + DepositData, + NodeOperatorShortInfo, + Proof, + TOKENS, + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { PATH } from 'consts'; +import { useOperatorCustomAddresses } from 'features/starter-pack/banner-operator-custom-addresses'; +import { useAppendOperator, useLidoSDK } from 'modules/web3'; +import { useCallback } from 'react'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { useKeysCache } from 'shared/hooks'; +import { useNavigate } from 'shared/navigate'; +import { hasAnyRole } from 'shared/node-operator/utils'; import invariant from 'tiny-invariant'; -import { Proof } from 'types'; -import { - addExtraWei, - addressOrZero, - formatKeys, - getAddedNodeOperator, - runWithTransactionLogger, -} from 'utils'; -import { Address } from 'wagmi'; +import { Address } from 'viem'; import { useConfirmCustomAddressesModal } from '../hooks/use-confirm-modal'; import { useTxModalStagesSubmitKeys } from '../hooks/use-tx-modal-stages-submit-keys'; import { SubmitKeysFormInputType, SubmitKeysFormNetworkData } from './types'; -type SubmitKeysOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type MethodParams = { - bondAmount: BigNumber; - keysCount: number; - publicKeys: BytesLike; - signatures: BytesLike; - rewardsAddress: Address; - managerAddress: Address; +type SubmitKeysMethodParams = { + token: TOKENS; + amount: bigint; + depositData: DepositData[]; + rewardsAddress: string; + managerAddress: string; extendedManagerPermissions: boolean; - permit: GatherPermitSignatureResult; - eaProof: Proof; - referrer: Address; + referrer?: Address; + callback: TransactionCallback; }; -// this encapsulates eth/steth/wsteth flows const useSubmitKeysTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); + const { csm } = useLidoSDK(); return useCallback( - async (token: TOKENS, params: MethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - switch (token) { - case TOKENS.ETH: - return { - tx: await CSModuleWeb3.populateTransaction.addNodeOperatorETH( - params.keysCount, - params.publicKeys, - params.signatures, - { - managerAddress: params.managerAddress, - rewardAddress: params.rewardsAddress, - extendedManagerPermissions: params.extendedManagerPermissions, - }, - params.eaProof, - params.referrer, - { - value: params.bondAmount, - }, - ), - txName: 'addNodeOperatorETH', - }; - case TOKENS.STETH: - return { - tx: await CSModuleWeb3.populateTransaction.addNodeOperatorStETH( - params.keysCount, - params.publicKeys, - params.signatures, - { - managerAddress: params.managerAddress, - rewardAddress: params.rewardsAddress, - extendedManagerPermissions: params.extendedManagerPermissions, - }, - params.permit, - params.eaProof, - params.referrer, - ), - txName: 'addNodeOperatorStETH', - }; - case TOKENS.WSTETH: - return { - tx: await CSModuleWeb3.populateTransaction.addNodeOperatorWstETH( - params.keysCount, - params.publicKeys, - params.signatures, - { - managerAddress: params.managerAddress, - rewardAddress: params.rewardsAddress, - extendedManagerPermissions: params.extendedManagerPermissions, - }, - params.permit, - params.eaProof, - params.referrer, - ), - txName: 'addNodeOperatorWstETH', - }; + async (params: SubmitKeysMethodParams, proof: Proof | null) => { + if (proof) { + return csm.icsGate.addNodeOperator({ + ...params, + proof, + }); + } else { + return csm.permissionlessGate.addNodeOperator(params); } }, - [CSModuleWeb3], + [csm], ); }; -export const useSubmitKeysSubmit = ({ - onConfirm, - onRetry, -}: SubmitKeysOptions) => { +export const useSubmitKeysSubmit: FormSubmitterHook< + SubmitKeysFormInputType, + SubmitKeysFormNetworkData +> = () => { const { txModalStages } = useTxModalStagesSubmitKeys(); - const { append: appendNO } = useNodeOperatorContext(); - const getTx = useSubmitKeysTx(); - const getPermitOrApprove = usePermitOrApprove(); - const sendTx = useSendTx(); - const isUserOrZero = useAddressCompare(true); - const { addCacheKeys } = useKeysCache(); + + const submitKeysTx = useSubmitKeysTx(); + + const { addCachePubkeys, removeCachePubkeys } = useKeysCache(); + const appendNO = useAppendOperator(); + const [, setOperatorCustomAddresses] = useOperatorCustomAddresses(); + const n = useNavigate(); const confirmCustomAddresses = useConfirmCustomAddressesModal(); - const { ask } = useAskHowDidYouLearnCsm(); return useCallback( async ( @@ -134,17 +70,18 @@ export const useSubmitKeysSubmit = ({ referrer, depositData, token, - bondAmount, + bondAmount: amount, specifyCustomAddresses, rewardsAddress, managerAddress, extendedManagerPermissions, - }: SubmitKeysFormInputType, - { eaProof }: SubmitKeysFormNetworkData, - ): Promise => { - invariant(depositData.length, 'Keys is not defined'); - invariant(token, 'Token is not defined'); - invariant(bondAmount, 'BondAmount is not defined'); + }, + { address, proof }, + { onConfirm, onRetry }, + ) => { + invariant(amount !== undefined, 'BondAmount is not defined'); + + const pubkeys = depositData.map(({ pubkey }) => pubkey); if ( specifyCustomAddresses && @@ -158,88 +95,85 @@ export const useSubmitKeysSubmit = ({ } try { - const { permit } = await getPermitOrApprove({ - token, - amount: addExtraWei(bondAmount, token), - txModalStages, - }); - - const { keysCount, publicKeys, signatures } = formatKeys(depositData); - - txModalStages.sign({ keysCount, amount: bondAmount, token }); - - const tx = await getTx(token, { - bondAmount, - keysCount, - publicKeys, - signatures, - permit, - eaProof: eaProof || [], - rewardsAddress: addressOrZero( - specifyCustomAddresses && rewardsAddress, - ), - managerAddress: addressOrZero( - specifyCustomAddresses && managerAddress, - ), - extendedManagerPermissions: - specifyCustomAddresses && extendedManagerPermissions, - referrer: addressOrZero(referrer), - }); - - const [txHash, waitTx] = await runWithTransactionLogger( - 'AddNodeOperator signing', - () => sendTx(tx), - ); - - txModalStages.pending({ keysCount, amount: bondAmount, token }, txHash); - - const receipt = await runWithTransactionLogger( - 'AddNodeOperator block confirmation', - waitTx, - ); - - const nodeOperator = getAddedNodeOperator(receipt); - - txModalStages.success( + const keysCount = depositData.length; + + const callback: TransactionCallback = async ({ + stage, + payload, + }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ keysCount, amount, token }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ keysCount, amount, token }, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success( + { + keys: depositData.map((key) => key.pubkey), + nodeOperatorId: payload.result.nodeOperatorId, + hasAnyRole: hasAnyRole(payload.result, address), + }, + payload.hash, + ); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + addCachePubkeys(pubkeys); + + const { result } = await submitKeysTx( { - nodeOperatorId: nodeOperator?.id, - keys: depositData.map((key) => key.pubkey), + token, + amount, + depositData, + rewardsAddress: (specifyCustomAddresses && rewardsAddress) || '', + managerAddress: (specifyCustomAddresses && managerAddress) || '', + extendedManagerPermissions: + specifyCustomAddresses && extendedManagerPermissions, + referrer: referrer || undefined, + callback, }, - txHash, + proof ?? null, ); - ask(); - - // TODO: move to onConfirm - void addCacheKeys(depositData.map(({ pubkey }) => pubkey)); - - // TODO: move to onConfirm - if (nodeOperator) { - appendNO({ - id: nodeOperator.id, - manager: isUserOrZero(nodeOperator.managerAddress), - rewards: isUserOrZero(nodeOperator.rewardsAddress), - }); - } await onConfirm?.(); + // FIXME: !result - mean multisig finish allowance and need to start second transaction + if (result) { + if (hasAnyRole(result, address)) { + appendNO(result); + } else { + setOperatorCustomAddresses(result.nodeOperatorId); + void n(PATH.HOME); + } + } + return true; } catch (error) { - return handleTxError(error, txModalStages, onRetry); + removeCachePubkeys(pubkeys); + txModalStages.failed(error, onRetry); + return false; } }, [ confirmCustomAddresses, - getPermitOrApprove, + addCachePubkeys, + submitKeysTx, txModalStages, - getTx, - onConfirm, - addCacheKeys, - sendTx, + setOperatorCustomAddresses, + n, appendNO, - isUserOrZero, - onRetry, - ask, + removeCachePubkeys, ], ); }; diff --git a/features/create-node-operator/submit-keys-form/context/use-submit-keys-validation.ts b/features/create-node-operator/submit-keys-form/context/use-submit-keys-validation.ts index c35c4979..ab62a280 100644 --- a/features/create-node-operator/submit-keys-form/context/use-submit-keys-validation.ts +++ b/features/create-node-operator/submit-keys-form/context/use-submit-keys-validation.ts @@ -1,103 +1,98 @@ -import { isAddress } from 'ethers/lib/utils.js'; -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; +import { useLidoSDK } from 'modules/web3'; import { - handleResolverValidationError, + useFormValidation, validateBondAmount, validateDepositData, ValidationError, } from 'shared/hook-form/validation'; -import { useAccount, useAwaitNetworkData } from 'shared/hooks'; +import { isAddress } from 'viem'; import type { SubmitKeysFormInputType, SubmitKeysFormNetworkData, } from './types'; -export const useSubmitKeysValidation = ( - networkData: SubmitKeysFormNetworkData, -) => { - const dataPromise = useAwaitNetworkData(networkData); - const { chainId } = useAccount(); +export const useSubmitKeysValidation = () => { + const { + csm: { depositData: sdk }, + } = useLidoSDK(); - return useCallback>( - async (values, _, options) => { - try { - const { - token, - bondAmount, - depositData, - specifyCustomAddresses, - rewardsAddress, - managerAddress, - confirmKeysReady, - } = values; - - const { - stethBalance, - wstethBalance, - etherBalance, - maxStakeEther, - keysUploadLimit, - blockNumber, - } = await dataPromise; + return useFormValidation( + 'token', + async ( + { + token, + bondAmount, + depositData, + rawDepositData, + specifyCustomAddresses, + rewardsAddress, + managerAddress, + confirmKeysReady, + }, + { curveParameters, maxStakeEth, ethBalance, stethBalance, wstethBalance }, + validate, + ) => { + // FIXME: validate on submit that token, bondAmount and depositData.length are defined + await validate(['token', 'bondAmount'], () => validateBondAmount({ token, bondAmount, - maxStakeEther, - etherBalance, + maxStakeEth, + ethBalance, stethBalance, wstethBalance, - }); + }), + ); + + // TODO: validate length is zero + await validate('rawDepositData', () => { + if (rawDepositData) { + const { error } = sdk.parseDepositData(rawDepositData); + if (error) { + throw new ValidationError('rawDepositData', error); + } + } else { + throw new ValidationError('rawDepositData', ''); + } + }); - if ( - options.names?.includes('depositData') || - options.names?.includes('rawDepositData') - ) - await validateDepositData({ - depositData, - chainId, - keysUploadLimit, - blockNumber, - }); + // TODO: refactor this validation + await validate(['rawDepositData', 'depositData'], async () => { + await validateDepositData({ + depositData, + sdk, + keysLimit: curveParameters?.keysLimit, + }); + }); - if (options.names?.includes('confirmKeysReady') && !confirmKeysReady) { + await validate('confirmKeysReady', () => { + if (!confirmKeysReady) { throw new ValidationError( 'confirmKeysReady', 'Please confirm that the keys are ready', ); } + }); - if (specifyCustomAddresses) { - if ( - options.names?.includes('rewardsAddress') && - !isAddress(rewardsAddress ?? '') - ) { - throw new ValidationError( - 'rewardsAddress', - 'Specify valid Rewards Address', - ); - } - - if ( - options.names?.includes('managerAddress') && - !isAddress(managerAddress ?? '') - ) { - throw new ValidationError( - 'managerAddress', - 'Specify valid Manager Address', - ); - } + await validate('rewardsAddress', () => { + if (specifyCustomAddresses && !isAddress(rewardsAddress ?? '')) { + throw new ValidationError( + 'rewardsAddress', + 'Specify valid Rewards Address', + ); } + }); - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError(error, 'SubmitKeysForm', 'token'); - } + await validate('managerAddress', () => { + if (specifyCustomAddresses && !isAddress(managerAddress ?? '')) { + throw new ValidationError( + 'managerAddress', + 'Specify valid Manager Address', + ); + } + }); }, - [chainId, dataPromise], + [sdk], ); }; diff --git a/features/create-node-operator/submit-keys-form/controls/amount-input.tsx b/features/create-node-operator/submit-keys-form/controls/amount-input.tsx index bf541719..50174a0e 100644 --- a/features/create-node-operator/submit-keys-form/controls/amount-input.tsx +++ b/features/create-node-operator/submit-keys-form/controls/amount-input.tsx @@ -1,7 +1,7 @@ import { useFormState, useWatch } from 'react-hook-form'; import { InputAmount } from 'shared/components/input-amount'; -import { getTokenDisplayName } from 'utils/getTokenDisplayName'; +import { getTokenDisplayName } from 'utils'; import { SubmitKeysFormInputType } from '../context'; export const AmountInput = () => { @@ -13,11 +13,12 @@ export const AmountInput = () => { return ( ); }; diff --git a/features/create-node-operator/submit-keys-form/controls/custom-addresses-section.tsx b/features/create-node-operator/submit-keys-form/controls/custom-addresses-section.tsx index b06f7014..a8c2521f 100644 --- a/features/create-node-operator/submit-keys-form/controls/custom-addresses-section.tsx +++ b/features/create-node-operator/submit-keys-form/controls/custom-addresses-section.tsx @@ -5,6 +5,7 @@ import { RewardsAddressInput } from './rewards-address-input'; import { RewardsAddressTypeSelect } from './rewards-address-type-select'; import { OptionalSectionHookForm } from 'shared/hook-form/controls'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { EXTENDED_MODE_LINK } from 'consts/external-links'; export const CustomAddressesSection: FC = () => { return ( @@ -20,7 +21,7 @@ export const CustomAddressesSection: FC = () => { access to your Node Operator, bond, and potential rewards. Please check the{' '} detailed description of this feature @@ -36,7 +37,7 @@ export const CustomAddressesSection: FC = () => {
    It can not be changed later on. Please check the{' '} { - const { shareLimit } = useSubmitKeysFormData(); + const { shareLimitStatus } = useSubmitKeysFormData(); return ( - + I confirm that:
    • My nodes are synced, running, and ready for the validator activation
    • - {shareLimit?.status === SHARE_LIMIT_STATUS.APPROACHING && ( + {shareLimitStatus === SHARE_LIMIT_STATUS.APPROACHING && (
    • I understand that the deposit time for my keys can be months or longer because CSM is approaching its stake share limit
    • )} - {shareLimit?.status === SHARE_LIMIT_STATUS.REACHED && ( + {shareLimitStatus === SHARE_LIMIT_STATUS.REACHED && (
    • I understand that my newly uploaded keys are very unlikely to receive deposits in the near future because CSM has reached its diff --git a/features/create-node-operator/submit-keys-form/controls/keys-input.tsx b/features/create-node-operator/submit-keys-form/controls/keys-input.tsx index 95a53ef2..9a307242 100644 --- a/features/create-node-operator/submit-keys-form/controls/keys-input.tsx +++ b/features/create-node-operator/submit-keys-form/controls/keys-input.tsx @@ -1,22 +1,15 @@ -import { ABOUT_DEPOSIT_DATA_LINK } from 'consts/external-links'; +import { UPLOAD_DEPOSIT_DATA_LINK } from 'consts/external-links'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { useFormState } from 'react-hook-form'; import { FormTitle, MatomoLink } from 'shared/components'; -import { DepositDataInputHookForm } from 'shared/hook-form/controls'; -import { SubmitKeysFormInputType } from '../context'; +import { DepositDataHookForm } from 'shared/hook-form/controls'; export const KeysInput = () => { - const { errors } = useFormState({ - name: ['depositData', 'rawDepositData'], - }); - const error = errors.rawDepositData?.message || errors.depositData?.message; - return ( <> Learn more @@ -25,7 +18,8 @@ export const KeysInput = () => { > Upload deposit data - + + ); }; diff --git a/features/create-node-operator/submit-keys-form/controls/manager-address-input.tsx b/features/create-node-operator/submit-keys-form/controls/manager-address-input.tsx index d79c3ead..0dfecbb4 100644 --- a/features/create-node-operator/submit-keys-form/controls/manager-address-input.tsx +++ b/features/create-node-operator/submit-keys-form/controls/manager-address-input.tsx @@ -1,13 +1,20 @@ import { AddressInputHookForm } from 'shared/hook-form/controls'; -import { useAccount } from 'shared/hooks'; +import { SubmitKeysFormInputType, useSubmitKeysFormData } from '../context'; +import { useWatch } from 'react-hook-form'; +import { OwnerChip } from 'shared/components'; export const ManagerAddressInput: React.FC = () => { - const { address } = useAccount(); + const { address } = useSubmitKeysFormData(true); + + const extendedManagerPermissions = useWatch< + SubmitKeysFormInputType, + 'extendedManagerPermissions' + >({ name: 'extendedManagerPermissions' }); return ( Manager Address {extendedManagerPermissions && }} currentAddress={address} /> ); diff --git a/features/create-node-operator/submit-keys-form/controls/referrer-input.tsx b/features/create-node-operator/submit-keys-form/controls/referrer-input.tsx index 91887f3c..16011d63 100644 --- a/features/create-node-operator/submit-keys-form/controls/referrer-input.tsx +++ b/features/create-node-operator/submit-keys-form/controls/referrer-input.tsx @@ -17,6 +17,8 @@ export const ReferrerInput: FC = () => { [referrer], ); + if (!referrer) return null; + return ( { - const { address } = useAccount(); + const { address } = useSubmitKeysFormData(true); + + const extendedManagerPermissions = useWatch< + SubmitKeysFormInputType, + 'extendedManagerPermissions' + >({ name: 'extendedManagerPermissions' }); return ( Rewards Address {!extendedManagerPermissions && } + } currentAddress={address} /> ); diff --git a/features/create-node-operator/submit-keys-form/controls/submit-button.tsx b/features/create-node-operator/submit-keys-form/controls/submit-button.tsx index c6f129c1..9506245a 100644 --- a/features/create-node-operator/submit-keys-form/controls/submit-button.tsx +++ b/features/create-node-operator/submit-keys-form/controls/submit-button.tsx @@ -8,9 +8,5 @@ export const SubmitButton = () => { return ; } - return ( - - Create Node Operator - - ); + return Create Node Operator; }; diff --git a/features/create-node-operator/submit-keys-form/controls/token-select.tsx b/features/create-node-operator/submit-keys-form/controls/token-select.tsx index a7a4b7fa..0e5d384b 100644 --- a/features/create-node-operator/submit-keys-form/controls/token-select.tsx +++ b/features/create-node-operator/submit-keys-form/controls/token-select.tsx @@ -1,19 +1,18 @@ import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { TOKENS } from 'consts/tokens'; import { PATH } from 'consts/urls'; import { FormTitle, - KeysAvailable, + // KeysAvailable, Stack, TokenAmount, } from 'shared/components'; import { TokenButtonsHookForm } from 'shared/hook-form/controls'; import { LocalLink } from 'shared/navigate'; import { useSubmitKeysFormData } from '../context'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const TokenSelect: React.FC = () => { - const { etherBalance, stethBalance, wstethBalance, keysAvailable, loading } = - useSubmitKeysFormData(); + const { ethBalance, stethBalance, wstethBalance } = useSubmitKeysFormData(); return ( <> @@ -21,7 +20,7 @@ export const TokenSelect: React.FC = () => { extra={ How bond is calculated @@ -32,34 +31,22 @@ export const TokenSelect: React.FC = () => { - - + + {/* */} ), - [TOKENS.STETH]: ( + [TOKENS.steth]: ( - - + + {/* */} ), - [TOKENS.WSTETH]: ( + [TOKENS.wsteth]: ( - - + + {/* */} ), }} diff --git a/features/create-node-operator/submit-keys-form/header-operator-type-button.tsx b/features/create-node-operator/submit-keys-form/header-operator-type-button.tsx new file mode 100644 index 00000000..9cd741db --- /dev/null +++ b/features/create-node-operator/submit-keys-form/header-operator-type-button.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; +import { useHeaderCustomActions } from 'shared/layout/header'; +import { TypeButton } from 'shared/node-operator/operator-type'; +import { useSubmitKeysFormData } from './context'; + +/** + * Operator type button that appears in the header on the create node operator page. + * Gets the curve ID from the form data and renders the type badge. + * Uses React Portal to render into the header's custom actions slot. + */ +export const HeaderOperatorTypeButton: FC = () => { + const { curveId, address } = useSubmitKeysFormData(); + + return useHeaderCustomActions( + address && curveId !== undefined ? ( + + ) : null, + ); +}; diff --git a/features/create-node-operator/submit-keys-form/hooks/use-tx-modal-stages-submit-keys.tsx b/features/create-node-operator/submit-keys-form/hooks/use-tx-modal-stages-submit-keys.tsx index 2ea4e96c..a5357341 100644 --- a/features/create-node-operator/submit-keys-form/hooks/use-tx-modal-stages-submit-keys.tsx +++ b/features/create-node-operator/submit-keys-form/hooks/use-tx-modal-stages-submit-keys.tsx @@ -4,24 +4,30 @@ import { useTransactionModalStage, } from 'shared/transaction-modal/hooks/use-transaction-modal-stage'; -import { TOKENS } from 'consts/tokens'; -import type { BigNumber } from 'ethers'; +import { NodeOperatorId, TOKENS } from '@lidofinance/lido-csm-sdk'; import { Plural } from 'shared/components'; -import { AfterKeysUpload, TxAmount } from 'shared/transaction-modal'; +import { + AfterCreateCustomNodeOperator, + AfterKeysUpload, + TxAmount, +} from 'shared/transaction-modal'; import { TxStagePending, TxStageSign, TxStageSuccess, } from 'shared/transaction-modal/tx-stages-basic'; -import { NodeOperatorId } from 'types'; type Props = { keysCount: number; - amount: BigNumber; + amount: bigint; token: TOKENS; }; -type SuccessProps = { nodeOperatorId?: NodeOperatorId; keys: string[] }; +type SuccessProps = { + nodeOperatorId?: NodeOperatorId; + keys: string[]; + hasAnyRole: boolean; +}; const getTxModalStagesSubmitKeys = ( transitStage: TransactionModalTransitStage, @@ -36,7 +42,7 @@ const getTxModalStagesSubmitKeys = ( <> Uploading {keysCount}{' '} {' '} - {amount && ( + {!!amount && ( <> and depositing @@ -56,7 +62,7 @@ const getTxModalStagesSubmitKeys = ( <> Uploading {keysCount}{' '} {' '} - {amount && ( + {!!amount && ( <> and depositing @@ -67,18 +73,25 @@ const getTxModalStagesSubmitKeys = ( />, ), - success: ({ nodeOperatorId, keys }: SuccessProps, txHash?: string) => { + success: ( + { nodeOperatorId, keys, hasAnyRole }: SuccessProps, + txHash?: string, + ) => { return transitStage( - Your Node Operator ID is {nodeOperatorId} + Your Node Operator ID is {nodeOperatorId.toString()}

      - + {hasAnyRole ? ( + + ) : ( + + )} ) : undefined } diff --git a/features/create-node-operator/submit-keys-form/submit-keys-form-info.tsx b/features/create-node-operator/submit-keys-form/submit-keys-form-info.tsx index 48b3275e..ec0987f6 100644 --- a/features/create-node-operator/submit-keys-form/submit-keys-form-info.tsx +++ b/features/create-node-operator/submit-keys-form/submit-keys-form-info.tsx @@ -7,18 +7,17 @@ export const SubmitKeysFormInfo = () => { name: ['depositData'], }); - const { shareLimit } = useSubmitKeysFormData(); + const { shareLimit } = useSubmitKeysFormData(true); return ( {depositData.length} - {shareLimit?.queue.toString()} + {shareLimit?.queue?.toString()} ); diff --git a/features/create-node-operator/submit-keys-form/submit-keys-form.tsx b/features/create-node-operator/submit-keys-form/submit-keys-form.tsx index 160f21e1..1367edb6 100644 --- a/features/create-node-operator/submit-keys-form/submit-keys-form.tsx +++ b/features/create-node-operator/submit-keys-form/submit-keys-form.tsx @@ -2,42 +2,39 @@ import { FC, memo } from 'react'; import { SubmitKeysFormProvider } from './context'; -import { useModifyContext } from 'providers/modify-provider'; import { FormBlock } from 'shared/components'; -import { - BaseFormLoader, - FormControllerStyled, -} from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; +import { SubmitKeysDataProvider } from './context'; import { AmountInput } from './controls/amount-input'; import { CustomAddressesSection } from './controls/custom-addresses-section'; +import { KeysConfirm } from './controls/keys-confirm'; import { KeysInput } from './controls/keys-input'; import { ReferrerInput } from './controls/referrer-input'; import { SubmitButton } from './controls/submit-button'; import { TokenSelect } from './controls/token-select'; import { SubmitKeysFormInfo } from './submit-keys-form-info'; -import { KeysConfirm } from './controls/keys-confirm'; import { DepositQueue } from 'features/view-keys/deposit-queue'; +import { HeaderOperatorTypeButton } from './header-operator-type-button'; -export const SubmitKeysForm: FC = memo(() => { - const { referrer } = useModifyContext(); - - return ( +export const SubmitKeysForm: FC = memo(() => ( + - - - + + + +
      - {referrer && } + - + -
      +
      - ); -}); +
      +)); diff --git a/features/dashboard/bond/available-to-claim.tsx b/features/dashboard/bond/available-to-claim.tsx index f6beb05d..4435b408 100644 --- a/features/dashboard/bond/available-to-claim.tsx +++ b/features/dashboard/bond/available-to-claim.tsx @@ -1,49 +1,47 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { BOND_EXCESS, BOND_INSUFFICIENT } from 'consts/text'; -import { TOKENS } from 'consts/tokens'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; +import { + useFrameInfo, + useNodeOperatorId, + useOperatorBalance, + useOperatorRewards, +} from 'modules/web3'; import { FC } from 'react'; import { Counter, IconTooltip } from 'shared/components'; -import { - getNextRewardsFrame, - useLastRewardsSlot, - useNodeOperatorBalance, - useNodeOperatorRewards, -} from 'shared/hooks'; -import { useAvailableToClaim } from 'shared/hooks/useAvailableToClaim'; -import { formatDate } from 'utils'; +import { calculateAvailableToClaim, formatDate } from 'utils'; import { Balance } from './balance'; import { AccordionStyle, RowBody, RowHeader, RowTitle } from './styles'; export const AvailableToClaim: FC = () => { const id = useNodeOperatorId(); - const { data: bond, initialLoading: isBondLoading } = - useNodeOperatorBalance(id); + const { data: bond, isPending: isBondLoading } = useOperatorBalance(id); - const { data: rewards, initialLoading: isRewardsLoading } = - useNodeOperatorRewards(id); + const { data: rewards, isPending: isRewardsLoading } = useOperatorRewards(id); - const { data: rewardsSlot } = useLastRewardsSlot(); - const nextRewardsDate = rewardsSlot?.timestamp - ? formatDate(getNextRewardsFrame(rewardsSlot.timestamp)) - : null; + const { data: nextDistribution } = useFrameInfo( + (data) => data.lastReport + data.frameDuration, + ); + const nextRewardsDate = formatDate(nextDistribution); - const availableToClaim = useAvailableToClaim({ + const availableToClaim = calculateAvailableToClaim({ bond, rewards, }); return ( Available to claim - {(bond?.isInsufficient || bond?.locked.gt(0)) && ( + {(bond?.isInsufficient || !!bond?.locked) && ( )} { > Rewards @@ -71,7 +70,7 @@ export const AvailableToClaim: FC = () => { warning sign="minus" title={BOND_INSUFFICIENT} - help="Insufficient bond is the missing amount of stETH required to cover all operator’s keys." + help="Insufficient bond is the missing amount of stETH required to cover all operator’s keys" loading={isBondLoading} amount={bond.delta} /> @@ -79,6 +78,7 @@ export const AvailableToClaim: FC = () => { ) : ( <> @@ -91,7 +91,7 @@ export const AvailableToClaim: FC = () => { /> )} - {bond?.locked.gt(0) && ( + {!!bond?.locked && ( <> { title="Locked bond" loading={isBondLoading} amount={bond.locked} - token={TOKENS.ETH} - help="Bond is locked because of an MEV stealing event reported by a dedicated committee. This measure ensures that Node Operators are held accountable for any misbehavior or rule violations." + token={TOKENS.eth} + help="Bond is locked because of an MEV stealing event reported by a dedicated committee. This measure ensures that Node Operators are held accountable for any misbehavior or rule violations" /> )} diff --git a/features/dashboard/bond/balance.tsx b/features/dashboard/bond/balance.tsx index 4d6be46d..a98b133f 100644 --- a/features/dashboard/bond/balance.tsx +++ b/features/dashboard/bond/balance.tsx @@ -1,5 +1,4 @@ -import { TOKENS } from 'consts/tokens'; -import { BigNumber } from 'ethers'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { FC, ReactNode } from 'react'; import { Sign, SignType, TextBlock } from 'shared/components'; import { FormatPrice, FormatToken } from 'shared/formatters'; @@ -8,7 +7,7 @@ import { useEthUsd } from 'shared/hooks'; type Props = { title?: ReactNode; help?: string; - amount?: BigNumber; + amount?: bigint; token?: TOKENS; description?: ReactNode; sign?: SignType; @@ -35,7 +34,7 @@ export const Balance: FC = ({ size={big ? 'sm' : undefined} > {sign && } - + ); }; diff --git a/features/dashboard/bond/bond-balance.tsx b/features/dashboard/bond/bond-balance.tsx index 6e5d64fd..d75efd8f 100644 --- a/features/dashboard/bond/bond-balance.tsx +++ b/features/dashboard/bond/bond-balance.tsx @@ -1,20 +1,19 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { BOND_EXCESS, BOND_INSUFFICIENT } from 'consts/text'; -import { TOKENS } from 'consts/tokens'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; +import { useNodeOperatorId, useOperatorBalance } from 'modules/web3'; import { FC } from 'react'; import { Counter } from 'shared/components'; -import { useNodeOperatorBalance } from 'shared/hooks'; import { Balance } from './balance'; import { AccordionStyle, RowBody, RowHeader, RowTitle } from './styles'; export const BondBalance: FC = () => { const id = useNodeOperatorId(); - const { data: bond, initialLoading: isBondLoading } = - useNodeOperatorBalance(id); + const { data: bond, isPending: isBondLoading } = useOperatorBalance(id); return ( @@ -22,16 +21,18 @@ export const BondBalance: FC = () => { {bond?.isInsufficient && } } > { title={BOND_INSUFFICIENT} loading={isBondLoading} amount={bond?.delta} - help="Insufficient bond is the missing amount of stETH required to cover all operator’s keys." + help="Insufficient bond is the missing amount of stETH required to cover all operator’s keys" /> ) : ( <> )} diff --git a/features/dashboard/bond/bond-section.tsx b/features/dashboard/bond/bond-section.tsx index 784a9cf9..6ffafe9e 100644 --- a/features/dashboard/bond/bond-section.tsx +++ b/features/dashboard/bond/bond-section.tsx @@ -12,6 +12,7 @@ export const BondSection: FC = () => { title="Bond & Rewards" href={PATH.BOND} matomoEvent={MATOMO_CLICK_EVENTS_TYPES.dashboardBondLink} + data-testid="bondRewardsSection" > diff --git a/features/dashboard/bond/last-rewards.tsx b/features/dashboard/bond/last-rewards.tsx index c73eb7e0..8affee96 100644 --- a/features/dashboard/bond/last-rewards.tsx +++ b/features/dashboard/bond/last-rewards.tsx @@ -6,27 +6,26 @@ import { Text, Tooltip, } from '@lidofinance/lido-ui'; -import { differenceInCalendarDays, fromUnixTime } from 'date-fns'; +import { + useNodeOperatorId, + useOperatorInfo, + useOperatorLastRewards, + useFrameInfo, + useRewardsLastReportTxHash, +} from 'modules/web3'; import { ModalComponentType, useModal } from 'providers/modal-provider'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; import { FC, useCallback } from 'react'; import { + FaqLink, GrayText, Plural, Stack, TextBlock, TxLinkEtherscan, } from 'shared/components'; +import { LIDO_OPERATOR_PORTAL_PERFORMANCE_ORACLE } from 'consts/external-links'; import { FaqElement } from 'shared/components/faq/styles'; -import { - getNextRewardsFrame, - getPrevRewardsFrame, - useLastOperatorRewards, - useLastRewardsSlot, - useLastRewrdsTx, - useNodeOperatorInfo, -} from 'shared/hooks'; -import { formatDate, formatPercent } from 'utils'; +import { countCalendarDaysLeft, formatDate, formatPercent } from 'utils'; import { Balance } from './balance'; import { AccordionStyle, @@ -38,50 +37,43 @@ import { } from './styles'; export const LastRewards: FC = () => { - const { data: lastRewards, initialLoading: isLoading } = - useLastOperatorRewards(); - const id = useNodeOperatorId(); - const { data: info } = useNodeOperatorInfo(id); - - const { data: rewardsSlot } = useLastRewardsSlot(); - const lastRewardsDate = rewardsSlot?.timestamp - ? formatDate(rewardsSlot.timestamp) - : null; - const prevRewardsDate = rewardsSlot?.timestamp - ? formatDate(getPrevRewardsFrame(rewardsSlot.timestamp)) - : null; - const nextRewardsDate = rewardsSlot?.timestamp - ? formatDate(getNextRewardsFrame(rewardsSlot.timestamp)) - : null; + const { data: info } = useOperatorInfo(id); + const { data: lastRewards, isPending: isLoading } = + useOperatorLastRewards(id); + const { data: rewardsFrame } = useFrameInfo((data) => ({ + lastDistribution: data.lastReport, + prevDistribution: data.lastReport - data.frameDuration, + nextDistribution: data.lastReport + data.frameDuration, + })); - const daysLeft = rewardsSlot?.timestamp - ? differenceInCalendarDays( - fromUnixTime(getNextRewardsFrame(rewardsSlot.timestamp)), - new Date(), - ) - : null; + const lastRewardsDate = formatDate(rewardsFrame?.lastDistribution); + const prevRewardsDate = formatDate(rewardsFrame?.prevDistribution); + const nextRewardsDate = formatDate(rewardsFrame?.nextDistribution); + const daysLeft = countCalendarDaysLeft(rewardsFrame?.nextDistribution); const showThisSection = lastRewards || (info?.totalDepositedKeys ?? 0) > 0; - const showWhy = lastRewards && lastRewards.distributed.isZero(); + const showWhy = lastRewards && lastRewards.distributed === 0n; if (!showThisSection) return null; return ( - + Latest rewards distribution {prevRewardsDate && lastRewardsDate && ( - + Report frame: {prevRewardsDate} — {lastRewardsDate} )} { - + Next rewards distribution - {rewardsSlot?.timestamp ? ( - + {lastRewardsDate && nextRewardsDate ? ( + Report frame: {lastRewardsDate} — {nextRewardsDate} ) : ( @@ -112,7 +104,7 @@ export const LastRewards: FC = () => { Oracle report is delayed ) : ( - + Expected {daysLeft === 0 ? ( @@ -133,12 +125,13 @@ export const LastRewards: FC = () => { }; const LastReportStats: FC = () => { - const { data: lastRewards, initialLoading: isLoading } = - useLastOperatorRewards(); - const { data: txHash, initialLoading: isTxLoading } = useLastRewrdsTx(); + const nodeOperatorId = useNodeOperatorId(); + const { data: lastRewards, isPending: isLoading } = + useOperatorLastRewards(nodeOperatorId); + const { data: txHash, isPending: isTxLoading } = useRewardsLastReportTxHash(); return ( - + {!lastRewards || lastRewards.validatorsCount ? ( <> {' '} @@ -146,23 +139,19 @@ const LastReportStats: FC = () => { title="Keys over threshold" loading={isLoading} description={ - - Threshold: {formatPercent(lastRewards?.threshold)}% - + lastRewards?.threshold ? ( + + + Threshold: {formatPercent(lastRewards?.threshold)} + + + ) : null } help="Number of your keys above the performance threshold in the latest report frame" > {lastRewards?.validatorsOverThresholdCount}{' '} /{lastRewards?.validatorsCount} - - {lastRewards?.stuck ? 'YES' : 'NO'} - ) : ( @@ -171,7 +160,7 @@ const LastReportStats: FC = () => { )} - + @@ -196,33 +185,19 @@ const Why: FC = () => { }; export const WhyModal: ModalComponentType = ({ ...props }) => ( - + -

      There are two main reasons of you getting no reward within a frame:

      +

      There are main reason of you getting no reward within a frame:

      1. If your validator’s performance was below the threshold within the CSM - Performance Oracle frame (7 days for testnet) the validator does not - receive rewards for the given frame. Read more about{' '} - + Performance Oracle frame the validator does not receive rewards for + the given frame. Read more about{' '} + the CSM Performance Oracle - + .
      2. -
      3. - - Your Node Operator has stuck keys - {' '} - due to not exiting a validator requested for exit timely. -
      diff --git a/features/dashboard/dashboard-page.tsx b/features/dashboard/dashboard-page.tsx index d2f3ffc4..5b1d90ee 100644 --- a/features/dashboard/dashboard-page.tsx +++ b/features/dashboard/dashboard-page.tsx @@ -1,14 +1,13 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { Dashboard } from './dashboard'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; export const DashboardPage: FC = () => { return ( diff --git a/features/dashboard/dashboard.tsx b/features/dashboard/dashboard.tsx index 411a5d94..7ff6d93d 100644 --- a/features/dashboard/dashboard.tsx +++ b/features/dashboard/dashboard.tsx @@ -2,15 +2,15 @@ import { FC } from 'react'; import { BondSection } from './bond'; import { KeysSection } from './keys'; import { RolesSection } from './roles'; -import { ExternalSection } from './external'; +import { SurveysCta } from './surveys-cta'; export const Dashboard: FC = () => { return ( <> + - ); }; diff --git a/features/dashboard/external/external-section.tsx b/features/dashboard/external/external-section.tsx deleted file mode 100644 index 51724c2c..00000000 --- a/features/dashboard/external/external-section.tsx +++ /dev/null @@ -1,86 +0,0 @@ -import { Accordion, Text } from '@lidofinance/lido-ui'; -import { FC } from 'react'; -import { Stack } from 'shared/components'; -import { ExternalButtonLink } from './external-button-link'; - -import { ReactComponent as BeaconchaIcon } from 'assets/icons/beaconcha.svg'; -import { ReactComponent as RatedIcon } from 'assets/icons/rated.svg'; -import { ReactComponent as EthseerIcon } from 'assets/icons/ethseer.svg'; -import { ReactComponent as LidoIcon } from 'assets/icons/lido.svg'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { - useBeaconchainDashboardLink, - useEthSeerLink, - useFeesMonitoningLink, - useOperatorPortalLink, - useRatedLink, -} from 'shared/hooks'; - -export const ExternalSection: FC = () => { - const beaconchainDashboardLink = useBeaconchainDashboardLink(); - const feesMonitoningLink = useFeesMonitoningLink(); - const operatorPortalLink = useOperatorPortalLink(); - const ratedLink = useRatedLink(); - const ethSeerLink = useEthSeerLink(); - - return ( - - External dashboards - - } - > - - } - href={beaconchainDashboardLink} - matomoEvent={MATOMO_CLICK_EVENTS_TYPES.dashboardExternalBeaconchaLink} - > - Dashboard displays statistics of your validators (up to 20 in free - plan) - - } - href={ratedLink} - matomoEvent={MATOMO_CLICK_EVENTS_TYPES.dashboardExternalRatedLink} - > - Provides effectiveness ratings, APRs and other useful metrics - - {ethSeerLink && ( - } - href={ethSeerLink} - matomoEvent={MATOMO_CLICK_EVENTS_TYPES.dashboardExternalEthSeerLink} - > - Provides real-time statistics of your validators’ performance - - )} - } - href={operatorPortalLink} - matomoEvent={ - MATOMO_CLICK_EVENTS_TYPES.dashboardExternalOperatorsPortalLink - } - > - Shows details about invalid keys - - } - href={feesMonitoningLink} - matomoEvent={ - MATOMO_CLICK_EVENTS_TYPES.dashboardExternalFeesMonitoringLink - } - > - Tracks missed slots and blocks with incorrect fee recipient/MEV relays - - - - ); -}; diff --git a/features/dashboard/external/styles.ts b/features/dashboard/external/styles.ts deleted file mode 100644 index 3c6de73c..00000000 --- a/features/dashboard/external/styles.ts +++ /dev/null @@ -1,28 +0,0 @@ -import { ThemeName } from '@lidofinance/lido-ui'; -import { MatomoLink } from 'shared/components'; -import styled from 'styled-components'; - -export const StyledLink = styled(MatomoLink)` - display: flex; - flex-direction: column; - flex: 1 0 47%; - gap: 12px; - align-items: start; - - border: 1px solid var(--lido-color-border); - border-radius: ${({ theme }) => theme.borderRadiusesMap.lg}px; - padding: 12px; - min-width: 240px; - max-width: calc(50% - 8px); - - ${({ theme }) => theme.mediaQueries.lg} { - max-width: unset; - } - - cursor: pointer; - - :hover { - background-color: ${({ theme }) => - theme.name === ThemeName.light ? '#ebf8ff' : '#24343b'}; - } -`; diff --git a/features/dashboard/keys/item.tsx b/features/dashboard/keys/item.tsx index fa1336da..07872004 100644 --- a/features/dashboard/keys/item.tsx +++ b/features/dashboard/keys/item.tsx @@ -23,13 +23,19 @@ export const Item: FC = ({ count, variant, reverse, + ...params }) => { const isEmptyCount = !count || typeof count === 'string'; const secondary = variant === 'secondary' || isEmptyCount; const warning = variant === 'warning' && !isEmptyCount; const body = ( - + {count === undefined ? : count} @@ -49,12 +55,12 @@ export const Item: FC = ({ type ItemActionProps = { action: ReactNode; - title: string; + title?: string; count: number; }; -export const ItemAction: FC = ({ count, title, action }) => { - return ( +export const ItemAction: FC = ({ count, title, action }) => + title ? ( @@ -62,5 +68,4 @@ export const ItemAction: FC = ({ count, title, action }) => { {action} - ); -}; + ) : null; diff --git a/features/dashboard/keys/keys-section.tsx b/features/dashboard/keys/keys-section.tsx index de7e2680..3e0d2808 100644 --- a/features/dashboard/keys/keys-section.tsx +++ b/features/dashboard/keys/keys-section.tsx @@ -1,21 +1,21 @@ +import { KEY_STATUS } from '@lidofinance/lido-csm-sdk'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { PATH } from 'consts/urls'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; +import { + useNodeOperatorId, + useOperatorInfo, + useOperatorKeysWithStatus, +} from 'modules/web3'; import { FC, useCallback } from 'react'; import { SectionBlock, Stack, StatusComment } from 'shared/components'; -import { - useKeysTotalLimit, - useKeysWithStatus, - useNodeOperatorInfo, -} from 'shared/hooks'; -import { KEY_STATUS } from 'consts/key-status'; +import { StatusTitle } from 'shared/components/status-chip/status-chip'; +import { hasStatus, StatusFilter } from 'utils'; import { Item, ItemAction } from './item'; import { AccordionStyle, Row, RowTitle } from './styles'; -import { StatusTitle } from 'shared/components/status-chip/status-chip'; const BAD_STATUSES: KEY_STATUS[] = [ + // KEY_STATUS.WITH_STRIKES, KEY_STATUS.UNBONDED, - KEY_STATUS.STUCK, KEY_STATUS.DUPLICATED, KEY_STATUS.INVALID, KEY_STATUS.NON_QUEUED, @@ -25,37 +25,56 @@ const BAD_STATUSES: KEY_STATUS[] = [ export const KeysSection: FC = () => { const id = useNodeOperatorId(); - const { data: info } = useNodeOperatorInfo(id); - const { data: eaTarget } = useKeysTotalLimit(); + const { data: info } = useOperatorInfo(id); - const { data: keys } = useKeysWithStatus(); + const { data: keys } = useOperatorKeysWithStatus(id); - const keysWithStatus = useCallback( - (filter: KEY_STATUS | KEY_STATUS[]) => - keys?.filter(({ statuses }) => - (Array.isArray(filter) ? filter : [filter]).some((st) => - statuses.includes(st), - ), - ).length, + const keysCountWithStatus = useCallback( + (filter: StatusFilter) => keys?.filter(hasStatus(filter)).length, [keys], ); - const hasWarnings = !!keysWithStatus(BAD_STATUSES); + const hasWarnings = + !!keysCountWithStatus(BAD_STATUSES) || + !!keysCountWithStatus(KEY_STATUS.WITH_STRIKES); + + const actions = BAD_STATUSES.map((badStatus) => + keysCountWithStatus(badStatus) ? ( + } + /> + ) : null, + ).filter((v) => !!v); - const limit = - info && info.targetLimitMode > 0 ? info.targetLimit : eaTarget || '—'; + const actionsWithStrikes = [ + ...(keysCountWithStatus(KEY_STATUS.WITH_STRIKES) + ? [ + } + />, + ] + : []), + ...actions, + ]; + + const limit = info && info.targetLimitMode > 0 ? info.targetLimit : '—'; const limitTooltip = info?.targetLimitMode === 1 ? 'The limit of keys for this Node Operator has been set by the protocol' : info?.targetLimitMode === 2 - ? 'The limit of keys for this Node Operator has been set due to the existence of stuck keys' - : eaTarget - ? 'Early Adoption period implies the limit for the number of keys per a Node Operator to prevent a quick filling of the module by large operators from Day 1' - : undefined; + ? 'The limit of keys for this Node Operator has been set due to the existence of unbonded keys' + : undefined; return ( { - {keys?.length && ( + {!!keys?.length && ( Issues with keys found, action required + + Issues with keys found + {actions.length > 0 && ', action required'} + ) : ( No issues with keys found ) } > - {hasWarnings && ( + {actionsWithStrikes.length > 0 && ( - {BAD_STATUSES.map((badStatus) => - keysWithStatus(badStatus) ? ( - } - /> - ) : null, - )} + {actionsWithStrikes} )} @@ -161,19 +179,19 @@ export const KeysSection: FC = () => { diff --git a/features/dashboard/keys/styles.ts b/features/dashboard/keys/styles.ts index c10d22e4..eae83f4b 100644 --- a/features/dashboard/keys/styles.ts +++ b/features/dashboard/keys/styles.ts @@ -3,7 +3,7 @@ import { StackStyle } from 'shared/components/stack/style'; import styled, { css } from 'styled-components'; export const Row = styled.div` - border-radius: ${({ theme }) => theme.borderRadiusesMap.md}px; + border-radius: ${({ theme }) => theme.borderRadiusesMap.xl}px; padding: 12px 16px; display: grid; diff --git a/features/dashboard/roles/proposed-address.tsx b/features/dashboard/roles/proposed-address.tsx index c0863244..fdb5b773 100644 --- a/features/dashboard/roles/proposed-address.tsx +++ b/features/dashboard/roles/proposed-address.tsx @@ -1,7 +1,6 @@ import { FC } from 'react'; import { Address, Warning } from 'shared/components'; import { RoleBlockProposed } from './styles'; -import { Text } from '@lidofinance/lido-ui'; type Props = { address?: string }; @@ -11,9 +10,7 @@ export const ProposedAddress: FC = ({ address }) => { return ( - -
      - +
      ); }; diff --git a/features/dashboard/roles/role-block.tsx b/features/dashboard/roles/role-block.tsx index 75eddc24..936beafd 100644 --- a/features/dashboard/roles/role-block.tsx +++ b/features/dashboard/roles/role-block.tsx @@ -1,31 +1,42 @@ import { FC } from 'react'; -import { Address, Stack } from 'shared/components'; +import { Address, Stack, OwnerChip, YouChip } from 'shared/components'; import { ProposedAddress } from './proposed-address'; -import { Chip, RoleBlockWrapper, RoleTitle } from './styles'; -import { Text } from '@lidofinance/lido-ui'; +import { RoleBlockWrapper, RoleTitle } from './styles'; +import { Tooltip } from '@lidofinance/lido-ui'; +import { ROLES } from '@lidofinance/lido-csm-sdk'; type RoleBlockProps = { - title: string; + type: ROLES; address: string; proposedAddress?: string; isYou?: boolean; + isOwner?: boolean; }; export const RoleBlock: FC = ({ - title, + type, isYou, + isOwner, address, proposedAddress, }) => { + const title = type === ROLES.MANAGER ? 'Manager Address' : 'Rewards Address'; + const ownerTooltip = + type === ROLES.MANAGER + ? 'Manager has extended permissions and ultimate control. Can change the Rewards address' + : 'Rewards address has ultimate control. Can reset the Manager address'; return ( {title} - {isYou && You} + {isOwner && ( + + + + )} + {isYou && } - -
      - +
      ); diff --git a/features/dashboard/roles/roles-section.tsx b/features/dashboard/roles/roles-section.tsx index 2c4fbf2e..97952481 100644 --- a/features/dashboard/roles/roles-section.tsx +++ b/features/dashboard/roles/roles-section.tsx @@ -1,15 +1,25 @@ import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { PATH } from 'consts/urls'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; +import { + useDappStatus, + useNodeOperatorId, + useOperatorInfo, + useOperatorOwner, +} from 'modules/web3'; import { FC } from 'react'; import { SectionBlock, Stack } from 'shared/components'; -import { useAddressCompare, useNodeOperatorInfo } from 'shared/hooks'; +import invariant from 'tiny-invariant'; +import { isAddressEqual } from 'viem'; import { RoleBlock } from './role-block'; +import { ROLES } from '@lidofinance/lido-csm-sdk'; export const RolesSection: FC = () => { - const isUserAddress = useAddressCompare(); + const { address } = useDappStatus(); const id = useNodeOperatorId(); - const { data: info } = useNodeOperatorInfo(id); + const { data: info } = useOperatorInfo(id); + const { data: owner } = useOperatorOwner(id); + + invariant(address, 'address should be defined'); return ( { {info && ( )} diff --git a/features/dashboard/roles/styles.ts b/features/dashboard/roles/styles.ts index ac2c5b89..e1cfab55 100644 --- a/features/dashboard/roles/styles.ts +++ b/features/dashboard/roles/styles.ts @@ -32,31 +32,6 @@ export const RoleBlockProposed = styled.div` } `; -export const Chip = styled.span` - position: relative; - overflow: hidden; - padding: 0px 6px; - border-radius: ${({ theme }) => theme.borderRadiusesMap.xs}px; - /* background-color:; */ - - align-content: center; - color: var(--lido-color-primary); - font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; - line-height: ${({ theme }) => theme.fontSizesMap.lg}px; - font-weight: 700; - - ::before { - content: ''; - position: absolute; - display: block; - - background-color: var(--lido-color-primary); - transition: opacity 100ms ease 0s; - opacity: 0.1; - inset: 0px; - } -`; - export const RoleTitle = styled.h4` color: var(--lido-color-text); font-size: ${({ theme }) => theme.fontSizesMap.xs}px; diff --git a/features/dashboard/surveys-cta/index.ts b/features/dashboard/surveys-cta/index.ts new file mode 100644 index 00000000..90f421ae --- /dev/null +++ b/features/dashboard/surveys-cta/index.ts @@ -0,0 +1 @@ +export * from './surveys-cta'; diff --git a/features/dashboard/surveys-cta/surveys-cta.tsx b/features/dashboard/surveys-cta/surveys-cta.tsx new file mode 100644 index 00000000..8eb710a3 --- /dev/null +++ b/features/dashboard/surveys-cta/surveys-cta.tsx @@ -0,0 +1,56 @@ +import { Button } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { Banner, CloseButton, InverseThemeProvider } from 'shared/components'; +import { getSurveyDates, useSurveyEnabled } from 'shared/hooks'; +import { LocalLink } from 'shared/navigate'; +import { formatDate } from 'utils'; + +export const SurveysCta: FC = () => { + const { enabled, variant, onClose } = useSurveyEnabled(); + const { end } = getSurveyDates(); + + if (!enabled || !variant) return null; + + const isSubmit = variant === 'submit'; + + return ( + } + > +
      + {isSubmit ? ( + <> + Please submit your validator setup data by{' '} + {formatDate(end, 'MMMM do')} to help support transparency within the + Lido Protocol. + + ) : ( + <> + The configuration of your setup may have changed since your last + survey submission. Please review your setup details by{' '} + {formatDate(end, 'MMMM do')}. + + )}{' '} + Navigate to the Surveys tab + {isSubmit ? ( + <> and complete the "Your Setup" form + ) : ( + <> to proceed + )} + . +
      +
      + + + + + +
      + ); +}; diff --git a/features/eject-keys/eject-keys-page.tsx b/features/eject-keys/eject-keys-page.tsx new file mode 100644 index 00000000..9856c0e0 --- /dev/null +++ b/features/eject-keys/eject-keys-page.tsx @@ -0,0 +1,26 @@ +import { FC } from 'react'; + +import { Layout } from 'shared/layout'; +import { + DeleteKeysSwitcher, + DeleteKeysSwitcherRoutes, + KeysPageSwitcher, +} from 'shared/navigate'; +import { EjectKeys } from './eject-keys'; +import { Faq, FormBlock } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; + +export const EjectKeysPage: FC = () => ( + + + + + + + + +); diff --git a/features/eject-keys/eject-keys.tsx b/features/eject-keys/eject-keys.tsx new file mode 100644 index 00000000..2cb6517e --- /dev/null +++ b/features/eject-keys/eject-keys.tsx @@ -0,0 +1,14 @@ +import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; +import { useWeb3Key } from 'shared/hooks'; +import { EjectKeysForm } from './eject-keys/eject-keys-form'; + +export const EjectKeys = () => { + const key = useWeb3Key(); + return ( + <> + + + + + ); +}; diff --git a/features/eject-keys/eject-keys/confirm-eject-keys-modal.tsx b/features/eject-keys/eject-keys/confirm-eject-keys-modal.tsx new file mode 100644 index 00000000..57d2bf8a --- /dev/null +++ b/features/eject-keys/eject-keys/confirm-eject-keys-modal.tsx @@ -0,0 +1,37 @@ +import { Button, Modal, Text } from '@lidofinance/lido-ui'; + +import type { ModalComponentType } from 'providers/modal-provider'; +import { Stack } from 'shared/components'; +import { ConfirmModalProps } from 'shared/hooks'; + +export const ConfirmEjectKeysModal: ModalComponentType = ({ + onConfirm, + onReject, + ...props +}) => { + return ( + + + + + Selected keys will be ejected from the Consensus Layer + + + Triggering the validator exit from the Execution Layer incurs + network fees and serves as a last resort measure to exit the + validator.{' '} + + + Remember that validators exits don’t happen immediately and require + some time to be processed, and that the bond is only released once + the full withdrawal has been completed. + + + + + + + ); +}; diff --git a/features/eject-keys/eject-keys/confirm-high-cost-modal.tsx b/features/eject-keys/eject-keys/confirm-high-cost-modal.tsx new file mode 100644 index 00000000..74615847 --- /dev/null +++ b/features/eject-keys/eject-keys/confirm-high-cost-modal.tsx @@ -0,0 +1,39 @@ +import { Button, Modal, Text } from '@lidofinance/lido-ui'; + +import type { ModalComponentType } from 'providers/modal-provider'; +import { Stack } from 'shared/components'; +import { ConfirmModalProps } from 'shared/hooks'; + +export const ConfirmHighCostModal: ModalComponentType = ({ + onConfirm, + onReject, + ...props +}) => { + return ( + + + + + High ejection cost detected + + + The ejection cost per key is unusually high. You may want to wait + for ejection fees to decrease. + + + Are you sure you want to proceed? + + + + + + + + + + ); +}; diff --git a/features/eject-keys/eject-keys/context/eject-keys-data-provider.tsx b/features/eject-keys/eject-keys/context/eject-keys-data-provider.tsx new file mode 100644 index 00000000..2dfd8332 --- /dev/null +++ b/features/eject-keys/eject-keys/context/eject-keys-data-provider.tsx @@ -0,0 +1,86 @@ +import { KEY_STATUS } from '@lidofinance/lido-csm-sdk'; +import { + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + useEthereumBalance, + useKeyEjectFee, + useNodeOperatorId, + useOperatorCurveId, + useOperatorInfo, + useOperatorKeysWithStatus, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { hasStatus } from 'utils'; +import { type EjectKeysFormNetworkData } from './types'; + +const useEjectKeysFormNetworkData: NetworkData< + EjectKeysFormNetworkData +> = () => { + const ethBalanceQuery = useEthereumBalance(); + const nodeOperatorId = useNodeOperatorId(); + const infoQuery = useOperatorInfo(nodeOperatorId); + const keysQuery = useOperatorKeysWithStatus(nodeOperatorId, (keys) => + keys.filter(hasStatus([KEY_STATUS.ACTIVE, KEY_STATUS.ACTIVATION_PENDING])), + ); + + const ethBalance = ethBalanceQuery.data; + const info = infoQuery.data; + const keys = keysQuery.data; + + const isEthBalanceLoading = ethBalanceQuery.isPending; + const isInfoLoading = infoQuery.isPending; + const isKeysLoading = keysQuery.isPending; + + const { data: curveId, isPending: isCurveIdLoading } = + useOperatorCurveId(nodeOperatorId); + const { data: ejectKeyFee, isPending: isEjectKeyFeeLoading } = + useKeyEjectFee(); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + ethBalanceQuery.queryKey, + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + ]); + }, [invalidate, ethBalanceQuery.queryKey]); + + const isPending = + isInfoLoading || + isCurveIdLoading || + isEthBalanceLoading || + isKeysLoading || + isEjectKeyFeeLoading; + + return { + data: { + ethBalance, + nodeOperatorId, + curveId, + ejectKeyFee, + keys, + info, + } as EjectKeysFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useEjectKeysFormData = useFormData; + +export const EjectKeysDataProvider: FC = ({ children }) => { + const networkData = useEjectKeysFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/eject-keys/eject-keys/context/eject-keys-form-provider.tsx b/features/eject-keys/eject-keys/context/eject-keys-form-provider.tsx new file mode 100644 index 00000000..c14c5ae1 --- /dev/null +++ b/features/eject-keys/eject-keys/context/eject-keys-form-provider.tsx @@ -0,0 +1,28 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormProvider, useForm } from 'react-hook-form'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { EjectKeysUpdater } from './eject-keys-updater'; +import { type EjectKeysFormInputType } from './types'; +import { useEjectKeysSubmit } from './use-eject-keys-submit'; +import { useEjectKeysValidation } from './use-eject-keys-validation'; + +export const EjectKeysFormProvider: FC = ({ children }) => { + const resolver = useEjectKeysValidation(); + + const formObject = useForm({ + defaultValues: { selection: [] }, + resolver, + mode: 'onChange', + }); + + const submitter = useEjectKeysSubmit(); + + return ( + + + + {children} + + + ); +}; diff --git a/features/eject-keys/eject-keys/context/eject-keys-updater.tsx b/features/eject-keys/eject-keys/context/eject-keys-updater.tsx new file mode 100644 index 00000000..55223c4e --- /dev/null +++ b/features/eject-keys/eject-keys/context/eject-keys-updater.tsx @@ -0,0 +1,27 @@ +import { FC, useEffect } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { useEjectKeysFormData } from './eject-keys-data-provider'; +import { EjectKeysFormInputType } from './types'; + +export const EjectKeysUpdater: FC = () => { + const [selection] = useWatch({ + name: ['selection'], + }); + + const { setValue } = useFormContext(); + + const { ejectKeyFee } = useEjectKeysFormData(); + + const feeAmount = + ejectKeyFee !== undefined && selection?.length + ? ejectKeyFee * BigInt(selection.length) + : undefined; + + useEffect(() => { + setValue('feeAmount', feeAmount, { shouldValidate: true }); + // setValue is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [feeAmount]); + + return null; +}; diff --git a/features/eject-keys/eject-keys/context/index.ts b/features/eject-keys/eject-keys/context/index.ts new file mode 100644 index 00000000..27b676ac --- /dev/null +++ b/features/eject-keys/eject-keys/context/index.ts @@ -0,0 +1,3 @@ +export * from './eject-keys-form-provider'; +export * from './eject-keys-data-provider'; +export * from './types'; diff --git a/features/eject-keys/eject-keys/context/types.ts b/features/eject-keys/eject-keys/context/types.ts new file mode 100644 index 00000000..ba14131f --- /dev/null +++ b/features/eject-keys/eject-keys/context/types.ts @@ -0,0 +1,19 @@ +import { + KeyWithStatus, + NodeOperatorId, + NodeOperatorInfo, +} from '@lidofinance/lido-csm-sdk'; + +export type EjectKeysFormInputType = { + selection: number[]; + feeAmount?: bigint; +}; + +export type EjectKeysFormNetworkData = { + nodeOperatorId: NodeOperatorId; + curveId: bigint; + ethBalance: bigint; + keys: KeyWithStatus[]; + info: NodeOperatorInfo; + ejectKeyFee: bigint; +}; diff --git a/features/eject-keys/eject-keys/context/use-eject-keys-submit.ts b/features/eject-keys/eject-keys/context/use-eject-keys-submit.ts new file mode 100644 index 00000000..83079a1e --- /dev/null +++ b/features/eject-keys/eject-keys/context/use-eject-keys-submit.ts @@ -0,0 +1,89 @@ +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { HIGH_EJECTION_COST_THRESHOLD } from 'consts'; +import { useLidoSDK } from 'modules/web3'; +import { useCallback } from 'react'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { handleTxError } from 'shared/transaction-modal'; +import invariant from 'tiny-invariant'; +import { useConfirmHighCostModal } from '../hooks/use-confirm-high-cost-modal'; +import { useConfirmEjectKeysModal } from '../hooks/use-confirm-modal'; +import { useTxModalStagesEjectKeys } from '../hooks/use-tx-modal-stages-eject-keys'; +import { EjectKeysFormInputType, EjectKeysFormNetworkData } from './types'; + +export const useEjectKeysSubmit: FormSubmitterHook< + EjectKeysFormInputType, + EjectKeysFormNetworkData +> = () => { + const { csm } = useLidoSDK(); + const { txModalStages } = useTxModalStagesEjectKeys(); + const confirm = useConfirmEjectKeysModal(); + const confirmHighCost = useConfirmHighCostModal(); + + return useCallback( + async ( + { selection, feeAmount }, + { nodeOperatorId, ejectKeyFee }, + { onConfirm, onRetry }, + ) => { + invariant(feeAmount !== undefined, 'Fee amount is not defined'); + + if ( + ejectKeyFee >= HIGH_EJECTION_COST_THRESHOLD && + !(await confirmHighCost({})) + ) { + return false; + } + + if (!(await confirm({}))) { + return false; + } + + try { + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ keysCount: selection.length }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending( + { keysCount: selection.length }, + payload.hash, + ); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success( + { keysCount: selection.length }, + payload.hash, + ); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.keys.ejectKeysByArray({ + nodeOperatorId, + keyIndices: selection.map((v) => BigInt(v)), + amount: feeAmount, + callback, + }); + + await onConfirm?.(); + + return true; + } catch (error) { + return handleTxError(error, txModalStages, onRetry); + } + }, + [confirm, confirmHighCost, csm.keys, txModalStages], + ); +}; diff --git a/features/eject-keys/eject-keys/context/use-eject-keys-validation.ts b/features/eject-keys/eject-keys/context/use-eject-keys-validation.ts new file mode 100644 index 00000000..849c7006 --- /dev/null +++ b/features/eject-keys/eject-keys/context/use-eject-keys-validation.ts @@ -0,0 +1,18 @@ +import { + useFormValidation, + ValidationError, +} from 'shared/hook-form/validation'; +import type { EjectKeysFormInputType, EjectKeysFormNetworkData } from './types'; + +export const useEjectKeysValidation = () => { + return useFormValidation( + 'selection', + async ({ selection }, _, validate) => { + await validate('selection', () => { + if (selection?.length === 0) { + throw new ValidationError('selection', 'No keys selected'); + } + }); + }, + ); +}; diff --git a/features/eject-keys/eject-keys/controls/amount-input.tsx b/features/eject-keys/eject-keys/controls/amount-input.tsx new file mode 100644 index 00000000..18a8823b --- /dev/null +++ b/features/eject-keys/eject-keys/controls/amount-input.tsx @@ -0,0 +1,29 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { Text } from '@lidofinance/lido-ui'; +import { useWatch } from 'react-hook-form'; +import { DisabledInputAmount, IconTooltip, Stack } from 'shared/components'; +import { EjectKeysFormInputType } from '../context'; + +export const AmountInput = () => { + const { feeAmount } = useWatch(); + + return ( + + + + Will be deducted from your wallet balance{' '} + + + + ); +}; diff --git a/features/eject-keys/eject-keys/controls/keys-selector.tsx b/features/eject-keys/eject-keys/controls/keys-selector.tsx new file mode 100644 index 00000000..4cc7a468 --- /dev/null +++ b/features/eject-keys/eject-keys/controls/keys-selector.tsx @@ -0,0 +1,25 @@ +import { PATH } from 'consts'; +import { FormTitle, WarningBlock } from 'shared/components'; +import { EjectKeysSelectorHookForm } from 'shared/hook-form/controls'; +import { LocalLink } from 'shared/navigate'; +import { useEjectKeysFormData } from '../context'; + +export const KeysSelector = () => { + const { keys } = useEjectKeysFormData(true); + + return ( + <> + + This is not the normal exit flow. This functionality should be + used only as a last resort to exit your keys by utilizing the Execution + Layer Triggerable Withdrawals (which includes additional network fees). + You might need to use this method in case you don’t have an ability to + access your validator keys. If you can exit your keys normally, please + proceed with{' '} + the regular exit flow. + + Choose keys to eject + + + ); +}; diff --git a/features/eject-keys/eject-keys/controls/submit-button.tsx b/features/eject-keys/eject-keys/controls/submit-button.tsx new file mode 100644 index 00000000..b7f19ec0 --- /dev/null +++ b/features/eject-keys/eject-keys/controls/submit-button.tsx @@ -0,0 +1,5 @@ +import { SubmitButtonHookForm } from 'shared/hook-form/controls'; + +export const SubmitButton = () => { + return Eject Keys; +}; diff --git a/features/eject-keys/eject-keys/eject-keys-form-info.tsx b/features/eject-keys/eject-keys/eject-keys-form-info.tsx new file mode 100644 index 00000000..e04c2e03 --- /dev/null +++ b/features/eject-keys/eject-keys/eject-keys-form-info.tsx @@ -0,0 +1,23 @@ +import { DataTable, DataTableRow } from '@lidofinance/lido-ui'; +import { useWatch } from 'react-hook-form'; +import { EjectKeysFormInputType, useEjectKeysFormData } from './context'; +import { FormatToken } from 'shared/formatters'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; + +export const EjectKeysFormInfo = () => { + const selection = useWatch({ + name: 'selection', + }); + const { ejectKeyFee } = useEjectKeysFormData(); + + return ( + + + {selection.length} + + + + + + ); +}; diff --git a/features/eject-keys/eject-keys/eject-keys-form-loader.tsx b/features/eject-keys/eject-keys/eject-keys-form-loader.tsx new file mode 100644 index 00000000..9cb3a094 --- /dev/null +++ b/features/eject-keys/eject-keys/eject-keys-form-loader.tsx @@ -0,0 +1,17 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormLoader } from 'shared/hook-form/form-controller'; +import { useEjectKeysFormData } from './context'; + +export const EjectKeysFormLoader: FC = ({ children }) => { + const { keys } = useEjectKeysFormData(); + const isEmpty = !keys?.length; + + return ( + No keys available to eject} + emptyNote="Only deposited keys that are eligible for triggerable withdrawals can be ejected. Keys must be deposited and meet withdrawal requirements to appear here." + > + {children} + + ); +}; diff --git a/features/eject-keys/eject-keys/eject-keys-form.tsx b/features/eject-keys/eject-keys/eject-keys-form.tsx new file mode 100644 index 00000000..770ffb83 --- /dev/null +++ b/features/eject-keys/eject-keys/eject-keys-form.tsx @@ -0,0 +1,28 @@ +import { FC, memo } from 'react'; +import { FormBlock } from 'shared/components'; +import { Form } from 'shared/hook-form/form-controller'; +import { EjectKeysDataProvider, EjectKeysFormProvider } from './context'; +import { AmountInput } from './controls/amount-input'; +import { KeysSelector } from './controls/keys-selector'; +import { SubmitButton } from './controls/submit-button'; +import { EjectKeysFormInfo } from './eject-keys-form-info'; +import { EjectKeysFormLoader } from './eject-keys-form-loader'; + +export const EjectKeysForm: FC = memo(() => { + return ( + + + + +
      + + + + + +
      +
      +
      +
      + ); +}); diff --git a/features/eject-keys/eject-keys/hooks/use-confirm-high-cost-modal.ts b/features/eject-keys/eject-keys/hooks/use-confirm-high-cost-modal.ts new file mode 100644 index 00000000..0ba02eab --- /dev/null +++ b/features/eject-keys/eject-keys/hooks/use-confirm-high-cost-modal.ts @@ -0,0 +1,4 @@ +import { getUseConfirmModal } from 'shared/hooks'; +import { ConfirmHighCostModal } from '../confirm-high-cost-modal'; + +export const useConfirmHighCostModal = getUseConfirmModal(ConfirmHighCostModal); diff --git a/features/eject-keys/eject-keys/hooks/use-confirm-modal.ts b/features/eject-keys/eject-keys/hooks/use-confirm-modal.ts new file mode 100644 index 00000000..ca6140db --- /dev/null +++ b/features/eject-keys/eject-keys/hooks/use-confirm-modal.ts @@ -0,0 +1,6 @@ +import { getUseConfirmModal } from 'shared/hooks'; +import { ConfirmEjectKeysModal } from '../confirm-eject-keys-modal'; + +export const useConfirmEjectKeysModal = getUseConfirmModal( + ConfirmEjectKeysModal, +); diff --git a/features/eject-keys/eject-keys/hooks/use-tx-modal-stages-eject-keys.tsx b/features/eject-keys/eject-keys/hooks/use-tx-modal-stages-eject-keys.tsx new file mode 100644 index 00000000..1323e0df --- /dev/null +++ b/features/eject-keys/eject-keys/hooks/use-tx-modal-stages-eject-keys.tsx @@ -0,0 +1,58 @@ +import { Plural } from 'shared/components'; +import { + TransactionModalTransitStage, + TxStagePending, + TxStageSign, + TxStageSuccess, + getGeneralTransactionModalStages, + useTransactionModalStage, +} from 'shared/transaction-modal'; + +type Props = { + keysCount: number; +}; + +const getTxModalStagesEjectKeys = ( + transitStage: TransactionModalTransitStage, +) => ({ + ...getGeneralTransactionModalStages(transitStage), + + sign: (props: Props) => + transitStage( + , + ), + + pending: (props: Props, txHash?: string) => + transitStage( + , + ), + + success: (props: Props, txHash?: string) => + transitStage( + + {props.keysCount}{' '} + has + been ejected + + } + description="" + />, + { + isClosableOnLedger: true, + }, + ), +}); + +export const useTxModalStagesEjectKeys = () => { + return useTransactionModalStage(getTxModalStagesEjectKeys); +}; diff --git a/features/eject-keys/eject-keys/index.ts b/features/eject-keys/eject-keys/index.ts new file mode 100644 index 00000000..dd468def --- /dev/null +++ b/features/eject-keys/eject-keys/index.ts @@ -0,0 +1 @@ +export { EjectKeysForm } from './eject-keys-form'; diff --git a/features/eject-keys/index.ts b/features/eject-keys/index.ts new file mode 100644 index 00000000..04001a79 --- /dev/null +++ b/features/eject-keys/index.ts @@ -0,0 +1,2 @@ +export * from './eject-keys-page'; +export * from './eject-keys'; diff --git a/features/exit-keys/exit-keys-page.tsx b/features/exit-keys/exit-keys-page.tsx new file mode 100644 index 00000000..c68945d9 --- /dev/null +++ b/features/exit-keys/exit-keys-page.tsx @@ -0,0 +1,26 @@ +import { FC } from 'react'; + +import { Layout } from 'shared/layout'; +import { + DeleteKeysSwitcher, + DeleteKeysSwitcherRoutes, + KeysPageSwitcher, +} from 'shared/navigate'; +import { ExitKeys } from './exit-keys'; +import { Faq, FormBlock } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; + +export const ExitKeysPage: FC = () => ( + + + + + + + + +); diff --git a/features/exit-keys/exit-keys.tsx b/features/exit-keys/exit-keys.tsx new file mode 100644 index 00000000..592fd80b --- /dev/null +++ b/features/exit-keys/exit-keys.tsx @@ -0,0 +1,73 @@ +import { Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { + ExternalMatomoLink, + FormTitle, + StackStyle, + WarningBlock, +} from 'shared/components'; + +export const ExitKeys = () => { + return ( + <> + Follow the instuctions + + Sign and broadcast an exit message for each validator key you want to + exit using one of the guides below: + + +
    • + + Guide for Dappnode + +
    • +
    • + + Guide for Sedge + +
    • +
    • + + Guide for Stereum + +
    • +
    • + + Guide for EthPillar + +
    • +
    • + + Guide for EthDocker + +
    • +
    • + + Guide for Systemd + +
    • + + + This action should be performed outside the CSM UI + + + ); +}; diff --git a/features/exit-keys/index.ts b/features/exit-keys/index.ts new file mode 100644 index 00000000..1939d324 --- /dev/null +++ b/features/exit-keys/index.ts @@ -0,0 +1,2 @@ +export * from './exit-keys-page'; +export * from './exit-keys'; diff --git a/features/ics/apply-form/apply-form.tsx b/features/ics/apply-form/apply-form.tsx new file mode 100644 index 00000000..a4235444 --- /dev/null +++ b/features/ics/apply-form/apply-form.tsx @@ -0,0 +1,27 @@ +import { FC, memo } from 'react'; +import { FormBlock } from 'shared/components'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; +import { ApplyDataProvider, ApplyFormProvider } from './context'; +import { + AdditionalAddresses, + MainAddress, + SocialProof, + SubmitButton, +} from './controls'; + +export const ApplyForm: FC = memo(() => ( + + + + +
      + + + + + +
      +
      +
      +
      +)); diff --git a/features/ics/apply-form/context/apply-data-provider.tsx b/features/ics/apply-form/context/apply-data-provider.tsx new file mode 100644 index 00000000..9689e112 --- /dev/null +++ b/features/ics/apply-form/context/apply-data-provider.tsx @@ -0,0 +1,42 @@ +import { useQueryClient } from '@tanstack/react-query'; +import { ICS_FORM_STATUS_KEY } from 'features/ics/shared'; +import { useDappStatus } from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import type { ApplyFormNetworkData } from './types'; + +const useApplyFormNetworkData: NetworkData = () => { + const { address } = useDappStatus(); + + const queryClient = useQueryClient(); + + const revalidate = useCallback(() => { + void queryClient.invalidateQueries({ + queryKey: [ICS_FORM_STATUS_KEY], + }); + }, [queryClient]); + + return { + data: { + mainAddress: address, + } as ApplyFormNetworkData, + isPending: false, + revalidate, + }; +}; + +export const useApplyFormData = useFormData; + +export const ApplyDataProvider: FC = ({ children }) => { + const networkData = useApplyFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/ics/apply-form/context/apply-form-provider.tsx b/features/ics/apply-form/context/apply-form-provider.tsx new file mode 100644 index 00000000..f73b3e41 --- /dev/null +++ b/features/ics/apply-form/context/apply-form-provider.tsx @@ -0,0 +1,35 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormProvider, useForm } from 'react-hook-form'; +import { + FormControllerProvider, + useFormDefaultValues, +} from 'shared/hook-form/form-controller'; +import type { ApplyFormInputType } from './types'; +import { useApplyFormSubmit } from './use-apply-form-submit'; +import { useApplyFormValidation } from './use-apply-form-validation'; + +export const ApplyFormProvider: FC = ({ children }) => { + const resolver = useApplyFormValidation(); + + const defaultValues = useFormDefaultValues(() => ({ + additionalAddresses: [], + twitterLink: '', + discordLink: '', + })); + + const formObject = useForm({ + defaultValues, + resolver, + mode: 'onChange', + }); + + const submitter = useApplyFormSubmit(); + + return ( + + + {children} + + + ); +}; diff --git a/features/ics/apply-form/context/consts.ts b/features/ics/apply-form/context/consts.ts new file mode 100644 index 00000000..77f5b4c2 --- /dev/null +++ b/features/ics/apply-form/context/consts.ts @@ -0,0 +1 @@ +export const MAX_ADDITIONAL_ADDRESSES = 5; diff --git a/features/ics/apply-form/context/index.ts b/features/ics/apply-form/context/index.ts new file mode 100644 index 00000000..89ebd98e --- /dev/null +++ b/features/ics/apply-form/context/index.ts @@ -0,0 +1,5 @@ +export * from './apply-data-provider'; +export * from './apply-form-provider'; +export * from './consts'; +export * from './types'; +export * from './use-verify-message'; diff --git a/features/ics/apply-form/context/types.ts b/features/ics/apply-form/context/types.ts new file mode 100644 index 00000000..16d06755 --- /dev/null +++ b/features/ics/apply-form/context/types.ts @@ -0,0 +1,17 @@ +import { Address } from 'viem'; + +export type AdditionalAddress = { + address: string; + signature: string; + verified?: boolean; +}; + +export type ApplyFormInputType = { + additionalAddresses: AdditionalAddress[]; + twitterLink?: string; + discordLink?: string; +}; + +export type ApplyFormNetworkData = { + mainAddress: Address; +}; diff --git a/features/ics/apply-form/context/use-apply-form-submit.ts b/features/ics/apply-form/context/use-apply-form-submit.ts new file mode 100644 index 00000000..0dec3d0d --- /dev/null +++ b/features/ics/apply-form/context/use-apply-form-submit.ts @@ -0,0 +1,73 @@ +import { + IcsApplyDto, + useApplyFormMutation, + useIcsState, +} from 'features/ics/shared'; +import { useCallback } from 'react'; +import type { ApplyFormInputType, ApplyFormNetworkData } from './types'; +import { useModalStages } from './use-modal-stages'; + +const transformFormDataToApiPayload = ( + form: ApplyFormInputType, + data: ApplyFormNetworkData, +): IcsApplyDto => { + return { + mainAddress: data.mainAddress, + additionalAddresses: form.additionalAddresses, + twitterLink: form.twitterLink || undefined, + discordLink: form.discordLink || undefined, + }; +}; + +export const useApplyFormSubmit = () => { + const { txModalStages: stages } = useModalStages(); + const { reset } = useIcsState(); + + const mutation = useApplyFormMutation({}); + + return useCallback( + async ( + form: ApplyFormInputType, + data: ApplyFormNetworkData, + { + onConfirm, + onRetry, + }: { onConfirm?: () => void | Promise; onRetry: () => void }, + ) => { + const apiPayload = transformFormDataToApiPayload(form, data); + + try { + stages.pending(); + await mutation.mutateAsync(apiPayload); + window.scrollTo({ top: 0 }); + reset(false); + stages.success(); + void onConfirm?.(); + return true; + } catch (error: any) { + let errorMessage = 'Something went wrong'; + let errorDetails: string[] = []; + + if (error?.response?.data?.message) { + const messages = error.response.data.message; + if (Array.isArray(messages)) { + errorDetails = messages; + errorMessage = `Validation failed: ${messages.length} error${messages.length > 1 ? 's' : ''}`; + } else if (typeof messages === 'string') { + errorMessage = messages; + } + } else if (error?.message) { + errorMessage = error.message; + } + + window.scrollTo({ top: 0 }); + stages.failed( + { message: errorMessage, details: errorDetails }, + onRetry, + ); + return false; + } + }, + [mutation, reset, stages], + ); +}; diff --git a/features/ics/apply-form/context/use-apply-form-validation.ts b/features/ics/apply-form/context/use-apply-form-validation.ts new file mode 100644 index 00000000..72279991 --- /dev/null +++ b/features/ics/apply-form/context/use-apply-form-validation.ts @@ -0,0 +1,117 @@ +import { + useFormValidation, + ValidationError, +} from 'shared/hook-form/validation'; +import { isAddress, isAddressEqual, isHex } from 'viem'; +import { useApplyFormData } from './apply-data-provider'; +import { MAX_ADDITIONAL_ADDRESSES } from './consts'; +import { ApplyFormNetworkData, type ApplyFormInputType } from './types'; +import { useRawVefiryMessage } from './use-verify-message'; + +const twitterUrlRegex = /^https:\/\/(twitter\.com|x\.com)\/\w+\/status\/\d+$/; +const discordMessageRegex = /^https:\/\/discord\.com\/channels\/\d+\/\d+\/\d+$/; + +export const useApplyFormValidation = () => { + const { mainAddress } = useApplyFormData(true); + const verifyMessage = useRawVefiryMessage(mainAddress); + + return useFormValidation( + 'additionalAddresses', + async ( + { additionalAddresses, twitterLink, discordLink }, + { mainAddress }, + validate, + ) => { + await validate('additionalAddresses', () => { + if (additionalAddresses.length > MAX_ADDITIONAL_ADDRESSES) { + throw new ValidationError( + 'additionalAddresses.4.address', + 'Maximum 5 additional addresses allowed', + ); + } + }); + + for (const [ + index, + { address, signature, verified }, + ] of additionalAddresses.entries()) { + const addressPath = `additionalAddresses.${index}.address` as any; + const signaturePath = `additionalAddresses.${index}.signature` as any; + + await validate(addressPath, () => { + if (!address || !isAddress(address)) { + throw new ValidationError(addressPath, ''); + } + + if (isAddressEqual(address, mainAddress)) { + throw new ValidationError( + addressPath, + 'Additional address cannot be the same as main address', + ); + } + + const hasDuplicateAddresses = additionalAddresses.some( + (a, i) => + i !== index && + isAddress(a.address) && + isAddressEqual(address, a.address), + ); + + if (hasDuplicateAddresses) { + throw new ValidationError( + addressPath, + 'Duplicate addresses are not allowed', + ); + } + }); + + await validate(signaturePath, async () => { + if (!signature || !isHex(signature)) { + throw new ValidationError(signaturePath, ''); + } + + if (verified) return; + + try { + if (!isAddress(address)) { + throw new ValidationError(addressPath, ''); + } + + const isValid = await verifyMessage({ address, signature }); + + if (!isValid) { + throw new ValidationError( + signaturePath, + 'Invalid signature for this address and message', + ); + } + } catch { + throw new ValidationError( + signaturePath, + 'Invalid signature for this address and message', + ); + } + }); + } + + await validate('twitterLink', () => { + if (twitterLink && !twitterUrlRegex.test(twitterLink)) { + throw new ValidationError( + 'twitterLink', + 'Must be a valid Twitter/X status URL', + ); + } + }); + + await validate('discordLink', () => { + if (discordLink && !discordMessageRegex.test(discordLink)) { + throw new ValidationError( + 'discordLink', + 'Must be a valid Discord message URL', + ); + } + }); + }, + [verifyMessage], + ); +}; diff --git a/features/ics/apply-form/context/use-modal-stages.tsx b/features/ics/apply-form/context/use-modal-stages.tsx new file mode 100644 index 00000000..c591210c --- /dev/null +++ b/features/ics/apply-form/context/use-modal-stages.tsx @@ -0,0 +1,60 @@ +import { + TransactionModalTransitStage, + TxStageFail, + TxStagePending, + TxStageSuccess, + useTransactionModalStage, +} from 'shared/transaction-modal'; +import { extractErrorMessage, getErrorCode } from 'utils'; + +const getModalStages = (transitStage: TransactionModalTransitStage) => ({ + pending: () => + transitStage( + , + ), + + success: () => + transitStage( + , + ), + + failed: (error: unknown, onRetry?: () => void) => { + let errorContent; + + if (typeof error === 'object' && error !== null && 'details' in error) { + const errorObj = error as { message: string; details: string[] }; + errorContent = ( + <> + {errorObj.message} +
      + {errorObj.details.length > 0 && ( +
        + {errorObj.details.map((detail, index) => ( +
      • {detail}
      • + ))} +
      + )} + + ); + } else { + errorContent = extractErrorMessage(error); + } + + return transitStage( + , + ); + }, +}); + +export const useModalStages = () => useTransactionModalStage(getModalStages); diff --git a/features/ics/apply-form/context/use-verify-message.ts b/features/ics/apply-form/context/use-verify-message.ts new file mode 100644 index 00000000..cffded27 --- /dev/null +++ b/features/ics/apply-form/context/use-verify-message.ts @@ -0,0 +1,61 @@ +import { useMainnetOnlyWagmi } from 'modules/web3/web3-provider/web3-provider'; +import { useCallback } from 'react'; +import { Address, Hex, isAddress, PublicClient } from 'viem'; +import { generateAddressMessage, generateSocialMessage } from './utils'; +import { usePublicClient } from 'wagmi'; +import { useApplyFormData } from './apply-data-provider'; + +type VerifyMessageProps = { + address: Address; + signature: Hex; +}; + +export const useAddressMessage = (address?: string) => { + const { mainAddress } = useApplyFormData(true); + + return address && isAddress(address) + ? generateAddressMessage(address, mainAddress) + : ''; +}; + +export const useSocialMessages = () => { + const { mainAddress } = useApplyFormData(true); + const twitterMessage = generateSocialMessage(mainAddress, 'twitter'); + const discordMessage = generateSocialMessage(mainAddress, 'discord'); + + return { + twitterMessage, + discordMessage, + }; +}; + +export const useRawVefiryMessage = (mainAddress: Address) => { + const { publicClientMainnet } = useMainnetOnlyWagmi(); + const publicClient = usePublicClient(); + + return useCallback( + async ({ address, signature }: VerifyMessageProps) => { + const message = generateAddressMessage(address, mainAddress); + const clients = [publicClient] as PublicClient[]; + if (publicClientMainnet.chain?.id !== publicClient?.chain.id) { + clients.push(publicClientMainnet); + } + + const isValid = ( + await Promise.all( + clients.map((client) => + client?.verifyMessage({ address, message, signature }), + ), + ) + ).some(Boolean); + + return isValid; + }, + [mainAddress, publicClient, publicClientMainnet], + ); +}; + +export const useVerifyMessage = () => { + const { mainAddress } = useApplyFormData(true); + return useRawVefiryMessage(mainAddress); +}; diff --git a/features/ics/apply-form/context/utils.ts b/features/ics/apply-form/context/utils.ts new file mode 100644 index 00000000..74ead0a9 --- /dev/null +++ b/features/ics/apply-form/context/utils.ts @@ -0,0 +1,14 @@ +import { Address } from 'viem'; + +export const generateSocialMessage = ( + address: Address, + platform: 'twitter' | 'discord', +) => { + return `This post is proof that I am the owner of this ${platform === 'twitter' ? 'X' : 'Discord'} account. My address to get verified for ICS: ${address.toLowerCase()}`; +}; + +export const generateAddressMessage = ( + address: Address, + mainAddress: Address, +) => + `Verify ownership of address ${address.toLowerCase()} for ICS with main address ${mainAddress.toLowerCase()}`; diff --git a/features/ics/apply-form/controls/additional-addresses.tsx b/features/ics/apply-form/controls/additional-addresses.tsx new file mode 100644 index 00000000..f604d329 --- /dev/null +++ b/features/ics/apply-form/controls/additional-addresses.tsx @@ -0,0 +1,68 @@ +import { ButtonIcon, Plus, Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { FC, useCallback } from 'react'; +import { useFieldArray, useFormContext } from 'react-hook-form'; +import { Chip, FormTitle, MatomoLink, Stack } from 'shared/components'; +import { MAX_ADDITIONAL_ADDRESSES, type ApplyFormInputType } from '../context'; +import { AddressItem } from './address-item'; + +export const AdditionalAddresses: FC = () => { + const { control } = useFormContext(); + const { fields, append, remove } = useFieldArray({ + control, + name: 'additionalAddresses', + }); + + const handleAddAddress = useCallback(() => { + if (fields.length < MAX_ADDITIONAL_ADDRESSES) { + append({ address: '', signature: '' }); + } + }, [append, fields.length]); + + const handleRemoveAddress = useCallback( + (index: number) => { + remove(index); + }, + [remove], + ); + + return ( + + + Optional}>Additional Addresses + + You can add up to {MAX_ADDITIONAL_ADDRESSES} addresses where your + achievements are stored. To prove you own each address, sign a message + on Etherscan. For more info see{' '} + + the guide + + + + + {fields.map((field, index) => ( + + ))} + + {fields.length < MAX_ADDITIONAL_ADDRESSES && ( + } + variant="translucent" + size="sm" + onClick={handleAddAddress} + fullwidth + > + Add new address + + )} + + ); +}; diff --git a/features/ics/apply-form/controls/address-item.tsx b/features/ics/apply-form/controls/address-item.tsx new file mode 100644 index 00000000..8bdc63cb --- /dev/null +++ b/features/ics/apply-form/controls/address-item.tsx @@ -0,0 +1,202 @@ +import { + Button, + ButtonIcon, + External, + Input, + Text, +} from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { CategoryItemsWrapper } from 'features/ics/score-system/styles'; +import { FC, useCallback, useState } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { CopyButton, MatomoLink, Stack } from 'shared/components'; +import { VerifiedChip } from 'shared/components/input-address/verified-chip'; +import { + AddressInputHookForm, + TextInputHookForm, +} from 'shared/hook-form/controls'; +import { isAddress, isHex } from 'viem'; +import { + useAddressMessage, + useVerifyMessage, + type ApplyFormInputType, +} from '../context'; + +export type AddressItemProps = { + field: { id: string; address: string; signature: string; verified?: boolean }; + index: number; + onRemove: (index: number) => void; +}; + +export const AddressItem: FC = ({ + field, + index, + onRemove, +}) => { + const watchedAddress = useWatch({ + name: `additionalAddresses.${index}.address` as const, + }) as string; + + const verified = useWatch({ + name: `additionalAddresses.${index}.verified` as const, + }); + + const { getValues, setError, clearErrors, setValue } = + useFormContext(); + + const message = useAddressMessage(watchedAddress); + + const [isVerifying, setIsVerifying] = useState(false); + + const verifyMessage = useVerifyMessage(); + + const onVerify = useCallback( + async (index: number) => { + if (isVerifying || verified) return; + + const currentAddresses = getValues('additionalAddresses'); + const { address, signature } = currentAddresses[index]; + + if (!isHex(signature)) { + setError(`additionalAddresses.${index}.signature`, { + type: 'manual', + message: 'Invalid signature format', + }); + return; + } + + if (!isAddress(address)) { + setError(`additionalAddresses.${index}.address`, { + type: 'manual', + message: 'Invalid Ethereum address', + }); + return; + } + + setIsVerifying(true); + + try { + const isValid = await verifyMessage({ address, signature }); + + if (isValid) { + clearErrors(`additionalAddresses.${index}.signature`); + setValue(`additionalAddresses.${index}.verified`, true); + } else { + setError(`additionalAddresses.${index}.signature`, { + type: 'manual', + message: 'Invalid signature for this address and message', + }); + } + } catch (error) { + setError(`additionalAddresses.${index}.signature`, { + type: 'manual', + message: 'Invalid signature format or verification failed', + }); + } finally { + setIsVerifying(false); + } + }, + [ + clearErrors, + getValues, + setError, + verifyMessage, + isVerifying, + verified, + setValue, + ], + ); + + return ( + + + + Additional address #{index + 1} + + + + {verified ? ( + + + Additional address #{index + 1}{' '} + Verified + + } + /> + + ) : ( + + + Step 1. Insert your Ethereum address + + + + + Step 2. Copy the message and sign it on Etherscan (or other tool) + + + + + } + size="xs" + variant="translucent" + > + Sign + + + + } + /> + + + + Step 3. Paste the signature in the field below + + void onVerify(index)} + disabled={isVerifying} + > + {isVerifying ? 'Verifying...' : 'Verify'} + + } + /> + + + )} + + ); +}; diff --git a/features/ics/apply-form/controls/index.ts b/features/ics/apply-form/controls/index.ts new file mode 100644 index 00000000..bd06176e --- /dev/null +++ b/features/ics/apply-form/controls/index.ts @@ -0,0 +1,4 @@ +export * from './additional-addresses'; +export * from './main-address'; +export * from './social-proof'; +export * from './submit-button'; diff --git a/features/ics/apply-form/controls/main-address.tsx b/features/ics/apply-form/controls/main-address.tsx new file mode 100644 index 00000000..56708066 --- /dev/null +++ b/features/ics/apply-form/controls/main-address.tsx @@ -0,0 +1,30 @@ +import { Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { FormTitle, InputAddress, Stack } from 'shared/components'; +import { VerifiedChip } from 'shared/components/input-address/verified-chip'; +import { useApplyFormData } from '../context'; + +export const MainAddress: FC = () => { + const { mainAddress } = useApplyFormData(true); + + return ( + + + Main address + + You are requesting ICS operator type to the following address: + + + + Main address Verified + + } + value={mainAddress} + /> + + ); +}; diff --git a/features/ics/apply-form/controls/social-proof.tsx b/features/ics/apply-form/controls/social-proof.tsx new file mode 100644 index 00000000..07a53486 --- /dev/null +++ b/features/ics/apply-form/controls/social-proof.tsx @@ -0,0 +1,118 @@ +import { Input, Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { CategoryItemsWrapper } from 'features/ics/score-system/styles'; +import { FC } from 'react'; +import { + Chip, + CopyButton, + FormTitle, + IconTooltip, + MatomoLink, + Stack, +} from 'shared/components'; +import { TextInputHookForm } from 'shared/hook-form/controls'; +import { useSocialMessages } from '../context'; + +export const SocialProof: FC = () => { + const { twitterMessage, discordMessage } = useSocialMessages(); + + return ( + + + Optional}>Socials + + You can add your social accounts. To prove you own an account, post a + message. For more info see{' '} + + the guide + + + + + {/* Twitter Section */} + + + X (formerly Twitter) + + + + + + Step 1. Prove the ownership of the X account by posting a tweet + with the following text + + + e.target.select()} + onClick={(e) => (e.target as HTMLInputElement).select()} + value={twitterMessage} + fullwidth + rightDecorator={} + /> + + + + Step 2. Paste the link to this post + + + + + + + {/* Discord Section */} + + + Discord + + + + + + Step 1. Prove the ownership of the Discord account by posting the + following message to{' '} + + the CSM channel + {' '} + + + + e.target.select()} + onClick={(e) => (e.target as HTMLInputElement).select()} + value={discordMessage} + fullwidth + rightDecorator={} + /> + + + + Step 2. Paste the link to this message + + + + + + + ); +}; diff --git a/features/ics/apply-form/controls/submit-button.tsx b/features/ics/apply-form/controls/submit-button.tsx new file mode 100644 index 00000000..2922a390 --- /dev/null +++ b/features/ics/apply-form/controls/submit-button.tsx @@ -0,0 +1,6 @@ +import { FC } from 'react'; +import { SubmitButtonHookForm } from 'shared/hook-form/controls'; + +export const SubmitButton: FC = () => ( + Submit application +); diff --git a/features/ics/apply-form/index.ts b/features/ics/apply-form/index.ts new file mode 100644 index 00000000..fd8b2866 --- /dev/null +++ b/features/ics/apply-form/index.ts @@ -0,0 +1,2 @@ +export { ApplyForm } from './apply-form'; +export { ApplyFormProvider } from './context'; diff --git a/features/ics/form-status/components/application-tip.tsx b/features/ics/form-status/components/application-tip.tsx new file mode 100644 index 00000000..fa51395e --- /dev/null +++ b/features/ics/form-status/components/application-tip.tsx @@ -0,0 +1,27 @@ +import { Text } from '@lidofinance/lido-ui'; +import { IcsResponseDto } from 'features/ics/shared'; +import { FC } from 'react'; +import { BlockStyled } from '../styles'; +import { Stack } from 'shared/components'; + +type Props = Pick; + +export const ApplicationTip: FC = ({ comments }) => { + const show = !!comments.additionalAddresses?.filter((c) => !!c).length; + + if (!show) return null; + return ( + + + + What you can do + + + If you believe that these address(es) were incorrectly flagged, you + may submit an appeal on the Lido Research Forum for review by the CSM + Committee. + + + + ); +}; diff --git a/features/ics/form-status/components/application.tsx b/features/ics/form-status/components/application.tsx new file mode 100644 index 00000000..16e606b4 --- /dev/null +++ b/features/ics/form-status/components/application.tsx @@ -0,0 +1,107 @@ +import { Input, Text } from '@lidofinance/lido-ui'; +import { parseISO } from 'date-fns'; +import { IcsResponseDto } from 'features/ics/shared'; +import { FC } from 'react'; +import { InputAddress, Stack } from 'shared/components'; +import { formatDate } from 'utils'; +import { AccordionStyle } from '../styles'; + +type CommentsSectionProps = Pick< + IcsResponseDto, + 'comments' | 'form' | 'createdAt' +>; + +export const Application: FC = ({ + comments, + form, + createdAt, +}) => ( + + + Your application + + + Submitted {formatDate(parseISO(createdAt), 'dd.MM.yyyy')} + + + } + > + + + + Main Address + + + + + {comments.mainAddress} + + + + {form.additionalAddresses?.length ? ( + + + Additional addresses + + {form.additionalAddresses?.map((address, index) => ( + + + + {comments.additionalAddresses?.[index]} + + + ))} + + ) : null} + {form.twitterLink || form.discordLink ? ( + + + Socials + + {form.twitterLink && ( + + + + {comments.twitterLink} + + + )} + {form.discordLink && ( + + + + {comments.discordLink} + + + )} + + ) : null} + + +); diff --git a/features/ics/form-status/components/index.ts b/features/ics/form-status/components/index.ts new file mode 100644 index 00000000..b0300ad1 --- /dev/null +++ b/features/ics/form-status/components/index.ts @@ -0,0 +1,6 @@ +export * from './application-tip'; +export * from './application'; +export * from './score-category'; +export * from './score-item'; +export * from './score-points'; +export * from './status-header'; diff --git a/features/ics/form-status/components/score-category.tsx b/features/ics/form-status/components/score-category.tsx new file mode 100644 index 00000000..37f5c18d --- /dev/null +++ b/features/ics/form-status/components/score-category.tsx @@ -0,0 +1,61 @@ +import { Text } from '@lidofinance/lido-ui'; +import { Points } from 'features/ics/score-system/points'; +import { + CategoryItemsWrapper, + ScoreAccordionstyle, +} from 'features/ics/score-system/styles'; +import { TipWrapper } from 'features/monitoring/attestation-rate-section/styles'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { IcsFormStatus, IcsScoresDto, ScoreSource } from 'features/ics/shared'; +import { FailIcon, SuccessIcon } from '../styles'; +import { calculateScores } from '../utils'; +import { ScoreItem } from './score-item'; + +type ScoreCategoryProps = { + category: ScoreSource; + scores: IcsScoresDto; + status: IcsFormStatus; +}; + +export const ScoreCategory: FC = ({ + category, + scores, + status, +}) => { + const value = calculateScores(scores, category.id); + const isEnougth = value >= category.min; + const showIcons = status !== 'APPROVED'; + + const categoryHeader = ( + + + {showIcons && (isEnougth ? : )}{' '} + {category.title} + + + + + + + + ); + + return ( + + + {!isEnougth && ( + + You did not reach the minimum score of{' '} + required for this category. + + )} + + {category.items.map((item) => ( + + ))} + + + + ); +}; diff --git a/features/ics/form-status/components/score-chip/index.ts b/features/ics/form-status/components/score-chip/index.ts new file mode 100644 index 00000000..11e29b45 --- /dev/null +++ b/features/ics/form-status/components/score-chip/index.ts @@ -0,0 +1 @@ +export * from './score-chip'; diff --git a/features/ics/form-status/components/score-chip/score-chip.tsx b/features/ics/form-status/components/score-chip/score-chip.tsx new file mode 100644 index 00000000..05877fa7 --- /dev/null +++ b/features/ics/form-status/components/score-chip/score-chip.tsx @@ -0,0 +1,25 @@ +import { FC, PropsWithChildren, ReactNode } from 'react'; +import { ChipStyle, Variants } from './style'; +import { Check, Close } from '@lidofinance/lido-ui'; +import { ReactComponent as Clock } from 'assets/icons/clock.svg'; + +type Props = { + type?: Variants; +}; + +const ICONS: Record = { + default: , + success: , + error: , + pending: , +}; + +export const ScoreChip: FC> = ({ + children, + type = 'default', +}) => ( + + {ICONS[type]} + {children} + +); diff --git a/features/ics/form-status/components/score-chip/style.ts b/features/ics/form-status/components/score-chip/style.ts new file mode 100644 index 00000000..44204386 --- /dev/null +++ b/features/ics/form-status/components/score-chip/style.ts @@ -0,0 +1,37 @@ +import styled, { css } from 'styled-components'; + +export type Variants = keyof typeof variants; + +const variants = { + default: css` + color: var(--lido-color-text); + `, + success: css` + color: var(--lido-color-success); + `, + error: css` + color: var(--lido-color-error); + `, + pending: css` + color: var(--lido-color-textSecondary); + `, +}; + +export const ChipStyle = styled.div<{ $variant?: Variants }>` + display: flex; + flex-direction: row; + gap: ${({ theme }) => theme.spaceMap.xs}px; + + width: fit-content; + padding: 2px 12px; + align-items: center; + white-space: nowrap; + + border-radius: ${({ theme }) => theme.borderRadiusesMap.xl}px; + background: color-mix(in srgb, currentColor 15%, transparent); + + font-size: ${({ theme }) => theme.fontSizesMap.xs}px; + line-height: ${({ theme }) => theme.fontSizesMap.xl}px; + font-weight: 700; + ${(props) => variants[props.$variant || 'default']} +`; diff --git a/features/ics/form-status/components/score-item.tsx b/features/ics/form-status/components/score-item.tsx new file mode 100644 index 00000000..d9741aff --- /dev/null +++ b/features/ics/form-status/components/score-item.tsx @@ -0,0 +1,25 @@ +import { Text } from '@lidofinance/lido-ui'; +import { Points } from 'features/ics/score-system/points'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { ScoreItem as ScoreItemType } from 'features/ics/shared'; + +type ScoreItemProps = { + item: ScoreItemType; + value: number; +}; + +export const ScoreItem: FC = ({ item, value }) => { + return ( + + + {item.icon} + {item.name} + + + + + + + ); +}; diff --git a/features/ics/form-status/components/score-points.tsx b/features/ics/form-status/components/score-points.tsx new file mode 100644 index 00000000..8e9bd488 --- /dev/null +++ b/features/ics/form-status/components/score-points.tsx @@ -0,0 +1,51 @@ +import { Text } from '@lidofinance/lido-ui'; +import { Points } from 'features/ics/score-system/points'; +import { + IcsResponseDto, + SCORE_SOURCES, + TOTAL_SCORE_REQUIRED, +} from 'features/ics/shared'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { calculateScores, isMinScoresReached } from '../utils'; +import { ScoreCategory } from './score-category'; +import { FailIcon, SemiFailIcon, SuccessIcon } from '../styles'; + +type ScoreCategoryProps = Pick; + +export const ScorePoints: FC = ({ scores, status }) => { + const isMinReached = isMinScoresReached(scores); + const total = calculateScores(scores); + const isEnougth = total >= TOTAL_SCORE_REQUIRED; + const showIcons = status !== 'APPROVED'; + return ( + + + + {showIcons && + (isEnougth ? ( + isMinReached ? ( + + ) : ( + + ) + ) : ( + + ))}{' '} + Total Score Breakdown + + + + + + {SCORE_SOURCES.map((category) => ( + + ))} + + ); +}; diff --git a/features/ics/form-status/components/status-header.tsx b/features/ics/form-status/components/status-header.tsx new file mode 100644 index 00000000..917b43ad --- /dev/null +++ b/features/ics/form-status/components/status-header.tsx @@ -0,0 +1,219 @@ +import { Button, Text } from '@lidofinance/lido-ui'; +import { PATH } from 'consts'; +import { + ICS_ASSESSED_DATE, + IcsCommentsDto, + IcsFormStatus, + IcsScoresDto, + TOTAL_SCORE_REQUIRED, + TypeStatus, +} from 'features/ics/shared'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { LocalLink } from 'shared/navigate'; + +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { + NodeOperatorOwner, + useDappStatus, + useNodeOperatorId, + useOperatorOwner, +} from 'modules/web3'; +import { isAddressEqual } from 'viem'; +import { calculateScores, isMinScoresReached } from '../utils'; +import { ScoreChip } from './score-chip'; + +type StatusHeaderProps = { + typeStatus: TypeStatus; + status?: IcsFormStatus; + comments?: IcsCommentsDto; + scores?: IcsScoresDto; +}; + +const getStatus = ( + status: IcsFormStatus | undefined, + typeStatus: TypeStatus, +) => { + switch (status) { + case 'APPROVED': + return ( + + Approved + + ); + case 'REJECTED': + return Rejected; + case 'REVIEW': + return Pending; + default: + return null; + } +}; + +const getProofStatus = (typeStatus: TypeStatus) => { + switch (typeStatus) { + case 'CLAIMED': + return Claimed; + case 'ISSUED': + return Issued; + case 'OWNER_ISSUED': + return Approved; + default: + return Pending; + } +}; + +const useHint = ( + status: IcsFormStatus | undefined, + typeStatus: TypeStatus, + comments: IcsCommentsDto | undefined, + scores: IcsScoresDto | undefined, + owner: NodeOperatorOwner | undefined, + nodeOperatorId: NodeOperatorId | undefined, +) => { + switch (true) { + case typeStatus === 'CLAIMED': + return You successfully claimed your Operator type; + case typeStatus === 'ISSUED' && !!owner: + return ( + <> + You're already eligible to claim ICS type + + To claim your current address should be set as your Node Operator + owner. + + + ); + case typeStatus === 'ISSUED' && nodeOperatorId === undefined: + return ( + <> + + Create a new Node Operator with ICS operator type + + +
      + + + +
      + + ); + case typeStatus === 'ISSUED': + return ( + <> + + Claim your new operator type on the “Claim operator type” tab + + +
      + + + +
      + + ); + case typeStatus === 'OWNER_ISSUED': + return ( + <> + + Node Operator's owner address is already eligible to claim ICS + type + + + Connect with your Node Operator's owner address to claim ICS + type + + + ); + case status === 'REJECTED': + if (comments?.reason) { + return {comments?.reason}; + } + if (scores) { + const isMinReached = isMinScoresReached(scores); + const totalScore = calculateScores(scores); + + // Check if total score is sufficient but minimum category requirements are not met + if (totalScore >= TOTAL_SCORE_REQUIRED && !isMinReached) { + return ( + + Your application did not reach the minimum score required for some + categories + + ); + } + + return ( + + Your application earned {totalScore} out of the{' '} + {TOTAL_SCORE_REQUIRED} points required to qualify + + ); + } + return null; + case status === 'REVIEW': + return ( + + The application will be evaluated in {ICS_ASSESSED_DATE}. You cannot + change the application while it is being reviewed + + ); + case status === 'APPROVED': + return ( + + Please await issuance; this process typically takes up to three weeks + + ); + default: + return null; + } +}; + +export const StatusHeader: FC = ({ + status, + typeStatus, + comments, + scores, +}) => { + const { address } = useDappStatus(); + const nodeOperatorId = useNodeOperatorId(); + const { data: owner } = useOperatorOwner(nodeOperatorId); + + const otherOwner = + owner && address && !isAddressEqual(owner.address, address) + ? owner + : undefined; + + const statusChip = getStatus(status, typeStatus); + const proofChip = getProofStatus(typeStatus); + const hint = useHint( + status, + typeStatus, + comments, + scores, + otherOwner, + nodeOperatorId, + ); + + return ( + + {status && ( + + + Application + + {statusChip} + + )} + {(!status || status === 'APPROVED') && ( + + + Operator type + + {proofChip} + + )} + {hint} + + ); +}; diff --git a/features/ics/form-status/form-status.tsx b/features/ics/form-status/form-status.tsx new file mode 100644 index 00000000..5c22437c --- /dev/null +++ b/features/ics/form-status/form-status.tsx @@ -0,0 +1,54 @@ +import { Block, Button, Divider } from '@lidofinance/lido-ui'; +import { FC, useCallback } from 'react'; +import { Stack } from 'shared/components'; +import { TypeStatus } from '../shared'; +import { IcsResponseDto } from '../shared/types'; +import { + Application, + ApplicationTip, + ScorePoints, + StatusHeader, +} from './components'; + +type FormStatusProps = { + data: IcsResponseDto; + typeStatus: TypeStatus; + reset: () => void; +}; + +export const FormStatus: FC = ({ + data, + typeStatus, + reset, +}) => { + const { status, form, comments, createdAt, scores } = data; + + const handle = useCallback(() => { + window.scrollTo({ top: 0 }); + reset(); + }, [reset]); + + const haveScores = Object.values(scores).some((score) => score !== null); + + return ( + + + + {(status !== 'REVIEW' || haveScores) && } + {haveScores && } + {status === 'REJECTED' && } + + {status === 'REJECTED' && ( + + )} + + + ); +}; diff --git a/features/ics/form-status/index.ts b/features/ics/form-status/index.ts new file mode 100644 index 00000000..3152b835 --- /dev/null +++ b/features/ics/form-status/index.ts @@ -0,0 +1 @@ +export { FormStatus } from './form-status'; diff --git a/features/ics/form-status/proof-status.tsx b/features/ics/form-status/proof-status.tsx new file mode 100644 index 00000000..722f5894 --- /dev/null +++ b/features/ics/form-status/proof-status.tsx @@ -0,0 +1,16 @@ +import { Block } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { TypeStatus } from '../shared'; +import { StatusHeader } from './components'; + +type FormStatusProps = { + typeStatus: TypeStatus; +}; + +export const ProofStatus: FC = ({ typeStatus }) => { + return ( + + + + ); +}; diff --git a/features/ics/form-status/styles.ts b/features/ics/form-status/styles.ts new file mode 100644 index 00000000..c02c5c4e --- /dev/null +++ b/features/ics/form-status/styles.ts @@ -0,0 +1,92 @@ +import styled, { css } from 'styled-components'; +import { Accordion, Block, Check, Close } from '@lidofinance/lido-ui'; + +export const FormStatusStyled = styled(Block)` + display: flex; + flex-direction: column; + gap: ${({ theme }) => theme.spaceMap.lg}px; + padding: ${({ theme }) => theme.spaceMap.lg}px; + border-radius: ${({ theme }) => theme.borderRadiusesMap.md}px; + border: 1px solid var(--lido-color-border); + background: var(--lido-color-background); +`; + +export const StatusHeaderStyled = styled.div` + padding: ${({ theme }) => theme.spaceMap.md}px 0; + border-bottom: 1px solid var(--lido-color-border); +`; + +export const ScoreRowStyled = styled.div` + padding: ${({ theme }) => theme.spaceMap.sm}px; + border-radius: ${({ theme }) => theme.borderRadiusesMap.sm}px; + border: 1px solid var(--lido-color-border); + background: var(--lido-color-foreground); + + & > div { + flex: 1; + } + + & > div:first-child > div:nth-child(2) { + flex: 1; + } +`; + +export const ScoreValueStyled = styled.div<{ $passed: boolean }>` + font-size: ${({ theme }) => theme.fontSizesMap.sm}px; + font-weight: 700; + + ${({ $passed }) => + $passed + ? css` + color: var(--lido-color-success); + ` + : css` + color: var(--lido-color-error); + `} +`; + +export const RequiredScoreStyled = styled.div<{ $passed: boolean }>` + font-size: ${({ theme }) => theme.fontSizesMap.xs}px; + color: ${({ $passed }) => + $passed ? 'var(--lido-color-success)' : 'var(--lido-color-error)'}; +`; + +export const AccordionStyle = styled(Accordion)` + margin: 0; + + background: var(--lido-color-backgroundSecondary); + /* padding: 20px; */ + + & > div:first-child { + padding: 20px; + } + + & > div + div > div { + padding: 0 20px 20px 20px; + } + + p, + ul, + ol { + margin: 0; + } +`; + +export const BlockStyled = styled(Block)` + background: var(--lido-color-backgroundSecondary); +`; + +export const FailIcon = styled(Close)` + color: var(--lido-color-error); + vertical-align: middle; +`; + +export const SemiFailIcon = styled(Close)` + color: var(--lido-color-warning); + vertical-align: middle; +`; + +export const SuccessIcon = styled(Check)` + color: var(--lido-color-success); + vertical-align: middle; +`; diff --git a/features/ics/form-status/utils.ts b/features/ics/form-status/utils.ts new file mode 100644 index 00000000..dce0c602 --- /dev/null +++ b/features/ics/form-status/utils.ts @@ -0,0 +1,35 @@ +import { fromPairs } from 'lodash'; +import { SCORE_SOURCES } from '../shared/score-data'; +import { IcsScoresDto } from '../shared/types'; + +const summ = (acc: number, item?: number) => acc + (item ?? 0); + +const getScoreCategurySum = (scores: IcsScoresDto) => { + return fromPairs( + SCORE_SOURCES.map(({ id, max, items }) => { + const points = items.map(({ id }) => scores[id]).reduce(summ, 0); + const value = Math.min(points, max ?? points); + return [id, value] as const; + }), + ); +}; + +export const calculateScores = ( + scores: IcsScoresDto, + category?: string, +): number => { + const values = getScoreCategurySum(scores); + + if (!category) { + return Object.values(values).reduce(summ, 0); + } + + return values[category] ?? 0; +}; + +export const isMinScoresReached = (scores: IcsScoresDto) => { + const values = getScoreCategurySum(scores); + return SCORE_SOURCES.map(({ id, min }) => (values[id] ?? 0) >= min).every( + Boolean, + ); +}; diff --git a/features/ics/ics-apply-page.tsx b/features/ics/ics-apply-page.tsx new file mode 100644 index 00000000..3918958c --- /dev/null +++ b/features/ics/ics-apply-page.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; + +import { FAQ_OPERATOR_TYPE } from 'faq'; +import { Faq } from 'shared/components'; +import { Layout } from 'shared/layout'; +import { TypePageSwitcher } from 'shared/navigate'; +import { IcsApply } from './ics-apply'; + +export const IcsApplyPage: FC = () => ( + + + + + +); diff --git a/features/ics/ics-apply.tsx b/features/ics/ics-apply.tsx new file mode 100644 index 00000000..3c726f80 --- /dev/null +++ b/features/ics/ics-apply.tsx @@ -0,0 +1,90 @@ +import { Block, Text } from '@lidofinance/lido-ui'; +import { useDappStatus } from 'modules/web3'; +import { FC } from 'react'; +import { NoSSRWrapper, Stack, WhenLoaded } from 'shared/components'; +import { SiweAuthProvider, useSiweAuth } from 'shared/siwe'; +import { Connect, Fallback } from 'shared/wallet'; +import { ApplyForm } from './apply-form'; +import { FormStatus } from './form-status'; +import { ProofStatus } from './form-status/proof-status'; +import { IcsStateProvider, useIcsState } from './shared'; +import { SiweSignIn } from './siwe-sign-in'; + +const IcsApplyContent: FC = () => { + const { isAccountActive } = useDappStatus(); + const { token } = useSiweAuth(); + const { typeStatus, data, isPending, isTypePending, applyMode, reset } = + useIcsState(); + + if (!isAccountActive) { + return ( + + + + + Connect your wallet + + + Connect your wallet and sign a verification message to continue. + + + + + + ); + } + + if (isTypePending) { + return ( + + + + ); + } + + if (typeStatus === 'CLAIMED') { + return ; + } + + if (!token) { + return ; + } + + if (isPending) { + return ( + + + + ); + } + + if (data && !applyMode) { + return ; + } + + if (!data && typeStatus !== 'PENDING') { + return ; + } + + return ; +}; + +export const IcsApply: FC = () => { + const { isSupportedChain, isWalletConnected } = useDappStatus(); + + const isWrongChain = isWalletConnected && !isSupportedChain; + + return ( + + {isWrongChain && } + + + + + + + ); +}; diff --git a/features/ics/ics-scores-page.tsx b/features/ics/ics-scores-page.tsx new file mode 100644 index 00000000..8cc676f7 --- /dev/null +++ b/features/ics/ics-scores-page.tsx @@ -0,0 +1,26 @@ +import { FC } from 'react'; + +import { Layout } from 'shared/layout'; +import { TypePageSwitcher } from 'shared/navigate'; +import { Faq } from 'shared/components'; +import { FAQ_OPERATOR_TYPE } from 'faq'; +import { BlockStyle } from './score-system/styles'; +import { ApplicationFlow, Introduction, ScoreSources } from './score-system'; +import { RoundBanner } from './round-banner'; + +export const IcsScoresPage: FC = () => ( + + + + + + + + + + +); diff --git a/features/ics/index.ts b/features/ics/index.ts new file mode 100644 index 00000000..4a3b40f2 --- /dev/null +++ b/features/ics/index.ts @@ -0,0 +1,3 @@ +export * from './ics-apply-page'; +export * from './ics-scores-page'; +export * from './form-status'; diff --git a/features/ics/round-banner/index.ts b/features/ics/round-banner/index.ts new file mode 100644 index 00000000..87d82762 --- /dev/null +++ b/features/ics/round-banner/index.ts @@ -0,0 +1 @@ +export * from './round-banner'; diff --git a/features/ics/round-banner/round-banner.tsx b/features/ics/round-banner/round-banner.tsx new file mode 100644 index 00000000..6efd185d --- /dev/null +++ b/features/ics/round-banner/round-banner.tsx @@ -0,0 +1,24 @@ +import { Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { StyledBlock } from './styles'; +import { Stack } from 'shared/components'; +import { + ICS_ROUND, + ICS_ROUND_START_DATE, + ICS_ASSESSED_DATE, +} from '../shared/consts'; + +export const RoundBanner: FC = () => ( + + + + ICS Application Round #{ICS_ROUND} is ongoing + + + All applications received after {ICS_ROUND_START_DATE} will be evaluated + in {ICS_ASSESSED_DATE}. Stay tuned for the announcement of the final + date for Application Round #{ICS_ROUND} + + + +); diff --git a/features/ics/round-banner/styles.tsx b/features/ics/round-banner/styles.tsx new file mode 100644 index 00000000..b3ca4bdb --- /dev/null +++ b/features/ics/round-banner/styles.tsx @@ -0,0 +1,22 @@ +import { Block, ThemeName } from '@lidofinance/lido-ui'; +import styled from 'styled-components'; + +export const StyledBlock = styled(Block)` + margin-bottom: -52px; + padding-bottom: 52px; + + border-bottom-left-radius: 0; + border-bottom-right-radius: 0; + + --first-color: ${({ theme }) => + theme.name === ThemeName.light ? `#bfdbfe` : `#55657b`}; + --second-color: ${({ theme }) => + theme.name === ThemeName.light ? `#ccfbf1` : `#59837a`}; + + background: linear-gradient( + 106deg, + var(--first-color) 2.02%, + var(--second-color) 99.17% + ), + linear-gradient(108deg, #e2e4fc -0.19%, #dcfcf5 91.74%); +`; diff --git a/features/ics/score-system/application-flow.tsx b/features/ics/score-system/application-flow.tsx new file mode 100644 index 00000000..6462f8d0 --- /dev/null +++ b/features/ics/score-system/application-flow.tsx @@ -0,0 +1,57 @@ +import { Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES, PATH } from 'consts'; +import { FC, PropsWithChildren } from 'react'; +import { MatomoLink, Stack } from 'shared/components'; +import { LocalLink } from 'shared/navigate'; +import { Number, StepContent, StepWrapper } from './styles'; + +export const Step: FC> = ({ + number, + title, + children, +}) => { + return ( + + {number} + +

      {title}

      +

      {children}

      +
      +
      + ); +}; + +export const ApplicationFlow: FC = () => { + return ( + + + Application Flow + + + People interested in being included in{' '} + + the Identified Community Staker list + {' '} + must submit the application on the " + Application form" + sub-tab + + + After submission, the application undergoes semi-automated checks to + validate the provided information and assign the appropriate scores + + + If approved, the CSM Committee will initiate an Easy Track motion to + assign the operator type to the applicant’s address + + + Once the operator type is issued, it can be claimed via the CSM UI (for + existing operators), or it will be assigned automatically upon operator + creation (for new operators) + + + ); +}; diff --git a/features/ics/score-system/index.ts b/features/ics/score-system/index.ts new file mode 100644 index 00000000..3c98addc --- /dev/null +++ b/features/ics/score-system/index.ts @@ -0,0 +1,3 @@ +export * from './application-flow'; +export * from './introduction'; +export * from './score-sources'; diff --git a/features/ics/score-system/introduction.tsx b/features/ics/score-system/introduction.tsx new file mode 100644 index 00000000..3e98938f --- /dev/null +++ b/features/ics/score-system/introduction.tsx @@ -0,0 +1,21 @@ +import { Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; + +export const Introduction: FC = () => { + return ( + + + Introduction + + + The scoring system creates a clear path for independent stakers to + qualify as "Identified Community" operators. Your score + determines eligibility for the Identified Community Stakers List. Points + are awarded by submitting verifiable proofs; - across categories such as + experience, on-chain engagement, and community contributions - that + demonstrate your qualifications. + + + ); +}; diff --git a/features/ics/score-system/points.tsx b/features/ics/score-system/points.tsx new file mode 100644 index 00000000..412980bf --- /dev/null +++ b/features/ics/score-system/points.tsx @@ -0,0 +1,10 @@ +import { FC } from 'react'; +import { Plural } from 'shared/components'; + +export const Points: FC<{ value: number | string }> = ({ value }) => { + return typeof value === 'number' ? ( + + ) : ( + <>{value} points + ); +}; diff --git a/features/ics/score-system/score-category.tsx b/features/ics/score-system/score-category.tsx new file mode 100644 index 00000000..22b25aa2 --- /dev/null +++ b/features/ics/score-system/score-category.tsx @@ -0,0 +1,45 @@ +import { Divider, Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { ScoreSource } from '../shared'; +import { Points } from './points'; +import { ScoreItem } from './score-item'; +import { ScoreAccordionstyle, CategoryItemsWrapper } from './styles'; + +type ScoreCategoryProps = { + category: ScoreSource; +}; + +export const ScoreCategory: FC = ({ category }) => { + const categoryHeader = ( + + + {category.title} + + + + Min: + + + + Max: + + + + ); + + return ( + + + + {category.description} + + + {category.items.map((item) => ( + + ))} + + + + ); +}; diff --git a/features/ics/score-system/score-item.tsx b/features/ics/score-system/score-item.tsx new file mode 100644 index 00000000..ab526f72 --- /dev/null +++ b/features/ics/score-system/score-item.tsx @@ -0,0 +1,34 @@ +import { Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { ScoreItem as ScoreItemType } from '../shared'; +import { Points } from './points'; +import { ScoreAccordionstyle } from './styles'; + +type ScoreItemProps = { + item: ScoreItemType; +}; + +export const ScoreItem: FC = ({ item }) => { + return ( + + + {item.icon} + {item.name} + + + + + + + } + > + + {item.description} + + + ); +}; diff --git a/features/ics/score-system/score-sources.tsx b/features/ics/score-system/score-sources.tsx new file mode 100644 index 00000000..c0cf7333 --- /dev/null +++ b/features/ics/score-system/score-sources.tsx @@ -0,0 +1,32 @@ +import { Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { ScoreCategory } from './score-category'; +import { SCORE_SOURCES, TOTAL_SCORE_REQUIRED } from '../shared'; +import { Points } from './points'; + +export const ScoreSources: FC = () => { + return ( + + + Score sources + + + To be included in the list, applicants must obtain a sufficient score in + each category below as well as an overall score across all the + categories. + + + + Total score required + + + + + + {SCORE_SOURCES.map((category) => ( + + ))} + + ); +}; diff --git a/features/ics/score-system/styles.ts b/features/ics/score-system/styles.ts new file mode 100644 index 00000000..102d9d42 --- /dev/null +++ b/features/ics/score-system/styles.ts @@ -0,0 +1,111 @@ +import { Block, Theme } from '@lidofinance/lido-ui'; +import { StackStyle } from 'shared/components'; +import { AccordionNavigatable } from 'shared/components/accordion-navigatable'; +import styled from 'styled-components'; + +export const BlockStyle = styled(Block)` + display: flex; + flex-direction: column; + gap: ${({ theme }) => theme.spaceMap.xxl}px; +`; + +export const Steps = styled.div` + display: grid; + grid-template-columns: repeat(auto-fit, minmax(min(100%, 240px), 1fr)); + gap: ${({ theme }) => theme.spaceMap.xl}px; +`; + +export const Number = styled.div` + display: flex; + flex-direction: row; + flex-wrap: wrap; + width: 32px; + height: 32px; + justify-content: center; + align-items: center; + + border-radius: 100%; + border: 1px solid var(--lido-color-border); + + color: var(--lido-color-text); + font-size: 14px; + font-weight: 700; + line-height: 24px; + + margin-top: -4px; +`; + +export const StepWrapper = styled.div` + display: flex; + flex-direction: row; + gap: ${({ theme }) => theme.spaceMap.md}px; + align-items: start; + position: relative; + + &:not(:last-child) ${Number}:after { + content: ''; + position: absolute; + top: 28px; + bottom: -12px; + width: 1px; + background: var(--lido-color-border); + } +`; + +export const StepContent = styled.div` + display: flex; + flex-direction: column; + align-items: flex-start; + gap: 2px; + flex: 1 0 40%; + text-align: left; + + h3 { + color: var(--lido-color-text); + font-size: 14px; + font-weight: 700; + line-height: 24px; + } + + p { + color: var(--lido-color-textSecondary); + font-size: 12px; + font-weight: 400; + line-height: 20px; + } +`; + +export const ScoreAccordionstyle = styled(AccordionNavigatable)` + margin: 0; + & > [type='button'] { + padding: 0; + min-height: 24px; + } + & > [type='button'] + div > div { + padding: 4px 0 0; + } + + p, + ul, + ol { + margin: 0; + } +`; + +export const CategoryItemsWrapper = styled(StackStyle).attrs({ + $direction: 'column', +})<{ $offset?: keyof Theme['spaceMap'] }>` + position: relative; + padding-left: ${({ theme, $offset = 'xl' }) => theme.spaceMap[$offset]}px; + + &:before { + content: ''; + display: block; + position: absolute; + width: 2px; + height: 100%; + left: 0px; + background: var(--lido-color-border); + border-radius: ${({ theme }) => theme.borderRadiusesMap.xl}px; + } +`; diff --git a/features/ics/shared/consts.tsx b/features/ics/shared/consts.tsx new file mode 100644 index 00000000..0505bf7f --- /dev/null +++ b/features/ics/shared/consts.tsx @@ -0,0 +1,3 @@ +export const ICS_ROUND = 3; +export const ICS_ROUND_START_DATE = `December\u00A022, 2025`; +export const ICS_ASSESSED_DATE = `Q1-Q2\u00A02026`; diff --git a/features/ics/shared/ics-state-provider.tsx b/features/ics/shared/ics-state-provider.tsx new file mode 100644 index 00000000..a954f914 --- /dev/null +++ b/features/ics/shared/ics-state-provider.tsx @@ -0,0 +1,95 @@ +import { + createContext, + FC, + PropsWithChildren, + useContext, + useMemo, + useState, +} from 'react'; +import invariant from 'tiny-invariant'; +import { IcsResponseDto } from './types'; +import { useFormStatus } from './use-form-status'; +import { + useDappStatus, + useIcsProof, + useNodeOperatorId, + useOperatorOwner, + useOperatorType, +} from 'modules/web3'; +import { OPERATOR_TYPE } from '@lidofinance/lido-csm-sdk'; + +export type TypeStatus = 'PENDING' | 'ISSUED' | 'OWNER_ISSUED' | 'CLAIMED'; + +type IcsStateContextType = { + typeStatus: TypeStatus; + data?: IcsResponseDto; + isPending: boolean; + isTypePending: boolean; + applyMode: boolean; + reset: (value?: boolean) => void; +}; + +const IcsStateContext = createContext( + {} as IcsStateContextType, +); + +export const useIcsState = () => { + const context = useContext(IcsStateContext); + invariant(context, 'Attempt to use `useIcsState` outside of provider'); + return context; +}; + +export const IcsStateProvider: FC = ({ children }) => { + const { address } = useDappStatus(); + const operatorId = useNodeOperatorId(); + const { data: operatorType } = useOperatorType(operatorId); + const { data: owner } = useOperatorOwner(operatorId); + + const { data: proofData, isPending: isTypePending } = useIcsProof(address); + const { data: ownerProofData, isPending: isOwnerTypePending } = useIcsProof( + owner?.address, + ); + const { data, isPending } = useFormStatus(); + + const [manualReset, setManualReset] = useState(false); + const applyMode = useMemo(() => manualReset || !data, [data, manualReset]); + + const typeStatus: TypeStatus = useMemo(() => { + if (operatorType === OPERATOR_TYPE.ICS || proofData?.isConsumed) + return 'CLAIMED'; + if (proofData?.proof) return 'ISSUED'; + if (ownerProofData?.proof) return 'OWNER_ISSUED'; + return 'PENDING'; + }, [ + operatorType, + ownerProofData?.proof, + proofData?.isConsumed, + proofData?.proof, + ]); + + const value: IcsStateContextType = useMemo( + () => ({ + typeStatus, + data, + isPending, + isTypePending: isTypePending || (!!owner?.address && isOwnerTypePending), + applyMode, + reset: (value = true) => setManualReset(value), + }), + [ + typeStatus, + data, + isPending, + isTypePending, + owner?.address, + isOwnerTypePending, + applyMode, + ], + ); + + return ( + + {children} + + ); +}; diff --git a/features/ics/shared/index.ts b/features/ics/shared/index.ts new file mode 100644 index 00000000..177852a9 --- /dev/null +++ b/features/ics/shared/index.ts @@ -0,0 +1,7 @@ +export * from './ics-state-provider'; +export * from './score-data'; +export * from './types'; +export * from './use-apply-form-mutation'; +export * from './use-form-status'; +export * from './use-ics-fetcher'; +export * from './consts'; diff --git a/features/ics/shared/score-data.tsx b/features/ics/shared/score-data.tsx new file mode 100644 index 00000000..e089065e --- /dev/null +++ b/features/ics/shared/score-data.tsx @@ -0,0 +1,329 @@ +import { ReactNode } from 'react'; +import styled from 'styled-components'; + +import EthStakerIcon from 'assets/icons/ics-scores/ethstaker.png'; +import StakeCatIcon from 'assets/icons/ics-scores/stakecat.png'; +import ObolIcon from 'assets/icons/ics-scores/obol.png'; +import SSVIcon from 'assets/icons/ics-scores/ssv.png'; +import CSMIcon from 'assets/icons/ics-scores/csm.png'; +import SDVTIcon from 'assets/icons/ics-scores/sdvt.png'; +import HumanPassportIcon from 'assets/icons/ics-scores/humal-passport.png'; +import CirclesIcon from 'assets/icons/ics-scores/circles.png'; +import DiscordIcon from 'assets/icons/ics-scores/discord.png'; +import XTwitterIcon from 'assets/icons/ics-scores/x.png'; +import AragonIcon from 'assets/icons/ics-scores/aragon.png'; +import SnapshotIcon from 'assets/icons/ics-scores/snapshot.png'; +import GalxeIcon from 'assets/icons/ics-scores/galxe.png'; +import HighSignalIcon from 'assets/icons/ics-scores/high-signal.png'; +import GitPOAPsIcon from 'assets/icons/ics-scores/git-poap.png'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { IcsScoresItem } from './types'; +import { MatomoLink } from 'shared/components'; + +export type ScoreSource = { + id: string; + title: string; + description: string; + min: number; + max: number; + items: ScoreItem[]; +}; + +export type ScoreItem = { + id: IcsScoresItem; + name: string; + icon: ReactNode; + points: number | string; + description: ReactNode; +}; + +const IconStyle = (styled.img<{ src: string }>).attrs(({ src }) => ({ + src, +}))` + display: flex; + flex-shrink: 0; + width: 32px; + height: 32px; + + border-radius: 100%; + outline: 1px solid var(--lido-color-border); + outline-offset: -1px; +`; + +export const TOTAL_SCORE_REQUIRED = 15; + +export const SCORE_SOURCES: ScoreSource[] = [ + { + id: 'proofOfExperience', + title: 'Proof-of-Experience', + description: + 'This group of proofs represents users experience in Ethereum validation', + min: 5, + max: 8, + items: [ + { + id: 'ethStaker', + name: 'EthStaker solo-stakers list', + icon: , + points: 6, + description: + 'Submitted address is present in the latest EthStaker Solo Stakers list as a deposit address, and not excluded following the a Sybil analysis of the list', + }, + { + id: 'stakeCat', + name: 'StakeCat solo-stakers list', + icon: , + points: 6, + description: + 'Submitted address is present in the latest StakeCat Solo Stakers list (Gnosischain-Solo-Stakers or Solo-Stakers-B), and not excluded following a Sybil analysis of the list', + }, + { + id: 'obolTechne', + name: 'Obol Techne', + icon: , + points: '4-6', + description: ( + <> + Submitted address has the Obol Techne credential assigned: +
      - 4 points for Base Credential +
      - 5 points for Bronze Credential +
      - 6 points for Silver Credential + + ), + }, + { + id: 'ssvVerified', + name: 'SSV Verified operators', + icon: , + points: 7, + description: + 'Submitted address is present in the SSV Verified Operators list and does not belong to a professional operator', + }, + { + id: 'csmTestnet', + name: 'CSM testnet participation', + icon: , + points: '4-5', + description: ( + <> + 4 points are assigned in case: +
      - Submitted address belongs to a Node Operator that has been + active on CSM Testnet for at least 60 days +
      - Performance for the Node Operator is above the Performance + threshold in several of the latest performance oracle reports. +
      5 points are assigned in case all the requirements from above + are met, and the application contains an address that has Circles + verification + + ), + }, + { + id: 'csmMainnet', + name: 'CSM mainnet participation', + icon: , + points: 6, + description: ( + <> + - Submitted address belongs to a Node Operator that has been active + on CSM Mainnet for at least 30 days +
      - Performance for the Node Operator is above the Performance + threshold in the latest performance oracle report + + ), + }, + { + id: 'sdvtTestnet', + name: 'SDVTM testnet participation', + icon: , + points: 5, + description: + 'Submitted address participated in and completed the entire duration of a Simple DVT testnet with Obol, SSV, or Safestake as a home or community staker', + }, + { + id: 'sdvtMainnet', + name: 'SDVTM mainnet participation', + icon: , + points: 7, + description: + 'Submitted address is actively participating as a home or community staker in the Lido Simple DVT Module on mainnet at the time of application submission', + }, + ], + }, + { + id: 'proofOfHumanity', + title: 'Proof-of-Humanity', + description: + 'This group of proofs allows users to earn a score by being verified by third-party platforms that apply their own rules for identifying real individuals', + min: 4, + max: 8, + items: [ + { + id: 'humanPassport', + name: 'Human passport', + icon: , + points: '3-8', + description: ( + <> + Submitted address has the corresponding score according to a{' '} + + Lido customized scoring system on Human Passport + + . For more details, follow{' '} + + the guide + + + ), + }, + { + id: 'circles', + name: 'Circles', + icon: , + points: 4, + description: ( + <> + Submitted address is verified via a dedicated{' '} + + Lido group on Circles + + . To be able to tie the Circles account to the ICS application, the + external account should be added. For more details, follow{' '} + + the guide + + + ), + }, + { + id: 'discord', + name: 'Discord', + icon: , + points: 2, + description: ( + <> + - Submitted account is registered no less than 1 year ago +
      - A unique message with the address applying to be included in + the list is published from this account to prove ownership + + ), + }, + { + id: 'twitter', + name: 'X', + icon: , + points: 1, + description: ( + <> + - Submitted account is registered no less than 1 year ago +
      - A unique message with the address applying to be included in + the list is published from this account to prove ownership + + ), + }, + ], + }, + { + id: 'proofOfEngagement', + title: 'Proof-of-Engagement', + description: + 'This group represents user engagement within the Ethereum and Lido ecosystems', + min: 2, + max: 7, + items: [ + { + id: 'aragonVotes', + name: 'Participation in Aragon Votes', + icon: , + points: 2, + description: ( + <> + Submitted addresses have voted at least twice, with more than 100 + LDO. Different addresses can be used for voting + + ), + }, + { + id: 'snapshotVotes', + name: 'Participation in Snapshot Votes', + icon: , + points: 1, + description: ( + <> + Submitted addresses have voted at least three times, with more than + 100 LDO. Different addresses can be used for voting + + ), + }, + { + id: 'lidoGalxe', + name: 'Lido Galxe score', + icon: , + points: '4-5', + description: ( + <> + Submitted address has a score on the{' '} + + Lido Galxe space + + : +
      - 4 points if 4 ≤ Lido Galxe score ≤ 10 +
      - 5 points if Lido Galxe score {'>'} 10 + + ), + }, + { + id: 'highSignal', + name: 'Lido High Signal score', + icon: , + points: '2-5', + description: ( + <> + Submitted address has a score on the{' '} + + Lido High Signal space + + : +
      - 2 points if 30 ≤ High Signal score ≤ 40 +
      - 3 points if 40 {'<'} High Signal score ≤ 60 +
      - 4 points if 60 {'<'} High Signal score ≤ 80 +
      - 5 points if High Signal score {'>'} 80 +
      + For more details, follow{' '} + + the guide + + + ), + }, + { + id: 'gitPoaps', + name: 'GitPOAPs', + icon: , + points: 2, + description: + 'Submitted address has at least one GitPOAP for contribution to the staking-related public good applications selected by CSM Committee', + }, + ], + }, +]; diff --git a/features/ics/shared/types.ts b/features/ics/shared/types.ts new file mode 100644 index 00000000..5a9eacb8 --- /dev/null +++ b/features/ics/shared/types.ts @@ -0,0 +1,59 @@ +export type IcsFormStatus = 'APPROVED' | 'REJECTED' | 'REVIEW'; + +export type IcsFormDataDto = { + mainAddress: string; + twitterLink?: string; + discordLink?: string; + additionalAddresses?: string[]; +}; + +export type IcsCommentsDto = { + reason?: string; + mainAddress?: string; + twitterLink?: string; + discordLink?: string; + additionalAddresses?: (string | null)[]; +}; + +export type IcsScoresDto = { + ethStaker?: number; + stakeCat?: number; + obolTechne?: number; + ssvVerified?: number; + csmTestnet?: number; + csmMainnet?: number; + sdvtTestnet?: number; + sdvtMainnet?: number; + humanPassport?: number; + circles?: number; + discord?: number; + twitter?: number; + aragonVotes?: number; + snapshotVotes?: number; + lidoGalxe?: number; + highSignal?: number; + gitPoaps?: number; +}; + +export type IcsScoresItem = keyof IcsScoresDto; + +export type IcsResponseDto = { + form: IcsFormDataDto; + status: IcsFormStatus; + comments: IcsCommentsDto; + scores: IcsScoresDto; + createdAt: string; + updatedAt: string | null; +}; + +export type IcsAdditionalAddressDto = { + address: string; + signature: string; +}; + +export type IcsApplyDto = { + mainAddress: string; + additionalAddresses?: IcsAdditionalAddressDto[]; + twitterLink?: string; + discordLink?: string; +}; diff --git a/features/ics/shared/use-apply-form-mutation.ts b/features/ics/shared/use-apply-form-mutation.ts new file mode 100644 index 00000000..64cf50f4 --- /dev/null +++ b/features/ics/shared/use-apply-form-mutation.ts @@ -0,0 +1,24 @@ +import { useMutation, UseMutationOptions } from '@tanstack/react-query'; +import { useCallback } from 'react'; +import { IcsApplyDto, IcsResponseDto } from './types'; +import { useIcsFetcher } from './use-ics-fetcher'; + +export const useApplyFormMutation = ( + options: Pick< + UseMutationOptions, + 'onMutate' | 'onError' | 'onSuccess' + > = {}, +) => { + const [, updater] = useIcsFetcher(); + + return useMutation({ + ...options, + mutationKey: ['ics-apply'], + mutationFn: useCallback( + async (payload: IcsApplyDto) => { + return await updater('ics/apply', payload)(); + }, + [updater], + ), + }); +}; diff --git a/features/ics/shared/use-form-status.ts b/features/ics/shared/use-form-status.ts new file mode 100644 index 00000000..82389ce0 --- /dev/null +++ b/features/ics/shared/use-form-status.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_LAZY } from 'consts'; +import { useSiweAuth } from 'shared/siwe'; +import { IcsResponseDto } from './types'; +import { useIcsFetcher } from './use-ics-fetcher'; + +export const ICS_FORM_STATUS_KEY = 'ics-form-status'; + +export const useFormStatus = () => { + const { token } = useSiweAuth(); + const [fetcher] = useIcsFetcher(); + + return useQuery({ + queryKey: [ICS_FORM_STATUS_KEY, { token }], + queryFn: () => fetcher('ics/status'), + enabled: !!token, + ...STRATEGY_LAZY, + }); +}; diff --git a/features/ics/shared/use-ics-fetcher.ts b/features/ics/shared/use-ics-fetcher.ts new file mode 100644 index 00000000..fee82e7c --- /dev/null +++ b/features/ics/shared/use-ics-fetcher.ts @@ -0,0 +1,63 @@ +import { useCallback } from 'react'; +import invariant from 'tiny-invariant'; +import { FetcherError, standardFetcher } from 'utils'; +import { useSiweAuth } from 'shared/siwe'; +import { getExternalLinks } from 'consts/external-links'; + +const { surveyApi } = getExternalLinks(); + +export const useIcsFetcher = () => { + const { token, logout } = useSiweAuth(); + + const handleError = useCallback( + (err: unknown) => { + const error = err as FetcherError; + if (error?.status === 401 || error.status === 403) { + logout(); + } + }, + [logout], + ); + + const fetcher = useCallback( + async (url: string) => { + invariant(token, 'Token is not available'); + try { + const res = await standardFetcher(`${surveyApi}/${url}`, { + headers: { + 'Content-type': 'application/json', + Authorization: token, + }, + }); + return res; + } catch (err) { + handleError(err); + throw err; + } + }, + [handleError, token], + ); + + const updater = useCallback( + (url: string, data: T | null) => async () => { + invariant(token, 'Token is not available'); + try { + const res = await standardFetcher(`${surveyApi}/${url}`, { + method: data === null ? 'DELETE' : 'POST', + body: JSON.stringify(data), + headers: { + 'Content-type': 'application/json', + Authorization: token, + }, + }); + return res; + } catch (err) { + handleError(err); + throw err; + } + }, + [handleError, token], + ); + + return [fetcher, updater] as const; +}; diff --git a/features/ics/siwe-sign-in/index.ts b/features/ics/siwe-sign-in/index.ts new file mode 100644 index 00000000..6e79f6c7 --- /dev/null +++ b/features/ics/siwe-sign-in/index.ts @@ -0,0 +1 @@ +export * from './siwe-sign-in'; diff --git a/features/ics/siwe-sign-in/siwe-sign-in.tsx b/features/ics/siwe-sign-in/siwe-sign-in.tsx new file mode 100644 index 00000000..fb2b5302 --- /dev/null +++ b/features/ics/siwe-sign-in/siwe-sign-in.tsx @@ -0,0 +1,41 @@ +import { Block, Button, Text } from '@lidofinance/lido-ui'; +import { useDappStatus } from 'modules/web3'; +import { FC } from 'react'; +import { InputAddress, Stack } from 'shared/components'; +import { useSiweAuth } from 'shared/siwe'; + +export const SiweSignIn: FC = () => { + const { address } = useDappStatus(); + const { signIn } = useSiweAuth(); + + return ( + + + + + Sign in + + + To continue, please sign a message with your connected address to + prove ownership. + + + + + You are requesting ICS operator type for the following address: + + + + + + + + ); +}; diff --git a/features/monitoring/attestation-rate-section/attestation-rate-section.tsx b/features/monitoring/attestation-rate-section/attestation-rate-section.tsx new file mode 100644 index 00000000..99ed73d7 --- /dev/null +++ b/features/monitoring/attestation-rate-section/attestation-rate-section.tsx @@ -0,0 +1,94 @@ +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; +import { Block, InlineLoader, Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { DATA_UNAVAILABLE } from 'consts/text'; +import { + useDappStatus, + useNodeOperatorId, + useOperatorInfo, +} from 'modules/web3'; +import { FC } from 'react'; +import { IconTooltip, MatomoLink, Stack } from 'shared/components'; +import { formatDate, formatPercent } from 'utils'; +import { DiffBadge } from './diff-badge'; +import { Rate } from './styles'; +import { Tip } from './tip'; +import { usePerformanceApi } from './use-performance-api'; +import { PerformanceMetricMethodology } from './performance-metric-methodology'; + +export const AttestationRateSection: FC = () => { + const nodeOperatorId = useNodeOperatorId(); + const { data: info } = useOperatorInfo(nodeOperatorId); + const { data, error } = usePerformanceApi(); + const { chainId } = useDappStatus(); + + const showThisSection = + chainId === CHAINS.Mainnet && (data || (info?.totalDepositedKeys ?? 0) > 0); + + if (!showThisSection) return null; + + return ( + + + + + + Unified Performance Rating + + {data && ( +
      + Monitoring frame: {formatDate(data.startTimestamp)} —{' '} + {formatDate(data.endTimestamp)} +
      + )} +
      + +
      + Data Source:{' '} + + MigaLabs + +
      + +
      +
      + {data ? ( + <> + + {formatPercent(data.operatorAttestationRate)} + + + + {data.status !== 'bad' + ? 'above Performance Threshold' + : 'below Performance Threshold'} + + + + + {data.status !== 'good' && } + + ) : error ? ( + + {DATA_UNAVAILABLE} + + ) : ( + + )} + +
      +
      + ); +}; diff --git a/features/monitoring/attestation-rate-section/diff-badge.tsx b/features/monitoring/attestation-rate-section/diff-badge.tsx new file mode 100644 index 00000000..ae808e5b --- /dev/null +++ b/features/monitoring/attestation-rate-section/diff-badge.tsx @@ -0,0 +1,20 @@ +import { FC } from 'react'; +import { RateStatus } from 'types'; +import { formatPercent } from 'utils'; +import { BadgeStyle } from './styles'; + +import { ReactComponent as DownIcon } from 'assets/icons/triangle-down.svg'; +import { ReactComponent as UpIcon } from 'assets/icons/triangle-up.svg'; + +export const DiffBadge: FC<{ + values: [number, number]; + status: RateStatus; +}> = ({ values, status }) => { + const diff = values[0] - values[1]; + return ( + + {diff > 0 ? : } + {formatPercent(Math.abs(diff))} + + ); +}; diff --git a/features/monitoring/attestation-rate-section/index.ts b/features/monitoring/attestation-rate-section/index.ts new file mode 100644 index 00000000..f483ef30 --- /dev/null +++ b/features/monitoring/attestation-rate-section/index.ts @@ -0,0 +1 @@ +export * from './attestation-rate-section'; diff --git a/features/monitoring/attestation-rate-section/performance-metric-methodology.tsx b/features/monitoring/attestation-rate-section/performance-metric-methodology.tsx new file mode 100644 index 00000000..b1afe6bf --- /dev/null +++ b/features/monitoring/attestation-rate-section/performance-metric-methodology.tsx @@ -0,0 +1,91 @@ +import { Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { FC } from 'react'; +import { MatomoLink, Stack } from 'shared/components'; +import { + AccordionWrapper, + FormulaBadge, + FormulaOperator, + FormulaWrapper, +} from './styles'; + +export const PerformanceMetricMethodology: FC = () => { + return ( + + Unified performance metric methodology + + } + > + +

      + Performance of each key in CSM is calculated based on three + parameters: +

      + +
        +
      • + Attestations (Aeff) +
      • +
      • + Block proposals (Beff) +
      • +
      • + Sync committee participation (Seff) +
      • +
      + +

      The resulting formula for key performance looks as follows:

      + + + + Pkey + + = + + Ca + + × + + Aeff + + + + + Cb + + × + + Beff + + + + + Cs + + × + + Seff + + + +

      + Each parameter is multiplied by a corresponding coefficient (C + x) that determines the parameter weight in the formula. The + values of the effectiveness parameters are calculated based on the + ratio of expected versus successful duties performed during the + monitoring frame. The values of the coefficients (which can vary per + Operator Type) are based on the weighting coefficients for these + duties in Ethereum's Consensus Layer specification. Check out the + detailed information{' '} + + in the documentation + + . +

      +
      +
      + ); +}; diff --git a/features/monitoring/attestation-rate-section/styles.ts b/features/monitoring/attestation-rate-section/styles.ts new file mode 100644 index 00000000..06cb98a3 --- /dev/null +++ b/features/monitoring/attestation-rate-section/styles.ts @@ -0,0 +1,94 @@ +import { Accordion, Text } from '@lidofinance/lido-ui'; +import { StackStyle } from 'shared/components'; +import styled, { css } from 'styled-components'; +import { RateStatus } from 'types'; + +export const Rate = styled(Text).attrs({ size: 'lg', weight: 700 })` + flex: 0 0 auto; +`; + +export const TipWrapper = styled.div<{ $danger?: boolean }>` + border-radius: ${({ theme }) => theme.borderRadiusesMap.lg}px; + padding: 12px; + background: ${({ $danger = false }) => + $danger + ? 'rgba(var(--lido-rgb-error), 0.1);' + : 'var(--lido-color-background)'}; + + color: ${({ $danger = false }) => + $danger ? 'var(--lido-color-error)' : 'var(--lido-color-textSecondary)'}; +`; + +const variants = { + good: css` + color: var(--lido-color-success); + background: rgba(var(--lido-rgb-success), 0.1); + `, + semi: css` + color: var(--lido-color-warning); + background: rgba(var(--lido-rgb-warning), 0.1); + `, + bad: css` + color: var(--lido-color-error); + background: rgba(var(--lido-rgb-error), 0.1); + `, +}; + +export const BadgeStyle = styled.div<{ $variant: RateStatus }>` + flex: 0 0 auto; + font-weight: 700; + font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; + line-height: ${({ theme }) => theme.fontSizesMap.lg}px; + border-radius: ${({ theme }) => theme.borderRadiusesMap.xs}px; + padding: 2px 4px; + ${({ $variant }) => variants[$variant]} +`; + +// PerformanceMetricMethodology styles + +export const AccordionWrapper = styled(Accordion)` + background: var(--lido-color-backgroundSecondary); + border-radius: ${({ theme }) => theme.borderRadiusesMap.lg}px; + + & > div:first-child { + padding: ${({ theme }) => theme.spaceMap.lg}px; + } + + & > div + div > div { + padding: 0 ${({ theme }) => theme.spaceMap.lg}px + ${({ theme }) => theme.spaceMap.lg}px + ${({ theme }) => theme.spaceMap.lg}px; + } + + & > div + div > div > div { + color: var(--lido-color-text); + line-height: 20px; + } + + p, + ul { + margin: 0; + } + + sub { + line-height: 13px; + } +`; + +export const FormulaWrapper = styled(StackStyle).attrs({ + $gap: 'xs', + $align: 'center', +})` + flex-wrap: wrap; +`; + +export const FormulaBadge = styled.span` + background: var(--lido-color-borderLight); + border-radius: ${({ theme }) => theme.borderRadiusesMap.xs}px; + padding: 4px 8px; +`; + +export const FormulaOperator = styled.span` + font-size: ${({ theme }) => theme.fontSizesMap.sm}px; + padding: 0 2px; +`; diff --git a/features/monitoring/attestation-rate-section/tip.tsx b/features/monitoring/attestation-rate-section/tip.tsx new file mode 100644 index 00000000..c4a8183b --- /dev/null +++ b/features/monitoring/attestation-rate-section/tip.tsx @@ -0,0 +1,18 @@ +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { PERFORMANCE_TIPS_LINK } from 'consts/external-links'; +import { FC } from 'react'; +import { MatomoLink } from 'shared/components'; +import { TipWrapper } from './styles'; + +export const Tip: FC<{ danger?: boolean }> = ({ danger = false }) => ( + + Check out{' '} + + tips + {' '} + on how to improve your performance + +); diff --git a/features/monitoring/attestation-rate-section/use-performance-api.ts b/features/monitoring/attestation-rate-section/use-performance-api.ts new file mode 100644 index 00000000..bbda15b7 --- /dev/null +++ b/features/monitoring/attestation-rate-section/use-performance-api.ts @@ -0,0 +1,51 @@ +import { NodeOperatorId, PERCENT_BASIS } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { API_ROUTES, STRATEGY_LAZY } from 'consts'; +import { useNodeOperatorId } from 'modules/web3'; +import { Performance, RateStatus, UnifiedPerformance } from 'types'; +import { standardFetcher } from 'utils'; + +const usePerformanceRate = (nodeOperatorId?: NodeOperatorId) => { + const BASE_URL = typeof window === 'undefined' ? '' : window.location.origin; + const url = `${BASE_URL}/${API_ROUTES.PERFORMANCE}?node-operator-id=${nodeOperatorId}`; + + return useQuery({ + queryKey: ['performance', { nodeOperatorId }], + queryFn: async () => standardFetcher(url), + enabled: nodeOperatorId !== undefined, + ...STRATEGY_LAZY, + }); +}; + +export const usePerformanceApi = () => { + const nodeOperatorId = useNodeOperatorId(); + const queryRateApi = usePerformanceRate(nodeOperatorId); + // const queryPerfLeeway = usePerfLeeway(); // FIXME: use perf leeway + + const data = queryRateApi.data; + const leeway = 500; // queryPerfLeeway.data; + + return useQuery({ + queryKey: ['performance-api', nodeOperatorId, data, leeway], + queryFn: (): Performance | undefined => { + if (!data || !leeway) return undefined; + const offset = leeway / Number(PERCENT_BASIS); + const threshold = data.overallAttestationRate - offset; + const status: RateStatus = + data.operatorAttestationRate <= threshold + ? 'bad' + : data.operatorAttestationRate > + data.overallAttestationRate - offset / 2 + ? 'good' + : 'semi'; + + return { + ...data, + threshold, + status, + }; + }, + enabled: !!data && !!leeway, + ...STRATEGY_LAZY, + }); +}; diff --git a/features/monitoring/external-section/external-section.tsx b/features/monitoring/external-section/external-section.tsx new file mode 100644 index 00000000..3e075ea6 --- /dev/null +++ b/features/monitoring/external-section/external-section.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; +import { SectionBlock, Stack, ExternalButtonLink } from 'shared/components'; +import { useExternalButtons } from './use-external-button'; + +export const ExternalSection: FC = () => { + const buttons = useExternalButtons(); + + if (buttons.length === 0) return null; + + return ( + + + {buttons.map((button) => ( + + ))} + + + ); +}; diff --git a/features/dashboard/external/index.ts b/features/monitoring/external-section/index.ts similarity index 100% rename from features/dashboard/external/index.ts rename to features/monitoring/external-section/index.ts diff --git a/features/monitoring/external-section/use-external-button.tsx b/features/monitoring/external-section/use-external-button.tsx new file mode 100644 index 00000000..7e073b33 --- /dev/null +++ b/features/monitoring/external-section/use-external-button.tsx @@ -0,0 +1,88 @@ +import { ComponentProps, useMemo } from 'react'; +import { type ExternalButtonLink } from 'shared/components'; + +import { ReactComponent as BeaconchaIcon } from 'assets/icons/beaconcha.svg'; +import { ReactComponent as MigaLabsIcon } from 'assets/icons/migalabs.svg'; +import { ReactComponent as LidoIcon } from 'assets/icons/lido.svg'; +import { ReactComponent as RatedIcon } from 'assets/icons/rated.svg'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { + useBeaconchainDashboardLink, + useMigaLabsLink, + useFeesMonitoningLink, + useOperatorPortalLink, + useRatedLink, + useBeaconchainEntityLink, +} from 'shared/hooks'; + +export const useExternalButtons = () => { + const beaconchainEntityLink = useBeaconchainEntityLink(); + const beaconchainDashboardLink = useBeaconchainDashboardLink(); + const feesMonitoningLink = useFeesMonitoningLink(); + const operatorPortalLink = useOperatorPortalLink(); + const ratedLink = useRatedLink(); + const migaLabsLink = useMigaLabsLink(); + + return useMemo( + (): ComponentProps[] => + [ + beaconchainEntityLink && { + title: 'beaconcha.in Entity', + icon: , + href: beaconchainEntityLink, + matomoEvent: + MATOMO_CLICK_EVENTS_TYPES.dashboardExternalBeaconchaEntityLink, + children: 'Overview of your operator on beaconcha.in', + }, + ratedLink && { + title: 'Rated explorer', + icon: , + href: ratedLink, + matomoEvent: MATOMO_CLICK_EVENTS_TYPES.dashboardExternalRatedLink, + children: + 'Provides effectiveness ratings, APRs and other useful metrics', + }, + migaLabsLink && { + title: 'MigaLabs', + icon: , + href: migaLabsLink, + matomoEvent: MATOMO_CLICK_EVENTS_TYPES.dashboardExternalMigaLabsLink, + children: + 'Provides real-time statistics of your validators’ performance', + }, + beaconchainDashboardLink && { + title: 'beaconcha.in v2', + icon: , + href: beaconchainDashboardLink, + matomoEvent: MATOMO_CLICK_EVENTS_TYPES.dashboardExternalBeaconchaLink, + children: + 'Dashboard displays statistics of your validators (up to 20 in free plan)', + }, + operatorPortalLink && { + title: 'Lido Operators Portal', + icon: , + href: operatorPortalLink, + matomoEvent: + MATOMO_CLICK_EVENTS_TYPES.dashboardExternalOperatorsPortalLink, + children: 'Shows details about invalid keys', + }, + feesMonitoningLink && { + title: 'Lido Fees monitoring', + icon: , + href: feesMonitoningLink, + matomoEvent: + MATOMO_CLICK_EVENTS_TYPES.dashboardExternalFeesMonitoringLink, + children: + 'Tracks missed slots and blocks with incorrect fee recipient/MEV relays', + }, + ].filter((n) => !!n), + [ + beaconchainEntityLink, + ratedLink, + migaLabsLink, + beaconchainDashboardLink, + operatorPortalLink, + feesMonitoningLink, + ], + ); +}; diff --git a/features/monitoring/index.ts b/features/monitoring/index.ts new file mode 100644 index 00000000..424b1359 --- /dev/null +++ b/features/monitoring/index.ts @@ -0,0 +1 @@ +export * from './monitoring-page'; diff --git a/features/monitoring/monitoring-page.tsx b/features/monitoring/monitoring-page.tsx new file mode 100644 index 00000000..231c1db8 --- /dev/null +++ b/features/monitoring/monitoring-page.tsx @@ -0,0 +1,18 @@ +import { FC } from 'react'; +import { Layout } from 'shared/layout'; +import { Monitoring } from './monitoring'; +import { Faq } from 'shared/components'; +import { FAQ_MONITORING } from 'faq'; + +export const MonitoringPage: FC = () => { + return ( + + + + + ); +}; diff --git a/features/monitoring/monitoring.tsx b/features/monitoring/monitoring.tsx new file mode 100644 index 00000000..d7c76d39 --- /dev/null +++ b/features/monitoring/monitoring.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; +import { NoSSRWrapper } from 'shared/components'; +import { ExternalSection } from './external-section'; +import { NotificationToolsSection } from './notification-tools-section'; +import { StrikesSection } from './strikes-section'; +import { AttestationRateSection } from './attestation-rate-section'; + +export const Monitoring: FC = () => { + return ( + <> + + + + + + + + ); +}; diff --git a/features/monitoring/notification-tools-section/index.ts b/features/monitoring/notification-tools-section/index.ts new file mode 100644 index 00000000..be05cf8c --- /dev/null +++ b/features/monitoring/notification-tools-section/index.ts @@ -0,0 +1 @@ +export { NotificationToolsSection } from './notification-tools-section'; diff --git a/features/monitoring/notification-tools-section/notification-tools-buttons.tsx b/features/monitoring/notification-tools-section/notification-tools-buttons.tsx new file mode 100644 index 00000000..745f3263 --- /dev/null +++ b/features/monitoring/notification-tools-section/notification-tools-buttons.tsx @@ -0,0 +1,16 @@ +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { ComponentProps } from 'react'; +import { ExternalButtonLink } from 'shared/components'; +import { ReactComponent as CsmIcon } from 'assets/icons/csm.svg'; + +export const NOTIFICATION_TOOLS_BUTTONS: ComponentProps< + typeof ExternalButtonLink +>[] = [ + { + title: 'CSM Sentinel', + icon: , + href: 'https://github.com/skhomuti/csm-sentinel', + matomoEvent: MATOMO_CLICK_EVENTS_TYPES.dashboardNotificationSentinelLink, + children: 'Provides your CSM Node Operator events to the telegram chats', + }, +]; diff --git a/features/monitoring/notification-tools-section/notification-tools-section.tsx b/features/monitoring/notification-tools-section/notification-tools-section.tsx new file mode 100644 index 00000000..5db45d15 --- /dev/null +++ b/features/monitoring/notification-tools-section/notification-tools-section.tsx @@ -0,0 +1,17 @@ +import { FC } from 'react'; +import { SectionBlock, Stack, ExternalButtonLink } from 'shared/components'; +import { NOTIFICATION_TOOLS_BUTTONS } from './notification-tools-buttons'; + +export const NotificationToolsSection: FC = () => { + if (NOTIFICATION_TOOLS_BUTTONS.length === 0) return null; + + return ( + + + {NOTIFICATION_TOOLS_BUTTONS.map((button) => ( + + ))} + + + ); +}; diff --git a/features/monitoring/strikes-section/index.ts b/features/monitoring/strikes-section/index.ts new file mode 100644 index 00000000..68d345df --- /dev/null +++ b/features/monitoring/strikes-section/index.ts @@ -0,0 +1 @@ +export * from './strikes-section'; diff --git a/features/monitoring/strikes-section/last-strike.tsx b/features/monitoring/strikes-section/last-strike.tsx new file mode 100644 index 00000000..658bd7d0 --- /dev/null +++ b/features/monitoring/strikes-section/last-strike.tsx @@ -0,0 +1,19 @@ +import { InlineLoader, Text } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { useStrikeDates } from 'shared/hooks'; +import { formatDate } from 'utils'; + +export const LastStrike: FC<{ strikes: number[] }> = ({ strikes }) => { + const n = strikes.findIndex((v) => !!v); + const dates = useStrikeDates(n); + + if (!dates) { + return ; + } + + return ( + + Last Strike: {formatDate(dates?.receivedTimestamp, 'dd.MM.yyyy')} + + ); +}; diff --git a/features/monitoring/strikes-section/strikes-section.tsx b/features/monitoring/strikes-section/strikes-section.tsx new file mode 100644 index 00000000..d1a8d2ea --- /dev/null +++ b/features/monitoring/strikes-section/strikes-section.tsx @@ -0,0 +1,44 @@ +import { KEY_STATUS, KeyWithStatus } from '@lidofinance/lido-csm-sdk'; +import { Text } from '@lidofinance/lido-ui'; +import { useNodeOperatorId, useOperatorKeysWithStatus } from 'modules/web3'; +import { FC } from 'react'; +import { + FaqStrikeLifetime, + FaqStrikeThreshold, + SectionBlock, + Stack, +} from 'shared/components'; +import { TablePagination, TableProvider } from 'providers/table-provider'; +import { hasStatus } from 'utils'; +import { StrikesTable } from './strikes-table'; + +type WithStrikes = KeyWithStatus & Required>; + +export const StrikesSection: FC = () => { + const nodeOperatorId = useNodeOperatorId(); + const { data: keys } = useOperatorKeysWithStatus(nodeOperatorId, (data) => { + return data + .filter(hasStatus(KEY_STATUS.WITH_STRIKES)) + .filter( + hasStatus([KEY_STATUS.ACTIVE, KEY_STATUS.ACTIVATION_PENDING]), + ) as WithStrikes[]; + }); + + if (!keys?.length) return null; + + return ( + + + + + Strikes are issued for bad performance. In case your key gets{' '} + within the key will be + ejected. + + + + + + + ); +}; diff --git a/features/monitoring/strikes-section/strikes-table.tsx b/features/monitoring/strikes-section/strikes-table.tsx new file mode 100644 index 00000000..fd9befb2 --- /dev/null +++ b/features/monitoring/strikes-section/strikes-table.tsx @@ -0,0 +1,24 @@ +import { KeyWithStatus } from '@lidofinance/lido-csm-sdk'; +import { FC } from 'react'; +import { KeyStrikes, Pubkey, PubkeyLinks } from 'shared/components'; +import { useTable } from 'providers/table-provider'; +import { LastStrike } from './last-strike'; +import { List, Row } from './styles'; + +type WithStrikes = KeyWithStatus & Required>; + +export const StrikesTable: FC = () => { + const { data } = useTable(); + + return ( + + {data.map((key) => ( + + } /> + + + + ))} + + ); +}; diff --git a/features/monitoring/strikes-section/styles.ts b/features/monitoring/strikes-section/styles.ts new file mode 100644 index 00000000..f560e83a --- /dev/null +++ b/features/monitoring/strikes-section/styles.ts @@ -0,0 +1,58 @@ +import styled from 'styled-components'; + +export const List = styled.div` + display: flex; + flex-direction: column; + gap: 0; + > * { + position: relative; + + :not(:first-child) { + :before { + content: ''; + position: absolute; + top: 0px; + left: 0; + width: 100%; + height: 1px; + background: var(--lido-color-popupMenuItemBgActiveHover); + opacity: 0.12; + } + } + } +`; + +export const Row = styled.div` + display: flex; + align-items: center; + justify-content: space-between; + gap: 6px; + padding: 12px 0; + + ${({ theme }) => theme.mediaQueries.lg} { + display: grid; + grid-auto-rows: auto; + grid-column-gap: 1rem; + grid-template-columns: 2fr 1fr; + + td:nth-child(3) { + grid-column: 1 / -1; + + &:empty { + display: none; + } + } + + th:nth-child(3) { + display: none; + } + } + + ${({ theme }) => theme.mediaQueries.md} { + grid-template-columns: 1fr; + } + + > :last-child { + min-width: fit-content; + } +`; diff --git a/features/normalize-queue/normalize-queue-form/context/index.ts b/features/normalize-queue/normalize-queue-form/context/index.ts index 19d33b0b..0b018349 100644 --- a/features/normalize-queue/normalize-queue-form/context/index.ts +++ b/features/normalize-queue/normalize-queue-form/context/index.ts @@ -1,2 +1,3 @@ +export * from './normalize-queue-data-provider'; export * from './normalize-queue-form-provider'; export * from './types'; diff --git a/features/normalize-queue/normalize-queue-form/context/normalize-queue-data-provider.tsx b/features/normalize-queue/normalize-queue-form/context/normalize-queue-data-provider.tsx new file mode 100644 index 00000000..4229fac3 --- /dev/null +++ b/features/normalize-queue/normalize-queue-form/context/normalize-queue-data-provider.tsx @@ -0,0 +1,67 @@ +import { + KEY_OPERATOR_INFO, + useEthereumBalance, + useNodeOperatorId, + useOperatorInfo, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type NormalizeQueueFormNetworkData } from './types'; + +const useNormalizeQueueFormNetworkData: NetworkData< + NormalizeQueueFormNetworkData +> = () => { + const nodeOperatorId = useNodeOperatorId(); + + const infoQuery = useOperatorInfo(nodeOperatorId); + const ethBalanceQuery = useEthereumBalance(); + + const info = infoQuery.data; + const ethBalance = ethBalanceQuery.data; + + const isInfoLoading = infoQuery.isPending; + const isEthBalanceLoading = ethBalanceQuery.isPending; + + const unqueuedCount = info + ? info.depositableValidatorsCount - info.enqueuedCount + : undefined; + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([KEY_OPERATOR_INFO, ethBalanceQuery.queryKey]); + }, [invalidate, ethBalanceQuery.queryKey]); + + const isPending = isInfoLoading || isEthBalanceLoading; + + return { + data: { + nodeOperatorId, + info, + unqueuedCount, + ethBalance, + } as NormalizeQueueFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useNormalizeQueueFormData = + useFormData; + +export const NormalizeQueueDataProvider: FC = ({ + children, +}) => { + const networkData = useNormalizeQueueFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/normalize-queue/normalize-queue-form/context/normalize-queue-form-provider.tsx b/features/normalize-queue/normalize-queue-form/context/normalize-queue-form-provider.tsx index ee0b251c..8842e080 100644 --- a/features/normalize-queue/normalize-queue-form/context/normalize-queue-form-provider.tsx +++ b/features/normalize-queue/normalize-queue-form/context/normalize-queue-form-provider.tsx @@ -1,61 +1,27 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, -} from 'shared/hook-form/form-controller'; -import { - NormalizeQueueFormNetworkData, - type NormalizeQueueFormInputType, -} from './types'; -import { useNormalizeQueueFormNetworkData } from './use-normalize-queue-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { type NormalizeQueueFormInputType } from './types'; import { useNormalizeQueueSubmit } from './use-normalize-queue-submit'; import { useNormalizeQueueValidation } from './use-normalize-queue-validation'; -export const useNormalizeQueueFormData = - useFormData; - export const NormalizeQueueFormProvider: FC = ({ children, }) => { - const [networkData, revalidate] = useNormalizeQueueFormNetworkData(); - const validationResolver = useNormalizeQueueValidation(networkData); + const resolver = useNormalizeQueueValidation(); - // TODO: validate (max amount) const formObject = useForm({ - defaultValues: {}, - resolver: validationResolver, + resolver, mode: 'onChange', }); - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { normalizeQueue } = useNormalizeQueueSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - NormalizeQueueFormInputType, - NormalizeQueueFormNetworkData - > = useMemo( - () => ({ - onSubmit: normalizeQueue, - retryEvent, - }), - [normalizeQueue, retryEvent], - ); + const submitter = useNormalizeQueueSubmit(); return ( - - - {children} - - + + {children} + ); }; diff --git a/features/normalize-queue/normalize-queue-form/context/types.ts b/features/normalize-queue/normalize-queue-form/context/types.ts index 757d1de1..f989529f 100644 --- a/features/normalize-queue/normalize-queue-form/context/types.ts +++ b/features/normalize-queue/normalize-queue-form/context/types.ts @@ -1,13 +1,10 @@ -import { BigNumber } from 'ethers'; -import { useNodeOperatorInfo } from 'shared/hooks'; -import { LoadingRecord, NodeOperatorId } from 'types'; +import { NodeOperatorId, NodeOperatorInfo } from '@lidofinance/lido-csm-sdk'; export type NormalizeQueueFormInputType = Record; export type NormalizeQueueFormNetworkData = { - nodeOperatorId?: NodeOperatorId; - info?: ReturnType['data']; - unqueuedCount?: number; - etherBalance?: BigNumber; - loading: LoadingRecord<'info' | 'etherBalance'>; + nodeOperatorId: NodeOperatorId; + info: NodeOperatorInfo; + unqueuedCount: number; + ethBalance: bigint; }; diff --git a/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-form-network-data.tsx b/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-form-network-data.tsx deleted file mode 100644 index 448ad469..00000000 --- a/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-form-network-data.tsx +++ /dev/null @@ -1,52 +0,0 @@ -import { useEthereumBalance } from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { useNodeOperatorInfo } from 'shared/hooks'; -import { type NormalizeQueueFormNetworkData } from './types'; - -export const useNormalizeQueueFormNetworkData = (): [ - NormalizeQueueFormNetworkData, - () => Promise, -] => { - const nodeOperatorId = useNodeOperatorId(); - - const { - data: info, - update: updateInfo, - initialLoading: isInfoLoading, - } = useNodeOperatorInfo(nodeOperatorId); - - const unqueuedCount = info - ? info.depositableValidatorsCount - info.enqueuedCount - : undefined; - - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateInfo(), updateEtherBalance()]); - }, [updateEtherBalance, updateInfo]); - - const loading = useMemo( - () => ({ - isInfoLoading, - isEtherBalanceLoading, - }), - [isEtherBalanceLoading, isInfoLoading], - ); - - return [ - { - nodeOperatorId, - info, - unqueuedCount, - etherBalance, - loading, - }, - revalidate, - ]; -}; diff --git a/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-submit.ts b/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-submit.ts index 734271a5..0a612859 100644 --- a/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-submit.ts +++ b/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-submit.ts @@ -1,99 +1,67 @@ +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; - -import { useCSModuleWeb3, useSendTx } from 'shared/hooks'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; -import { NormalizeQueueFormInputType, NormalizeQueueFormNetworkData } from '.'; import { useTxModalStagesNormalizeQueue } from '../hooks/use-tx-modal-stages-normalize-queue'; - -type UseNormalizeQueueOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type NormalizeQueueMethodParams = { - nodeOperatorId: NodeOperatorId; -}; - -const useNormalizeQueueTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (params: NormalizeQueueMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - return { - tx: await CSModuleWeb3.populateTransaction.normalizeQueue( - params.nodeOperatorId, - ), - txName: 'normalizeQueue', - }; - }, - [CSModuleWeb3], - ); -}; - -export const useNormalizeQueueSubmit = ({ - onConfirm, - onRetry, -}: UseNormalizeQueueOptions) => { +import { + NormalizeQueueFormInputType, + NormalizeQueueFormNetworkData, +} from './types'; + +export const useNormalizeQueueSubmit: FormSubmitterHook< + NormalizeQueueFormInputType, + NormalizeQueueFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesNormalizeQueue(); - const getTx = useNormalizeQueueTx(); - const sendTx = useSendTx(); - - const normalizeQueue = useCallback( + return useCallback( async ( _: NormalizeQueueFormInputType, - { nodeOperatorId, info }: NormalizeQueueFormNetworkData, - ): Promise => { - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); - invariant(info, 'Info is not defined'); - + { nodeOperatorId, info }, + { onConfirm, onRetry }, + ) => { try { - txModalStages.sign({ - keysCount: info.depositableValidatorsCount - info.enqueuedCount, - }); - - const tx = await getTx({ + const keysCount = info.depositableValidatorsCount - info.enqueuedCount; + + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ keysCount }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ keysCount }, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success({ keysCount }, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.keys.normalizeQueue({ nodeOperatorId, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'NormalizeQueue signing', - () => sendTx(tx), - ); - - txModalStages.pending( - { - keysCount: info.depositableValidatorsCount - info.enqueuedCount, - }, - txHash, - ); - - await runWithTransactionLogger( - 'NormalizeQueue block confirmation', - waitTx, - ); - await onConfirm?.(); - txModalStages.success( - { keysCount: info.depositableValidatorsCount }, - txHash, - ); - return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [getTx, txModalStages, onConfirm, sendTx, onRetry], + [csm.keys, txModalStages], ); - - return { - normalizeQueue, - }; }; diff --git a/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-validation.ts b/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-validation.ts index 527099b0..5417be15 100644 --- a/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-validation.ts +++ b/features/normalize-queue/normalize-queue-form/context/use-normalize-queue-validation.ts @@ -1,37 +1,17 @@ -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; -import { handleResolverValidationError } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; +import { useFormValidation } from 'shared/hook-form/validation'; import invariant from 'tiny-invariant'; import type { NormalizeQueueFormInputType, NormalizeQueueFormNetworkData, } from './types'; -export const useNormalizeQueueValidation = ( - networkData: NormalizeQueueFormNetworkData, -) => { - const dataPromise = useAwaitNetworkData(networkData); - - return useCallback>( - async (values) => { - try { - const { etherBalance } = await dataPromise; - - invariant(etherBalance); - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError( - error, - 'NormalizeQueueForm', - 'keysCount', - ); - } - }, - [dataPromise], - ); +export const useNormalizeQueueValidation = () => { + return useFormValidation< + NormalizeQueueFormInputType, + NormalizeQueueFormNetworkData + >('keysCount', async (_, { ethBalance }, validate) => { + await validate('keysCount', () => { + invariant(ethBalance !== undefined, 'Insufficient ETH balance'); + }); + }); }; diff --git a/features/normalize-queue/normalize-queue-form/controls/info.tsx b/features/normalize-queue/normalize-queue-form/controls/info.tsx index 4d914df3..0c2efe79 100644 --- a/features/normalize-queue/normalize-queue-form/controls/info.tsx +++ b/features/normalize-queue/normalize-queue-form/controls/info.tsx @@ -3,18 +3,11 @@ import { Latice, TitledValue } from 'shared/components'; import { useNormalizeQueueFormData } from '../context'; export const Info: FC = () => { - const { info, unqueuedCount, loading } = useNormalizeQueueFormData(); + const { unqueuedCount } = useNormalizeQueueFormData(); return ( <> - - {info?.stuckValidatorsCount ? ( - - ) : null} + ); diff --git a/features/normalize-queue/normalize-queue-form/controls/submit-button.tsx b/features/normalize-queue/normalize-queue-form/controls/submit-button.tsx index c56f6b9f..a20e1000 100644 --- a/features/normalize-queue/normalize-queue-form/controls/submit-button.tsx +++ b/features/normalize-queue/normalize-queue-form/controls/submit-button.tsx @@ -3,30 +3,16 @@ import { useNormalizeQueueFormData } from '../context'; import { Note } from 'shared/components'; export const SubmitButton = () => { - const { info, unqueuedCount } = useNormalizeQueueFormData(); + const { unqueuedCount } = useNormalizeQueueFormData(); return ( <> {unqueuedCount ? ( - info?.stuckValidatorsCount ? ( - <> - - You have stuck keys - - Before normalize queue you need to exit stuck keys - - ) : ( - <> - - Normalizing queue - + <> + Normalizing queue - Or submit more keys - - ) + Or submit more keys + ) : ( No need to normalize queue diff --git a/features/normalize-queue/normalize-queue-form/normalize-queue-form-loader.tsx b/features/normalize-queue/normalize-queue-form/normalize-queue-form-loader.tsx deleted file mode 100644 index 994e0e72..00000000 --- a/features/normalize-queue/normalize-queue-form/normalize-queue-form-loader.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { NormalizeQueueFormInputType } from './context'; - -export const NormalizeQueueFormLoader: FC = ({ - children, -}) => { - const { isLoading } = useFormState(); - - return {children}; -}; diff --git a/features/normalize-queue/normalize-queue-form/normalize-queue-form.tsx b/features/normalize-queue/normalize-queue-form/normalize-queue-form.tsx index 01d1d98f..d2d4a807 100644 --- a/features/normalize-queue/normalize-queue-form/normalize-queue-form.tsx +++ b/features/normalize-queue/normalize-queue-form/normalize-queue-form.tsx @@ -1,26 +1,29 @@ import { FC, memo } from 'react'; -import { NormalizeQueueFormProvider } from './context'; - import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; +import { + NormalizeQueueDataProvider, + NormalizeQueueFormProvider, +} from './context'; import { Info } from './controls/info'; import { SubmitButton } from './controls/submit-button'; import { NormalizeQueueFormInfo } from './normalize-queue-form-info'; -import { NormalizeQueueFormLoader } from './normalize-queue-form-loader'; export const NormalizeQueueForm: FC = memo(() => { return ( - - - - - - - - - - - + + + + +
      + + + + +
      +
      +
      +
      ); }); diff --git a/features/normalize-queue/normalize-queue-page.tsx b/features/normalize-queue/normalize-queue-page.tsx index a50ccb9d..6747778f 100644 --- a/features/normalize-queue/normalize-queue-page.tsx +++ b/features/normalize-queue/normalize-queue-page.tsx @@ -1,6 +1,5 @@ import { FC } from 'react'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { Layout } from 'shared/layout'; import { NormalizeQueue } from './normalize-queue'; @@ -8,7 +7,7 @@ export const NormalizeQueuePage: FC = () => ( diff --git a/features/normalize-queue/normalize-queue.tsx b/features/normalize-queue/normalize-queue.tsx index b709ba7d..20ebcdc7 100644 --- a/features/normalize-queue/normalize-queue.tsx +++ b/features/normalize-queue/normalize-queue.tsx @@ -1,5 +1,5 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { NormalizeQueueForm } from './normalize-queue-form'; diff --git a/features/remove-keys/remove-keys-page.tsx b/features/remove-keys/remove-keys-page.tsx index 3d6a600b..98b3f7ed 100644 --- a/features/remove-keys/remove-keys-page.tsx +++ b/features/remove-keys/remove-keys-page.tsx @@ -1,17 +1,26 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; -import { KeysPageSwitcher } from 'shared/navigate'; +import { + DeleteKeysSwitcher, + DeleteKeysSwitcherRoutes, + KeysPageSwitcher, +} from 'shared/navigate'; import { RemoveKeys } from './remove-keys'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq, FormBlock } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; export const RemoveKeysPage: FC = () => ( - + + + + + ); diff --git a/features/remove-keys/remove-keys.tsx b/features/remove-keys/remove-keys.tsx index 1211c6a2..e5912a05 100644 --- a/features/remove-keys/remove-keys.tsx +++ b/features/remove-keys/remove-keys.tsx @@ -1,7 +1,6 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { RemoveKeysForm } from './remove-keys/remove-keys-form'; -import { Faq } from 'shared/components'; export const RemoveKeys = () => { const key = useWeb3Key(); @@ -10,7 +9,6 @@ export const RemoveKeys = () => { - ); }; diff --git a/features/remove-keys/remove-keys/context/index.ts b/features/remove-keys/remove-keys/context/index.ts index 8bab4149..2a142c61 100644 --- a/features/remove-keys/remove-keys/context/index.ts +++ b/features/remove-keys/remove-keys/context/index.ts @@ -1,5 +1,3 @@ -export { - RemoveKeysFormProvider, - useRemoveKeysFormData, -} from './remove-keys-form-provider'; +export * from './remove-keys-data-provider'; +export * from './remove-keys-form-provider'; export * from './types'; diff --git a/features/remove-keys/remove-keys/context/remove-keys-data-provider.tsx b/features/remove-keys/remove-keys/context/remove-keys-data-provider.tsx new file mode 100644 index 00000000..8dfb8f87 --- /dev/null +++ b/features/remove-keys/remove-keys/context/remove-keys-data-provider.tsx @@ -0,0 +1,97 @@ +import { KEY_STATUS } from '@lidofinance/lido-csm-sdk'; +import { + KEY_DEPOSIT_QUEUE_BATCHES, + KEY_OPERATOR_BALANCE, + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + useKeyRemovalFee, + useNodeOperatorId, + useOperatorBalance, + useOperatorCurveId, + useOperatorInfo, + useOperatorKeysWithStatus, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { hasStatus } from 'utils'; +import { type RemoveKeysFormNetworkData } from './types'; + +const useRemoveKeysFormNetworkData: NetworkData< + RemoveKeysFormNetworkData +> = () => { + const nodeOperatorId = useNodeOperatorId(); + const bondQuery = useOperatorBalance(nodeOperatorId); + const infoQuery = useOperatorInfo(nodeOperatorId); + const keysQuery = useOperatorKeysWithStatus(nodeOperatorId, (keys) => + keys.filter( + hasStatus([ + KEY_STATUS.DEPOSITABLE, + KEY_STATUS.NON_QUEUED, + KEY_STATUS.UNCHECKED, + KEY_STATUS.DUPLICATED, // TODO: check active duplicated key is here? + KEY_STATUS.INVALID, + ]), + ), + ); + + const bond = bondQuery.data; + const info = infoQuery.data; + const keys = keysQuery.data; + + const isBondLoading = bondQuery.isPending; + const isInfoLoading = infoQuery.isPending; + const isKeysLoading = keysQuery.isPending; + + const { data: curveId, isPending: isCurveIdLoading } = + useOperatorCurveId(nodeOperatorId); + const { data: removalFee, isPending: isRemovalFeeLoading } = + useKeyRemovalFee(curveId); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + KEY_OPERATOR_BALANCE, + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS, + KEY_DEPOSIT_QUEUE_BATCHES, + ]); + }, [invalidate]); + + const isPending = + isBondLoading || + isInfoLoading || + isCurveIdLoading || + isRemovalFeeLoading || + isKeysLoading; + + return { + data: { + nodeOperatorId, + curveId, + removalFee, + bond, + keys, + info, + } as RemoveKeysFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useRemoveKeysFormData = useFormData; + +export const RemoveKeysDataProvider: FC = ({ children }) => { + const networkData = useRemoveKeysFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/remove-keys/remove-keys/context/remove-keys-form-provider.tsx b/features/remove-keys/remove-keys/context/remove-keys-form-provider.tsx index 48bee78c..1e847cc3 100644 --- a/features/remove-keys/remove-keys/context/remove-keys-form-provider.tsx +++ b/features/remove-keys/remove-keys/context/remove-keys-form-provider.tsx @@ -1,60 +1,33 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormData, + FormControllerProvider, + useFormDefaultValues, } from 'shared/hook-form/form-controller'; -import { useFormControllerRetry } from 'shared/hook-form/form-controller/use-form-controller-retry-delegate'; -import { - RemoveKeysFormNetworkData, - type RemoveKeysFormInputType, -} from './types'; -import { useGetDefaultValues } from './use-get-default-values'; -import { useRemoveKeysFormNetworkData } from './use-remove-keys-form-network-data'; +import { type RemoveKeysFormInputType } from './types'; import { useRemoveKeysSubmit } from './use-remove-keys-submit'; import { useRemoveKeysValidation } from './use-remove-keys-validation'; -export const useRemoveKeysFormData = useFormData; - export const RemoveKeysFormProvider: FC = ({ children }) => { - const [networkData, revalidate] = useRemoveKeysFormNetworkData(); - const validationResolver = useRemoveKeysValidation(); + const resolver = useRemoveKeysValidation(); - const asyncDefaultValues = useGetDefaultValues(networkData); + const defaultValues = useFormDefaultValues(() => ({ + selection: { start: 0, count: 0 }, + })); const formObject = useForm({ - defaultValues: asyncDefaultValues, - resolver: validationResolver, + defaultValues, + resolver, mode: 'onChange', }); - const { retryEvent, retryFire } = useFormControllerRetry(); - - const removeKeys = useRemoveKeysSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - RemoveKeysFormInputType, - RemoveKeysFormNetworkData - > = useMemo( - () => ({ - onSubmit: removeKeys, - retryEvent, - }), - [removeKeys, retryEvent], - ); + const submitter = useRemoveKeysSubmit(); return ( - - - {children} - - + + {children} + ); }; diff --git a/features/remove-keys/remove-keys/context/types.ts b/features/remove-keys/remove-keys/context/types.ts index ebedc6af..ccf6d3d2 100644 --- a/features/remove-keys/remove-keys/context/types.ts +++ b/features/remove-keys/remove-keys/context/types.ts @@ -1,5 +1,5 @@ -import { KeyWithStatus, useNodeOperatorInfo } from 'shared/hooks'; -import { BondBalance, LoadingRecord, NodeOperatorId } from 'types'; +import { KeyWithStatus, NodeOperatorInfo } from '@lidofinance/lido-csm-sdk'; +import { BondBalance, NodeOperatorId } from '@lidofinance/lido-csm-sdk'; export type RemoveKeysFormInputType = { selection: { @@ -9,9 +9,10 @@ export type RemoveKeysFormInputType = { }; export type RemoveKeysFormNetworkData = { - nodeOperatorId?: NodeOperatorId; - keys?: KeyWithStatus[]; - info?: ReturnType['data']; - bond?: BondBalance; - loading: LoadingRecord<'keys' | 'bond' | 'info'>; + nodeOperatorId: NodeOperatorId; + curveId: bigint; + keys: KeyWithStatus[]; + info: NodeOperatorInfo; + bond: BondBalance; + removalFee: bigint; }; diff --git a/features/remove-keys/remove-keys/context/use-get-default-values.tsx b/features/remove-keys/remove-keys/context/use-get-default-values.tsx deleted file mode 100644 index b498a513..00000000 --- a/features/remove-keys/remove-keys/context/use-get-default-values.tsx +++ /dev/null @@ -1,22 +0,0 @@ -import { useCallback, useMemo } from 'react'; -import { useAwaiter } from 'shared/hooks'; -import { RemoveKeysFormNetworkData } from './types'; - -// TODO: select invalid key -export const useGetDefaultValues = ({ - loading: { isKeysLoading, isInfoLoading }, -}: RemoveKeysFormNetworkData) => { - const values = useMemo(() => { - if (isKeysLoading || isInfoLoading) return undefined; - return { - selection: { - start: 0, - count: 0, - }, - }; - }, [isInfoLoading, isKeysLoading]); - - const { awaiter } = useAwaiter(values); - - return useCallback(() => awaiter, [awaiter]); -}; diff --git a/features/remove-keys/remove-keys/context/use-remove-keys-form-network-data.tsx b/features/remove-keys/remove-keys/context/use-remove-keys-form-network-data.tsx deleted file mode 100644 index bfd4e1f5..00000000 --- a/features/remove-keys/remove-keys/context/use-remove-keys-form-network-data.tsx +++ /dev/null @@ -1,55 +0,0 @@ -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { - useKeysWithStatus, - useNodeOperatorBalance, - useNodeOperatorInfo, -} from 'shared/hooks'; -import { type RemoveKeysFormNetworkData } from './types'; - -export const useRemoveKeysFormNetworkData = (): [ - RemoveKeysFormNetworkData, - () => Promise, -] => { - const nodeOperatorId = useNodeOperatorId(); - const { - data: bond, - update: updateBond, - initialLoading: isBondLoading, - } = useNodeOperatorBalance(nodeOperatorId); - const { - data: info, - update: updateInfo, - initialLoading: isInfoLoading, - } = useNodeOperatorInfo(nodeOperatorId); - - const { - data: keys, - update: updateKeys, - initialLoading: isKeysLoading, - } = useKeysWithStatus(true); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateBond(), updateInfo(), updateKeys()]); - }, [updateBond, updateInfo, updateKeys]); - - const loading = useMemo( - () => ({ - isBondLoading, - isInfoLoading, - isKeysLoading, - }), - [isBondLoading, isInfoLoading, isKeysLoading], - ); - - return [ - { - nodeOperatorId, - bond, - keys, - info, - loading, - }, - revalidate, - ]; -}; diff --git a/features/remove-keys/remove-keys/context/use-remove-keys-submit.ts b/features/remove-keys/remove-keys/context/use-remove-keys-submit.ts index 18a10359..1a7817bf 100644 --- a/features/remove-keys/remove-keys/context/use-remove-keys-submit.ts +++ b/features/remove-keys/remove-keys/context/use-remove-keys-submit.ts @@ -1,93 +1,66 @@ +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; import { useCallback } from 'react'; -import { useCSModuleWeb3, useKeysCache } from 'shared/hooks'; -import { useSendTx } from 'shared/hooks/use-send-tx'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { useKeysCache } from 'shared/hooks'; import { handleTxError } from 'shared/transaction-modal'; -import invariant from 'tiny-invariant'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; import { useTxModalStagesRemoveKeys } from '../hooks/use-tx-modal-stages-remove-keys'; import { RemoveKeysFormInputType, RemoveKeysFormNetworkData } from './types'; -type RemoveKeysOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type MethodParams = { - nodeOperatorId: NodeOperatorId; - startIndex: number; - keysCount: number; -}; - -// this encapsulates eth/steth/wsteth flows -const useRemoveKeysTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (params: MethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - return { - tx: await CSModuleWeb3.populateTransaction.removeKeys( - params.nodeOperatorId, - params.startIndex, - params.keysCount, - ), - txName: 'removeKeys', - }; - }, - [CSModuleWeb3], - ); -}; - -export const useRemoveKeysSubmit = ({ - onConfirm, - onRetry, -}: RemoveKeysOptions) => { +export const useRemoveKeysSubmit: FormSubmitterHook< + RemoveKeysFormInputType, + RemoveKeysFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesRemoveKeys(); - const getTx = useRemoveKeysTx(); - const sendTx = useSendTx(); - const { removeCacheKeys } = useKeysCache(); + const { removeCachePubkeys } = useKeysCache(); return useCallback( async ( - { selection: { start, count } }: RemoveKeysFormInputType, - { nodeOperatorId, info, keys }: RemoveKeysFormNetworkData, - ): Promise => { - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); - invariant(keys, 'Keys are not defined'); - invariant( - info?.totalDepositedKeys !== undefined, - 'Offset is not defined', - ); - + { selection: { start, count } }, + { nodeOperatorId, info, keys }, + { onConfirm, onRetry }, + ) => { const startIndex = info.totalDepositedKeys + start; const keysCount = count; try { - txModalStages.sign({ keysCount }); - - const tx = await getTx({ - startIndex, - keysCount, + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ keysCount }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ keysCount }, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success({ keysCount }, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.keys.removeKeys({ nodeOperatorId, + startIndex: BigInt(startIndex), + keysCount: BigInt(keysCount), + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'RemoveKeys signing', - () => sendTx(tx), - ); - - txModalStages.pending({ keysCount }, txHash); - - await runWithTransactionLogger('RemoveKeys block confirmation', waitTx); - await onConfirm?.(); - txModalStages.success({ keysCount }, txHash); - - void removeCacheKeys( - keys.map(({ key }) => key).slice(start, start + count), + void removeCachePubkeys( + keys.map(({ pubkey }) => pubkey).slice(start, start + count), ); return true; @@ -95,6 +68,6 @@ export const useRemoveKeysSubmit = ({ return handleTxError(error, txModalStages, onRetry); } }, - [txModalStages, getTx, onConfirm, removeCacheKeys, sendTx, onRetry], + [csm.keys, removeCachePubkeys, txModalStages], ); }; diff --git a/features/remove-keys/remove-keys/context/use-remove-keys-validation.ts b/features/remove-keys/remove-keys/context/use-remove-keys-validation.ts index beb0b386..5bba6ef1 100644 --- a/features/remove-keys/remove-keys/context/use-remove-keys-validation.ts +++ b/features/remove-keys/remove-keys/context/use-remove-keys-validation.ts @@ -1,30 +1,21 @@ -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; import { - handleResolverValidationError, + useFormValidation, ValidationError, } from 'shared/hook-form/validation'; -import type { RemoveKeysFormInputType } from './types'; +import type { + RemoveKeysFormInputType, + RemoveKeysFormNetworkData, +} from './types'; export const useRemoveKeysValidation = () => { - return useCallback>(async (values) => { - try { - const { selection } = values; - - if (selection.count === 0) { - throw new ValidationError('selection', 'No keys selected'); - } - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError( - error, - 'RemoveKeysForm', - 'selection', - ); - } - }, []); + return useFormValidation( + 'selection', + async ({ selection }, _, validate) => { + await validate('selection', () => { + if (selection.count === 0) { + throw new ValidationError('selection', 'No keys selected'); + } + }); + }, + ); }; diff --git a/features/remove-keys/remove-keys/controls/amount-input.tsx b/features/remove-keys/remove-keys/controls/amount-input.tsx new file mode 100644 index 00000000..cc61d450 --- /dev/null +++ b/features/remove-keys/remove-keys/controls/amount-input.tsx @@ -0,0 +1,29 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { Text } from '@lidofinance/lido-ui'; +import { DisabledInputAmount, Stack } from 'shared/components'; +import { RemoveKeysFormInputType, useRemoveKeysFormData } from '../context'; +import { useWatch } from 'react-hook-form'; + +export const AmountInput = () => { + const { removalFee } = useRemoveKeysFormData(true); + + const { count } = useWatch({ + name: 'selection', + }); + + return ( + + + + Will be deducted from your bond balance + + + ); +}; diff --git a/features/remove-keys/remove-keys/controls/keys-selector.tsx b/features/remove-keys/remove-keys/controls/keys-selector.tsx index 4c8447b7..aaf0af24 100644 --- a/features/remove-keys/remove-keys/controls/keys-selector.tsx +++ b/features/remove-keys/remove-keys/controls/keys-selector.tsx @@ -1,15 +1,17 @@ import { FormTitle, Note } from 'shared/components'; +import { RemoveKeysSelectorHookForm } from 'shared/hook-form/controls'; import { useRemoveKeysFormData } from '../context'; -import { KeysSelectorHookForm } from 'shared/hook-form/controls'; export const KeysSelector = () => { - const { keys } = useRemoveKeysFormData(); + const { keys } = useRemoveKeysFormData(true); return ( <> Choose keys to remove - - Your choice has to be a sequential array + + {keys && keys?.length > 2 && ( + Your choice has to be a sequential array + )} ); }; diff --git a/features/remove-keys/remove-keys/controls/submit-button.tsx b/features/remove-keys/remove-keys/controls/submit-button.tsx index b8d6fa15..7607d34a 100644 --- a/features/remove-keys/remove-keys/controls/submit-button.tsx +++ b/features/remove-keys/remove-keys/controls/submit-button.tsx @@ -1,9 +1,5 @@ import { SubmitButtonHookForm } from 'shared/hook-form/controls'; export const SubmitButton = () => { - return ( - - Remove Keys - - ); + return Remove Keys; }; diff --git a/features/remove-keys/remove-keys/form-loading.tsx b/features/remove-keys/remove-keys/form-loading.tsx deleted file mode 100644 index 6373cca7..00000000 --- a/features/remove-keys/remove-keys/form-loading.tsx +++ /dev/null @@ -1,20 +0,0 @@ -import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { RemoveKeysFormInputType, useRemoveKeysFormData } from './context'; - -export const FormLoading: FC = ({ children }) => { - const { isLoading } = useFormState(); - const { loading, keys } = useRemoveKeysFormData(); - const isEmpty = !keys?.length; - - return ( - No keys available to remove} - emptyNote="Only keys that have not been deposited yet can be deleted. If a key has already been deposited, the only way to retrieve the bond is to exit the validator on the Consensus Layer (CL)." - > - {children} - - ); -}; diff --git a/features/remove-keys/remove-keys/hooks/use-bond-balance-after-remove-keys.ts b/features/remove-keys/remove-keys/hooks/use-bond-balance-after-remove-keys.ts new file mode 100644 index 00000000..bb2f3b55 --- /dev/null +++ b/features/remove-keys/remove-keys/hooks/use-bond-balance-after-remove-keys.ts @@ -0,0 +1,34 @@ +import { useQuery } from '@tanstack/react-query'; +import { useBondByKeysCount } from 'modules/web3'; +import invariant from 'tiny-invariant'; +import { useRemoveKeysFormData } from '../context'; +import { calcBondBalance } from '@lidofinance/lido-csm-sdk'; + +export const useBondBalanceAfterRemoveKeys = (count = 0) => { + const { info, bond, removalFee, curveId } = useRemoveKeysFormData(true); + + const nextKeysCount = info.totalAddedKeys - info.totalWithdrawnKeys - count; + + const { data: bondRequiredAfter } = useBondByKeysCount({ + keysCount: nextKeysCount, + curveId, + }); + + const bondAfter = bond.current - removalFee * BigInt(count); + + return useQuery({ + queryKey: [ + 'getBondBalanceAfterRemoveKeys', + { bondRequiredAfter, bondAfter }, + ], + queryFn: () => { + invariant(bondRequiredAfter !== undefined); + return calcBondBalance({ + current: bondAfter, + required: bondRequiredAfter, + locked: 0n, + }); + }, + enabled: bondRequiredAfter !== undefined, + }); +}; diff --git a/features/remove-keys/remove-keys/hooks/useBondBalanceAfterRemoveKeys.ts b/features/remove-keys/remove-keys/hooks/useBondBalanceAfterRemoveKeys.ts deleted file mode 100644 index 222dfced..00000000 --- a/features/remove-keys/remove-keys/hooks/useBondBalanceAfterRemoveKeys.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { useMemo } from 'react'; -import { - useExtendedBondBalance, - useMergeSwr, - useNodeOperatorCurveId, - useNodeOperatorFirstKeysBond, -} from 'shared/hooks'; -import { NodeOperatorId } from 'types'; -import { useRemoveKeysFormData } from '../context'; -import { useRemovalFeeByKeysCount } from './useRemovalFeeByKeysCount'; - -export const useBondBalanceAfterRemoveKeys = ( - nodeOperatorId?: NodeOperatorId, - count = 0, -) => { - const { info, bond } = useRemoveKeysFormData(); - - const nextKeysCount = useMemo(() => { - return info - ? info.totalAddedKeys - info.totalWithdrawnKeys - count - : undefined; - }, [count, info]); - - const swrCurveId = useNodeOperatorCurveId(nodeOperatorId); - const swrRequiredAfter = useNodeOperatorFirstKeysBond({ - keysCount: nextKeysCount, - curveId: swrCurveId.data, - }); - - const swrRemovalFee = useRemovalFeeByKeysCount(count); - const bondAfter = useMemo( - () => bond?.current.sub(swrRemovalFee.data || 0), - [bond, swrRemovalFee.data], - ); - const bondBalance = useExtendedBondBalance(swrRequiredAfter.data, bondAfter); - - return useMergeSwr( - [swrCurveId, swrRequiredAfter, swrRemovalFee], - bondBalance, - ); -}; diff --git a/features/remove-keys/remove-keys/hooks/useRemovalFeeByKeysCount.ts b/features/remove-keys/remove-keys/hooks/useRemovalFeeByKeysCount.ts deleted file mode 100644 index 8b74ff03..00000000 --- a/features/remove-keys/remove-keys/hooks/useRemovalFeeByKeysCount.ts +++ /dev/null @@ -1,9 +0,0 @@ -import { useCsmKeyRemovalFee, useMergeSwr } from 'shared/hooks'; -import { useMemo } from 'react'; - -export const useRemovalFeeByKeysCount = (count: number) => { - const swr = useCsmKeyRemovalFee(); - const data = useMemo(() => swr.data?.mul(count), [count, swr.data]); - - return useMergeSwr([swr], data); -}; diff --git a/features/remove-keys/remove-keys/remove-keys-form-info.tsx b/features/remove-keys/remove-keys/remove-keys-form-info.tsx index dd8edf9f..9f33deff 100644 --- a/features/remove-keys/remove-keys/remove-keys-form-info.tsx +++ b/features/remove-keys/remove-keys/remove-keys-form-info.tsx @@ -1,38 +1,32 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { DataTable, DataTableRow } from '@lidofinance/lido-ui'; -import { TOKENS } from 'consts/tokens'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; import { useWatch } from 'react-hook-form'; import { FormatToken } from 'shared/formatters'; import { RemoveKeysFormInputType } from './context'; -import { useBondBalanceAfterRemoveKeys } from './hooks/useBondBalanceAfterRemoveKeys'; -import { useRemovalFeeByKeysCount } from './hooks/useRemovalFeeByKeysCount'; +import { useBondBalanceAfterRemoveKeys } from './hooks/use-bond-balance-after-remove-keys'; export const RemoveKeysFormInfo = () => { const { count } = useWatch({ name: 'selection', }); - const nodeOperatorId = useNodeOperatorId(); - const { data: removalFee, initialLoading: isRemovalFeeLoading } = - useRemovalFeeByKeysCount(count); - const { data: balance, initialLoading: isBalanceLoading } = - useBondBalanceAfterRemoveKeys(nodeOperatorId, count); + const { data: balance, isPending: isBalanceLoading } = + useBondBalanceAfterRemoveKeys(count); return ( - {count} - + {count} - + ); diff --git a/features/remove-keys/remove-keys/remove-keys-form-loader.tsx b/features/remove-keys/remove-keys/remove-keys-form-loader.tsx new file mode 100644 index 00000000..fce5bc56 --- /dev/null +++ b/features/remove-keys/remove-keys/remove-keys-form-loader.tsx @@ -0,0 +1,17 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormLoader } from 'shared/hook-form/form-controller'; +import { useRemoveKeysFormData } from './context'; + +export const RemoveKeysFormLoader: FC = ({ children }) => { + const data = useRemoveKeysFormData(); + const isEmpty = !data.keys?.length; + + return ( + No keys available to remove} + emptyNote="Only keys that have not been deposited yet can be deleted. If a key has already been deposited, the only way to retrieve the bond is to exit the validator on the Consensus Layer (CL)." + > + {children} + + ); +}; diff --git a/features/remove-keys/remove-keys/remove-keys-form.tsx b/features/remove-keys/remove-keys/remove-keys-form.tsx index 80ca4df3..36b42908 100644 --- a/features/remove-keys/remove-keys/remove-keys-form.tsx +++ b/features/remove-keys/remove-keys/remove-keys-form.tsx @@ -1,24 +1,28 @@ import { FC, memo } from 'react'; -import { RemoveKeysFormProvider } from './context'; +import { FormBlock } from 'shared/components'; +import { Form } from 'shared/hook-form/form-controller'; +import { RemoveKeysDataProvider, RemoveKeysFormProvider } from './context'; +import { AmountInput } from './controls/amount-input'; import { KeysSelector } from './controls/keys-selector'; import { SubmitButton } from './controls/submit-button'; -import { FormLoading } from './form-loading'; import { RemoveKeysFormInfo } from './remove-keys-form-info'; -import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; +import { RemoveKeysFormLoader } from './remove-keys-form-loader'; export const RemoveKeysForm: FC = memo(() => { return ( - - - - - - - - - - - + + + + +
      + + + + + +
      +
      +
      +
      ); }); diff --git a/features/rewards-history/index.ts b/features/rewards-history/index.ts new file mode 100644 index 00000000..cf74749b --- /dev/null +++ b/features/rewards-history/index.ts @@ -0,0 +1,2 @@ +export * from './rewards-history-page'; +export * from './rewards-history'; diff --git a/features/rewards-history/rewards-history-page.tsx b/features/rewards-history/rewards-history-page.tsx new file mode 100644 index 00000000..9ca2c780 --- /dev/null +++ b/features/rewards-history/rewards-history-page.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; + +import { Layout } from 'shared/layout'; +import { BondPageSwitcher } from 'shared/navigate'; +import { RewardsHistory } from './rewards-history'; +import { Faq } from 'shared/components'; +import { FAQ_BOND } from 'faq'; + +export const RewardsHistoryPage: FC = () => ( + + + + + +); diff --git a/features/rewards-history/rewards-history-section/filters-and-export/filters-and-export.tsx b/features/rewards-history/rewards-history-section/filters-and-export/filters-and-export.tsx new file mode 100644 index 00000000..5ca16c8f --- /dev/null +++ b/features/rewards-history/rewards-history-section/filters-and-export/filters-and-export.tsx @@ -0,0 +1,31 @@ +import { ButtonIcon } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { FC, useCallback } from 'react'; +import { trackMatomoEvent } from 'utils'; +import { SectionWrapper } from './styles'; +import { useRewardsHistoryExport } from './use-rewards-history-export'; + +import { ReactComponent as DownloadIcon } from 'assets/icons/download.svg'; + +export const FiltersAndExport: FC = () => { + const { exportToCsv, isExporting } = useRewardsHistoryExport(); + + const handleExport = useCallback(() => { + trackMatomoEvent(MATOMO_CLICK_EVENTS_TYPES.rewardsHistoryExport); + void exportToCsv(); + }, [exportToCsv]); + + return ( + + } + size="xs" + variant="outlined" + onClick={handleExport} + loading={isExporting} + > + Export all to CSV + + + ); +}; diff --git a/features/rewards-history/rewards-history-section/filters-and-export/index.ts b/features/rewards-history/rewards-history-section/filters-and-export/index.ts new file mode 100644 index 00000000..039efd17 --- /dev/null +++ b/features/rewards-history/rewards-history-section/filters-and-export/index.ts @@ -0,0 +1 @@ +export * from './filters-and-export'; diff --git a/features/rewards-history/rewards-history-section/filters-and-export/styles.ts b/features/rewards-history/rewards-history-section/filters-and-export/styles.ts new file mode 100644 index 00000000..f6ea9a93 --- /dev/null +++ b/features/rewards-history/rewards-history-section/filters-and-export/styles.ts @@ -0,0 +1,13 @@ +import styled from 'styled-components'; + +export const SectionWrapper = styled.div` + display: flex; + align-items: center; + justify-content: flex-end; + gap: ${({ theme }) => theme.spaceMap.sm}px; + padding: ${({ theme }) => theme.spaceMap.md}px + ${({ theme }) => theme.spaceMap.xxl}px + calc(${({ theme }) => theme.spaceMap.md}px - 1px); + + border-bottom: 1px solid var(--lido-color-border); +`; diff --git a/features/rewards-history/rewards-history-section/filters-and-export/use-rewards-history-export.ts b/features/rewards-history/rewards-history-section/filters-and-export/use-rewards-history-export.ts new file mode 100644 index 00000000..d8a450c3 --- /dev/null +++ b/features/rewards-history/rewards-history-section/filters-and-export/use-rewards-history-export.ts @@ -0,0 +1,72 @@ +import { ValidatorRewardsEntity } from '@lidofinance/lido-csm-sdk'; +import { useNodeOperatorId } from 'modules/web3'; +import { useTable } from 'providers/table-provider'; +import { useState } from 'react'; +import { exportToCsv, formatDate, formatPercent } from 'utils'; + +const headers = { + indexInReport: 'Index in Report', + validatorIndex: 'Validator Index', + pubkey: 'Public Key', + slashed: 'Slashed', + performance: 'Performance', + threshold: 'Threshold', + fee: 'Fee', + receivedShares: 'Received Shares', + receivedRewards: 'Received Rewards', + startTimestamp: 'Start Timestamp', + endTimestamp: 'End Timestamp', + refSlot: 'Ref Slot', + blockNumber: 'Block Number', +}; + +type CsvRow = Record; + +const transformData = (data: ValidatorRewardsEntity[]): CsvRow[] => { + return data.map((record) => ({ + indexInReport: String(record.indexInReport), + validatorIndex: record.validatorIndex, + pubkey: record.pubkey || '', + slashed: String(record.slashed), + performance: formatPercent(record.performance), + threshold: formatPercent(record.threshold), + fee: formatPercent(record.fee), + receivedShares: String(record.receivedShares), + receivedRewards: String(record.receivedRewards), + startTimestamp: String(record.startTimestamp), + endTimestamp: String(record.endTimestamp), + refSlot: String(record.refSlot), + blockNumber: String(record.blockNumber), + })); +}; + +export const useRewardsHistoryExport = () => { + const nodeOperatorId = useNodeOperatorId(); + const { rawData } = useTable(); + const [isExporting, setIsExporting] = useState(false); + + const exportRewards = async () => { + try { + setIsExporting(true); + + const csvData = transformData(rawData); + const operator = + nodeOperatorId !== undefined ? `csm-${nodeOperatorId}` : ''; + const date = formatDate(Date.now(), 'yyyy-MM-dd'); + const filename = ['rewards-history', operator, date] + .filter(Boolean) + .join('-'); + + exportToCsv(csvData, headers, filename); + } catch (error) { + console.error('Failed to export rewards history:', error); + } finally { + setIsExporting(false); + } + }; + + return { + exportToCsv: exportRewards, + isExporting, + }; +}; diff --git a/features/rewards-history/rewards-history-section/index.ts b/features/rewards-history/rewards-history-section/index.ts new file mode 100644 index 00000000..d4edc82c --- /dev/null +++ b/features/rewards-history/rewards-history-section/index.ts @@ -0,0 +1 @@ +export * from './rewards-history-section'; diff --git a/features/rewards-history/rewards-history-section/performance.tsx b/features/rewards-history/rewards-history-section/performance.tsx new file mode 100644 index 00000000..5dcfad87 --- /dev/null +++ b/features/rewards-history/rewards-history-section/performance.tsx @@ -0,0 +1,14 @@ +import { ValidatorRewardsEntity } from '@lidofinance/lido-csm-sdk'; +import { FC } from 'react'; +import { formatPercent } from 'utils'; +import { PerformanceStyled } from './styles'; + +export const Performance: FC< + Pick +> = ({ performance, threshold, slashed }) => { + return ( + + {slashed ? 'Slashed' : formatPercent(performance)} + + ); +}; diff --git a/features/rewards-history/rewards-history-section/rewards-history-section.tsx b/features/rewards-history/rewards-history-section/rewards-history-section.tsx new file mode 100644 index 00000000..5f53be9d --- /dev/null +++ b/features/rewards-history/rewards-history-section/rewards-history-section.tsx @@ -0,0 +1,36 @@ +import { useNodeOperatorId, useOperatorRewardsHistory } from 'modules/web3'; +import { TablePagination, TableProvider } from 'providers/table-provider'; +import { FC } from 'react'; +import { Block, Stack, WhenLoaded } from 'shared/components'; +import { BondTableSwitcher } from 'shared/navigate'; +import { RewardsHistoryTable } from './rewards-history-table'; +import { sortFunctions } from './sort'; +import { FiltersAndExport } from './filters-and-export'; + +export const RewardsHistorySection: FC = () => { + const nodeOperatorId = useNodeOperatorId(); + const { data, isPending } = useOperatorRewardsHistory(nodeOperatorId); + + return ( + + + + + + + + + + + + + ); +}; diff --git a/features/rewards-history/rewards-history-section/rewards-history-table.tsx b/features/rewards-history/rewards-history-section/rewards-history-table.tsx new file mode 100644 index 00000000..6f79df11 --- /dev/null +++ b/features/rewards-history/rewards-history-section/rewards-history-table.tsx @@ -0,0 +1,73 @@ +import { TOKENS, ValidatorRewardsEntity } from '@lidofinance/lido-csm-sdk'; +import { useTable } from 'providers/table-provider'; +import { FC } from 'react'; +import { CopyLink, Date, Pubkey } from 'shared/components'; +import { FormatToken } from 'shared/formatters'; +import { formatPercent } from 'utils'; +import { Performance } from './performance'; +import { DatesWrapper, Sort, TableStyle } from './styles'; + +export const RewardsHistoryTable: FC = () => { + const { data } = useTable(); + + return ( + + + + + Date period + + + Key + + + Fee + + + Performance + + + Threshold + + + Rewards received + + + + + {data.map((record, index) => ( + + + + —{' '} + + + + + {record.pubkey ? ( + } + /> + ) : ( + record.validatorIndex + )} + + {formatPercent(record.fee)} + + + + {formatPercent(record.threshold)} + + + + + ))} + + + ); +}; diff --git a/features/rewards-history/rewards-history-section/sort.ts b/features/rewards-history/rewards-history-section/sort.ts new file mode 100644 index 00000000..ac95698a --- /dev/null +++ b/features/rewards-history/rewards-history-section/sort.ts @@ -0,0 +1,35 @@ +import { ValidatorRewardsEntity } from '@lidofinance/lido-csm-sdk'; +import { SortCriteria, SortFunctions } from 'providers/table-provider'; + +const sortByDate: SortCriteria = (item) => [ + item.startTimestamp, +]; + +const sortByPubkey: SortCriteria = (item) => [ + item.pubkey, + item.validatorIndex, +]; + +const sortByFee: SortCriteria = (item) => [item.fee]; + +const sortByPerformance: SortCriteria = (item) => [ + item.slashed ? 0 : 1, + item.performance, +]; + +const sortByThreshold: SortCriteria = (item) => [ + item.threshold, +]; + +const sortByRewards: SortCriteria = (item) => [ + item.receivedRewards, +]; + +export const sortFunctions: SortFunctions = { + startTimestamp: sortByDate, + pubkey: sortByPubkey, + fee: sortByFee, + performance: sortByPerformance, + threshold: sortByThreshold, + receivedRewards: sortByRewards, +}; diff --git a/features/rewards-history/rewards-history-section/styles.ts b/features/rewards-history/rewards-history-section/styles.ts new file mode 100644 index 00000000..903d0fd1 --- /dev/null +++ b/features/rewards-history/rewards-history-section/styles.ts @@ -0,0 +1,42 @@ +import { SortButton } from 'providers/table-provider'; +import { Table } from 'shared/components'; +import { PubkeyContainerStyle } from 'shared/components/address/styles'; +import styled, { css } from 'styled-components'; +import { MEDIA_QUERY_XXL } from 'styles'; + +export const TableStyle = styled(Table)` + grid-template-columns: 2fr 3fr 1fr 1fr 1fr 2fr; + + tr { + ${MEDIA_QUERY_XXL} { + padding-inline: 16px; + gap: 12px; + + ${PubkeyContainerStyle} { + font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; + } + } + } + + th:nth-child(n + 3):nth-child(-n + 6), + td:nth-child(n + 3):nth-child(-n + 6) { + justify-self: right; + text-align: right; + } +`; + +export const Sort = styled(SortButton).attrs({ variant: 'arrow' })``; + +export const DatesWrapper = styled.span` + white-space: nowrap; +`; + +export const PerformanceStyled = styled.span<{ $error?: boolean }>` + font-weight: 700; + + ${({ $error }) => + $error && + css` + color: var(--lido-color-error); + `} +`; diff --git a/features/rewards-history/rewards-history.tsx b/features/rewards-history/rewards-history.tsx new file mode 100644 index 00000000..cc60e028 --- /dev/null +++ b/features/rewards-history/rewards-history.tsx @@ -0,0 +1,13 @@ +import { ExtraWidth } from 'shared/components'; +import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; +import { RewardsHistorySection } from './rewards-history-section'; + +export const RewardsHistory = () => { + return ( + + + + + + ); +}; diff --git a/features/starter-pack/banner-operator-custom-addresses/banner-operator-custom-addresses.tsx b/features/starter-pack/banner-operator-custom-addresses/banner-operator-custom-addresses.tsx new file mode 100644 index 00000000..b7828b53 --- /dev/null +++ b/features/starter-pack/banner-operator-custom-addresses/banner-operator-custom-addresses.tsx @@ -0,0 +1,23 @@ +import { FC } from 'react'; +import { Banner } from 'shared/components'; +import { DescriptorId } from 'shared/node-operator'; +import { useOperatorCustomAddresses } from './use-operator-custom-addresses'; + +export const BannerOperatorCustomAddresses: FC = () => { + const [nodeOperatorId] = useOperatorCustomAddresses(); + + if (nodeOperatorId === undefined) { + return null; + } + + return ( + + To continue, connect to CSM UI with the address you specified as + Reward/Manager Address for or create + a new Node Operator using the currently connected address. + + ); +}; diff --git a/features/starter-pack/banner-operator-custom-addresses/index.ts b/features/starter-pack/banner-operator-custom-addresses/index.ts new file mode 100644 index 00000000..5465cb67 --- /dev/null +++ b/features/starter-pack/banner-operator-custom-addresses/index.ts @@ -0,0 +1,2 @@ +export * from './banner-operator-custom-addresses'; +export * from './use-operator-custom-addresses'; diff --git a/features/starter-pack/banner-operator-custom-addresses/use-operator-custom-addresses.ts b/features/starter-pack/banner-operator-custom-addresses/use-operator-custom-addresses.ts new file mode 100644 index 00000000..aafa5e86 --- /dev/null +++ b/features/starter-pack/banner-operator-custom-addresses/use-operator-custom-addresses.ts @@ -0,0 +1,10 @@ +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useSessionStorage } from 'shared/hooks'; + +export const useOperatorCustomAddresses = () => { + return useSessionStorage( + `operator-custom-address`, + undefined, + BigInt, + ); +}; diff --git a/features/starter-pack/consumed-banner/consumed-banner.tsx b/features/starter-pack/consumed-banner/consumed-banner.tsx deleted file mode 100644 index 53138eb6..00000000 --- a/features/starter-pack/consumed-banner/consumed-banner.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { FC } from 'react'; - -import { getExternalLinks } from 'consts/external-links'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { MatomoLink } from 'shared/components'; -import { BannerHeader, BlockStyled } from './styles'; - -const links = getExternalLinks(); - -export const ConsumedBanner: FC = () => ( - - - You have already joined CSM during Early Adoption period - -

      - You will be most welcome when the module is on the permissionless phase. -

      - - Learn more about Early Adoption. - -
      -); diff --git a/features/starter-pack/consumed-banner/index.ts b/features/starter-pack/consumed-banner/index.ts deleted file mode 100644 index 80d55dd6..00000000 --- a/features/starter-pack/consumed-banner/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './consumed-banner'; diff --git a/features/starter-pack/consumed-banner/styles.ts b/features/starter-pack/consumed-banner/styles.ts deleted file mode 100644 index baece9a9..00000000 --- a/features/starter-pack/consumed-banner/styles.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Block, ThemeName } from '@lidofinance/lido-ui'; -import styled from 'styled-components'; - -export const BannerHeader = styled.h3` - font-size: ${({ theme }) => theme.fontSizesMap.sm}px; - line-height: ${({ theme }) => theme.fontSizesMap.xl}px; - font-weight: bold; -`; - -export const BlockStyled = styled(Block)` - display: flex; - flex-direction: column; - gap: ${({ theme }) => theme.spaceMap.md}px; - padding-inline: 10%; // @style - - text-align: center; - color: var(--lido-color-text); - font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; - line-height: ${({ theme }) => theme.fontSizesMap.lg}px; - - background: ${({ theme }) => - theme.name === ThemeName.light ? '#d8e0ea' : '#676772'}; - - a { - align-self: center; - } -`; diff --git a/features/starter-pack/create-operator-button.tsx b/features/starter-pack/create-operator-button.tsx new file mode 100644 index 00000000..271f26f1 --- /dev/null +++ b/features/starter-pack/create-operator-button.tsx @@ -0,0 +1,31 @@ +import { Button } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { PATH } from 'consts/urls'; +import { FC } from 'react'; +import { LocalLink } from 'shared/navigate'; +import { + useOperatorTypeModal, + useShouldShowTypeModal, +} from './operator-type-modal'; + +export const CreateOperatorButton: FC = () => { + const shouldShowModal = useShouldShowTypeModal(); + const { openModal } = useOperatorTypeModal(); + + return ( + <> + {shouldShowModal ? ( + + ) : ( + + + + )} + + ); +}; diff --git a/features/starter-pack/invites-redirect/index.ts b/features/starter-pack/invites-redirect/index.ts new file mode 100644 index 00000000..c9c75d6e --- /dev/null +++ b/features/starter-pack/invites-redirect/index.ts @@ -0,0 +1 @@ +export * from './invites-redirect'; diff --git a/features/starter-pack/invites-redirect/invites-redirect.tsx b/features/starter-pack/invites-redirect/invites-redirect.tsx new file mode 100644 index 00000000..1c412d2a --- /dev/null +++ b/features/starter-pack/invites-redirect/invites-redirect.tsx @@ -0,0 +1,23 @@ +import { PATH } from 'consts/urls'; +import { useInvites } from 'modules/web3'; +import { FC, useEffect } from 'react'; +import { useSessionStorage } from 'shared/hooks'; +import { useNavigate } from 'shared/navigate'; + +export const InvitesRedirect: FC = () => { + const { data: invites } = useInvites(); + const navigate = useNavigate(); + const [skipRedirect, setSkipRedirect] = useSessionStorage( + 'skip-invites-redirect', + false, + ); + + useEffect(() => { + if (invites?.length && !skipRedirect) { + setSkipRedirect(true); + void navigate(PATH.ROLES_INBOX); + } + }, [invites?.length, navigate, setSkipRedirect, skipRedirect]); + + return null; +}; diff --git a/features/starter-pack/not-eligible-banner/index.ts b/features/starter-pack/not-eligible-banner/index.ts deleted file mode 100644 index 91ff72cb..00000000 --- a/features/starter-pack/not-eligible-banner/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './not-eligible-banner'; diff --git a/features/starter-pack/not-eligible-banner/not-eligible-banner.tsx b/features/starter-pack/not-eligible-banner/not-eligible-banner.tsx deleted file mode 100644 index d18711b6..00000000 --- a/features/starter-pack/not-eligible-banner/not-eligible-banner.tsx +++ /dev/null @@ -1,25 +0,0 @@ -import { FC } from 'react'; - -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { MatomoLink } from 'shared/components'; -import { BannerHeader, BlockStyled } from './styles'; -import { getExternalLinks } from 'consts/external-links'; - -const links = getExternalLinks(); - -export const NotEligibleBanner: FC = () => ( - - - You are not eligible to join CSM during Early Adoption period - -

      - You will be most welcome when the module is on the permissionless phase. -

      - - Learn more about Early Adoption. - -
      -); diff --git a/features/starter-pack/not-eligible-banner/styles.ts b/features/starter-pack/not-eligible-banner/styles.ts deleted file mode 100644 index baece9a9..00000000 --- a/features/starter-pack/not-eligible-banner/styles.ts +++ /dev/null @@ -1,27 +0,0 @@ -import { Block, ThemeName } from '@lidofinance/lido-ui'; -import styled from 'styled-components'; - -export const BannerHeader = styled.h3` - font-size: ${({ theme }) => theme.fontSizesMap.sm}px; - line-height: ${({ theme }) => theme.fontSizesMap.xl}px; - font-weight: bold; -`; - -export const BlockStyled = styled(Block)` - display: flex; - flex-direction: column; - gap: ${({ theme }) => theme.spaceMap.md}px; - padding-inline: 10%; // @style - - text-align: center; - color: var(--lido-color-text); - font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; - line-height: ${({ theme }) => theme.fontSizesMap.lg}px; - - background: ${({ theme }) => - theme.name === ThemeName.light ? '#d8e0ea' : '#676772'}; - - a { - align-self: center; - } -`; diff --git a/features/starter-pack/operator-type-modal/index.ts b/features/starter-pack/operator-type-modal/index.ts new file mode 100644 index 00000000..414b487a --- /dev/null +++ b/features/starter-pack/operator-type-modal/index.ts @@ -0,0 +1,2 @@ +export * from './operator-type-modal'; +export * from './use-should-show-type-modal'; diff --git a/features/starter-pack/operator-type-modal/operator-type-modal.tsx b/features/starter-pack/operator-type-modal/operator-type-modal.tsx new file mode 100644 index 00000000..ed74f76d --- /dev/null +++ b/features/starter-pack/operator-type-modal/operator-type-modal.tsx @@ -0,0 +1,97 @@ +import { + OPERATOR_TYPE, + OPERATOR_TYPE_CURVE_ID, +} from '@lidofinance/lido-csm-sdk'; +import { Button, Divider, Text } from '@lidofinance/lido-ui'; +import { OPERATOR_TYPES_LINK } from 'consts/external-links'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { PATH } from 'consts/urls'; +import { getUseModal, ModalComponentType } from 'providers/modal-provider'; +import { MatomoLink, Stack } from 'shared/components'; +import { LocalLink } from 'shared/navigate'; +import { OptionCard, StackWrap, StyledModal } from './styles'; +import { Parameters } from './parameters'; + +export const OperatorTypeModal: ModalComponentType = ({ open, onClose }) => { + return ( + + + Choose operator type + + + Check out details about{' '} + + operator types and parameters + {' '} + to learn more. + + + } + > + + + + + Default + + + The simplest way to start validating in CSM. Upload keys under the + general parameters without any permission or verification.At any + point in the future, you may apply to become an Identified + Community Staker to access more favorable parameters + + + + + + + + + + + + + + + Identified Community Staker + + + Obtain enhanced validation parameters by becoming recognized as an + independent Community Staker. Please note that the verification + process takes time and requires the submission of specific + supporting proofs + + + + + + + + + + + + + ); +}; + +export const useOperatorTypeModal = getUseModal(OperatorTypeModal); diff --git a/features/starter-pack/operator-type-modal/parameters.tsx b/features/starter-pack/operator-type-modal/parameters.tsx new file mode 100644 index 00000000..e2c42642 --- /dev/null +++ b/features/starter-pack/operator-type-modal/parameters.tsx @@ -0,0 +1,29 @@ +import { Text } from '@lidofinance/lido-ui'; +import { useCurveParameters } from 'modules/web3'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { PARAMETERS } from 'shared/components/parameters-list/parameters'; +import { ParametersValue } from 'shared/components/parameters-list/parameters-value'; + +export const Parameters: FC<{ curveId: bigint }> = ({ curveId }) => { + const { data: parameters } = useCurveParameters(curveId); + + return ( + + + Parameters + + {PARAMETERS.slice(0, 2).map(({ title: paramTitle, render }) => { + const values = render(parameters); + return ( + + + {paramTitle}: + + + + ); + })} + + ); +}; diff --git a/features/starter-pack/operator-type-modal/styles.tsx b/features/starter-pack/operator-type-modal/styles.tsx new file mode 100644 index 00000000..c6db451f --- /dev/null +++ b/features/starter-pack/operator-type-modal/styles.tsx @@ -0,0 +1,52 @@ +import { Modal } from '@lidofinance/lido-ui'; +import { OPERATOR_TYPE } from '@lidofinance/lido-csm-sdk'; +import { StackStyle } from 'shared/components'; +import styled from 'styled-components'; +import { CURVE_VARIANTS } from 'shared/node-operator/curve-badge/styles'; + +export const StyledModal = styled(Modal)` + & > div { + width: 640px; + } +`; + +export const StackWrap = styled(StackStyle).attrs({ $wrap: true })` + & > * { + min-width: 220px; + } +`; + +export const OptionCard = styled(StackStyle).attrs({ + $direction: 'column', + $justify: 'space-between', +})<{ + $variant?: OPERATOR_TYPE; +}>` + --border-width: 2px; + padding: 16px; + border-radius: 10px; + border: var(--border-width) solid transparent; + background-color: rgba(var(--lido-rgb-background), 1); + background-clip: padding-box; + position: relative; + z-index: initial; + transition: all 0.2s ease; + + &:before { + content: ''; + position: absolute; + top: 0; + right: 0; + bottom: 0; + left: 0; + z-index: -1; + margin: calc(-1 * var(--border-width)); + border-radius: inherit; + ${({ $variant }) => ($variant ? CURVE_VARIANTS[$variant] : '')} + transition: all 0.2s ease; + } + + &:hover { + background-color: rgba(var(--lido-rgb-background), 0.7); + } +`; diff --git a/features/starter-pack/operator-type-modal/use-should-show-type-modal.ts b/features/starter-pack/operator-type-modal/use-should-show-type-modal.ts new file mode 100644 index 00000000..9e832b61 --- /dev/null +++ b/features/starter-pack/operator-type-modal/use-should-show-type-modal.ts @@ -0,0 +1,14 @@ +import { useFeatureFlags } from 'config/feature-flags'; +import { ICS_APPLY_FORM } from 'config/feature-flags/types'; +import { useDappStatus, useIcsProof } from 'modules/web3'; + +export const useShouldShowTypeModal = () => { + const { address } = useDappStatus(); + const { data: proof } = useIcsProof(address); + const featureFlags = useFeatureFlags(); + + const hasClaimableProof = Boolean(proof?.proof && !proof.isConsumed); + const isIcsEnabled = Boolean(featureFlags?.[ICS_APPLY_FORM]); + + return !hasClaimableProof && isIcsEnabled; +}; diff --git a/features/starter-pack/paused-banner/paused-banner.tsx b/features/starter-pack/paused-banner/paused-banner.tsx index ebfa1e5c..bb907fed 100644 --- a/features/starter-pack/paused-banner/paused-banner.tsx +++ b/features/starter-pack/paused-banner/paused-banner.tsx @@ -1,17 +1,8 @@ import { FC } from 'react'; import { BannerHeader, BlockStyled } from './styles'; -import { getConfig } from 'config'; -import { CHAINS } from 'consts/chains'; -import { HoleskyBanner } from 'features/welcome/holesky-banner'; - -const { defaultChain } = getConfig(); export const PausedBanner: FC = () => { - if (defaultChain === CHAINS.Holesky) { - return ; - } - return ( CSM is paused diff --git a/features/starter-pack/stacter-pack-section/required-bond-amount.tsx b/features/starter-pack/stacter-pack-section/required-bond-amount.tsx deleted file mode 100644 index 85b897e7..00000000 --- a/features/starter-pack/stacter-pack-section/required-bond-amount.tsx +++ /dev/null @@ -1,35 +0,0 @@ -import { Box, InlineLoader } from '@lidofinance/lido-ui'; -import { getConfig } from 'config'; -import { CHAINS } from 'consts/chains'; -import { FC } from 'react'; -import { FormatToken } from 'shared/formatters'; -import { useCsmCurveId, useCsmEarlyAdoption, useCurveInfo } from 'shared/hooks'; - -const { defaultChain } = getConfig(); - -export const RequiredBondAmount: FC = () => { - const isMainnet = defaultChain === CHAINS.Mainnet; - const { data: ea } = useCsmEarlyAdoption(); - const { data: curveId, initialLoading: curveLoading } = useCsmCurveId( - !!ea?.proof || true, - ); - const { data: curveInfo, initialLoading: curveInfoLoading } = - useCurveInfo(curveId); - const amount = curveInfo?.points[0]; - - return ( - <> - {curveLoading || curveInfoLoading ? ( - - - - ) : ( - - )} - - ); -}; diff --git a/features/starter-pack/stacter-pack-section/starter-pack-section.tsx b/features/starter-pack/stacter-pack-section/starter-pack-section.tsx index 16d6ffa1..a3e07f57 100644 --- a/features/starter-pack/stacter-pack-section/starter-pack-section.tsx +++ b/features/starter-pack/stacter-pack-section/starter-pack-section.tsx @@ -1,24 +1,25 @@ import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { FC, PropsWithChildren } from 'react'; -import { MatomoLink } from 'shared/components'; +import { FaqBondAmount, MatomoLink } from 'shared/components'; import { Partners } from './partners'; import { Step } from './step'; import { BlockStyled, Heading, Steps } from './styles'; -import { RequiredBondAmount } from './required-bond-amount'; import { ABOUT_DEPOSIT_DATA_LINK, HOW_TO_GENERATE_DEPOSIT_DATA_LINK, PREPARE_HARDWARE_LINK, + LIDO_OPERATOR_PORTAL_BASE, + LIDO_OPERATOR_PORTAL_BONDS_INFO, } from 'consts/external-links'; export const StarterPackSection: FC = ({ children }) => ( - +

      CSM node operator starter pack

      Make sure you’ve completed all the basic steps before joining the{' '} Community Staking Module @@ -27,11 +28,11 @@ export const StarterPackSection: FC = ({ children }) => ( - (stETH / wstETH equivalent) is required for the - first validator + (stETH / wstETH equivalent) is required for the first + validator
      Learn more diff --git a/features/starter-pack/starter-pack-page.tsx b/features/starter-pack/starter-pack-page.tsx index 67ebd879..3ab198a6 100644 --- a/features/starter-pack/starter-pack-page.tsx +++ b/features/starter-pack/starter-pack-page.tsx @@ -1,16 +1,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; +import { InvitesRedirect } from './invites-redirect'; import { StarterPack } from './starter-pack'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_MAIN } from 'faq'; export const StarterPackPage: FC = () => { return ( - + + + ); }; diff --git a/features/starter-pack/starter-pack.tsx b/features/starter-pack/starter-pack.tsx index 0649e5dd..7003acc3 100644 --- a/features/starter-pack/starter-pack.tsx +++ b/features/starter-pack/starter-pack.tsx @@ -1,52 +1,29 @@ -import { Button } from '@lidofinance/lido-ui'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { PATH } from 'consts/urls'; import { TryCSM } from 'features/welcome/try-csm'; -import Link from 'next/link'; -import { FC, useCallback } from 'react'; -import { Faq } from 'shared/components'; -import { useCsmEarlyAdoption } from 'shared/hooks'; -import { useCsmPaused, useCsmPublicRelease } from 'shared/hooks/useCsmStatus'; -import { trackMatomoEvent } from 'utils'; -import { ConsumedBanner } from './consumed-banner'; -import { NotEligibleBanner } from './not-eligible-banner/not-eligible-banner'; +import { useCsmStatus } from 'modules/web3'; +import { FC } from 'react'; +import { BannerOperatorCustomAddresses } from './banner-operator-custom-addresses'; +import { CreateOperatorButton } from './create-operator-button'; import { PausedBanner } from './paused-banner'; import { StarterPackSection } from './stacter-pack-section'; export const StarterPack: FC = () => { - const { data: paused } = useCsmPaused(); - const { data: isPublicRelease } = useCsmPublicRelease(); - const { data: ea } = useCsmEarlyAdoption(); - - const handleClick = useCallback(() => { - trackMatomoEvent(MATOMO_CLICK_EVENTS_TYPES.starterPackCreateNodeOperator); - }, []); + const { data: status } = useCsmStatus(); let content = ( - - - + ); - if (!isPublicRelease && ea?.consumed) { - content = ; - } - - if (!isPublicRelease && !ea?.proof) { - content = ; - } - - if (paused?.isPaused || paused?.isAccountingPaused) { + if (status?.isPaused) { content = ; } return ( <> + {content} - ); }; diff --git a/features/stealing/locked-section/locked-section.tsx b/features/stealing/locked-section/locked-section.tsx index e73f1f1a..301333c5 100644 --- a/features/stealing/locked-section/locked-section.tsx +++ b/features/stealing/locked-section/locked-section.tsx @@ -1,11 +1,11 @@ import { Block } from '@lidofinance/lido-ui'; import { FC } from 'react'; import { WhenLoaded } from 'shared/components'; -import { useNodeOperatorsWithLockedBond } from 'shared/hooks'; import { LockedTable } from './locked-table'; +import { useOperatorsWithLockedBond } from 'modules/web3'; export const LockedSection: FC = () => { - const { data, initialLoading: loading } = useNodeOperatorsWithLockedBond(); + const { data, isPending: loading } = useOperatorsWithLockedBond(); return ( diff --git a/features/stealing/locked-section/locked-table.tsx b/features/stealing/locked-section/locked-table.tsx index 07ff258d..20e609b1 100644 --- a/features/stealing/locked-section/locked-table.tsx +++ b/features/stealing/locked-section/locked-table.tsx @@ -1,13 +1,12 @@ import { Tbody, Td, Text, Th, Thead, Tr } from '@lidofinance/lido-ui'; -import { TOKENS } from 'consts/tokens'; import { FC } from 'react'; import { Stack } from 'shared/components'; import { FormatToken } from 'shared/formatters'; -import { LockedOperator } from 'shared/hooks'; import { TableStyle } from './styles'; +import { OperatorWithLockedBond, TOKENS } from '@lidofinance/lido-csm-sdk'; type Props = { - data?: LockedOperator[]; + data?: OperatorWithLockedBond[]; offset?: number; }; @@ -21,15 +20,15 @@ export const LockedTable: FC = ({ data, offset = 0 }) => ( - {data?.map(([id, amount], index) => ( + {data?.map(({ nodeOperatorId, locked }, index) => ( - {id} + {nodeOperatorId.toString()} - + ))} diff --git a/features/stealing/locked-section/styles.tsx b/features/stealing/locked-section/styles.tsx index c2fa66e8..7652a44f 100644 --- a/features/stealing/locked-section/styles.tsx +++ b/features/stealing/locked-section/styles.tsx @@ -4,8 +4,8 @@ import styled from 'styled-components'; export const TableStyle = styled(Table)` margin: -32px -32px; - thead tr::before, - thead tr::after, + thead tr:before, + thead tr:after, th { border-top: none; } diff --git a/features/stealing/stealing-cancel-form/context/index.ts b/features/stealing/stealing-cancel-form/context/index.ts index ca29f3cc..8e35ec9b 100644 --- a/features/stealing/stealing-cancel-form/context/index.ts +++ b/features/stealing/stealing-cancel-form/context/index.ts @@ -1,2 +1,3 @@ export * from './stealing-cancel-form-provider'; +export * from './stealing-cancel-data-provider'; export * from './types'; diff --git a/features/stealing/stealing-cancel-form/context/stealing-cancel-data-provider.tsx b/features/stealing/stealing-cancel-form/context/stealing-cancel-data-provider.tsx new file mode 100644 index 00000000..4b5c9335 --- /dev/null +++ b/features/stealing/stealing-cancel-form/context/stealing-cancel-data-provider.tsx @@ -0,0 +1,57 @@ +import { + KEY_OPERATOR_BALANCE, + useEthereumBalance, + useOperatorsCount, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type StealingCancelFormNetworkData } from './types'; + +const useStealingCancelFormNetworkData: NetworkData< + StealingCancelFormNetworkData +> = () => { + const ethBalanceQuery = useEthereumBalance(); + + const ethBalance = ethBalanceQuery.data; + const isEthBalanceLoading = ethBalanceQuery.isPending; + + const { data: nodeOperatorsCount, isPending: isNodeOperatorsCountLoading } = + useOperatorsCount(); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ethBalanceQuery.queryKey, KEY_OPERATOR_BALANCE]); + }, [invalidate, ethBalanceQuery.queryKey]); + + const isPending = isEthBalanceLoading || isNodeOperatorsCountLoading; + + return { + data: { + ethBalance, + nodeOperatorsCount, + } as StealingCancelFormNetworkData, + isPending, + revalidate, + }; +}; + +export const useStealingCancelFormData = + useFormData; + +export const StealingCancelDataProvider: FC = ({ + children, +}) => { + const networkData = useStealingCancelFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/stealing/stealing-cancel-form/context/stealing-cancel-form-provider.tsx b/features/stealing/stealing-cancel-form/context/stealing-cancel-form-provider.tsx index b392eac3..df7e0424 100644 --- a/features/stealing/stealing-cancel-form/context/stealing-cancel-form-provider.tsx +++ b/features/stealing/stealing-cancel-form/context/stealing-cancel-form-provider.tsx @@ -1,66 +1,32 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, -} from 'shared/hook-form/form-controller'; -import { - StealingCancelFormNetworkData, - type StealingCancelFormInputType, -} from './types'; -import { useStealingCancelFormNetworkData } from './use-stealing-cancel-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { StealingCancelUpdater } from './stealing-cancel-updater'; +import { type StealingCancelFormInputType } from './types'; import { useStealingCancelSubmit } from './use-stealing-cancel-submit'; import { useStealingCancelValidation } from './use-stealing-cancel-validation'; -import { useFormMaxAmount } from './use-form-max-amount'; - -export const useStealingCancelFormData = - useFormData; export const StealingCancelFormProvider: FC = ({ children, }) => { - const [networkData, revalidate] = useStealingCancelFormNetworkData(); - const validationResolver = useStealingCancelValidation(networkData); + const resolver = useStealingCancelValidation(); - // TODO: validate (max amount) const formObject = useForm({ defaultValues: { amount: undefined, }, - resolver: validationResolver, + resolver, mode: 'onChange', }); - useFormMaxAmount(formObject); - - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { stealingCancel } = useStealingCancelSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - StealingCancelFormInputType, - StealingCancelFormNetworkData - > = useMemo( - () => ({ - onSubmit: stealingCancel, - retryEvent, - }), - [stealingCancel, retryEvent], - ); + const submitter = useStealingCancelSubmit(); return ( - - - {children} - - + + + {children} + ); }; diff --git a/features/stealing/stealing-cancel-form/context/stealing-cancel-updater.tsx b/features/stealing/stealing-cancel-form/context/stealing-cancel-updater.tsx new file mode 100644 index 00000000..48c33959 --- /dev/null +++ b/features/stealing/stealing-cancel-form/context/stealing-cancel-updater.tsx @@ -0,0 +1,32 @@ +import { useOperatorBalance } from 'modules/web3'; +import { FC, useEffect } from 'react'; +import { useFormContext, useWatch } from 'react-hook-form'; +import { StealingCancelFormInputType } from './types'; + +export const StealingCancelUpdater: FC = () => { + const [nodeOperatorId] = useWatch< + StealingCancelFormInputType, + ['nodeOperatorId'] + >({ name: ['nodeOperatorId'] }); + + const { trigger, setValue } = useFormContext(); + + const { data: maxAmount } = useOperatorBalance( + nodeOperatorId, + (data) => data.locked, + ); + + useEffect(() => { + void trigger('maxAmount'); + // trigger is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [nodeOperatorId]); + + useEffect(() => { + setValue('maxAmount', maxAmount, { shouldValidate: true }); + // setValue is stable ref and shouldn't be in deps + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [maxAmount]); + + return null; +}; diff --git a/features/stealing/stealing-cancel-form/context/types.ts b/features/stealing/stealing-cancel-form/context/types.ts index 124015fd..dc2c69b8 100644 --- a/features/stealing/stealing-cancel-form/context/types.ts +++ b/features/stealing/stealing-cancel-form/context/types.ts @@ -1,14 +1,12 @@ -import { BigNumber } from 'ethers'; -import { LoadingRecord, NodeOperatorId } from 'types'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; export type StealingCancelFormInputType = { - amount?: BigNumber; + amount?: bigint; nodeOperatorId?: NodeOperatorId; - maxAmount?: BigNumber; + maxAmount?: bigint; }; export type StealingCancelFormNetworkData = { - etherBalance?: BigNumber; - nodeOperatorsCount?: BigNumber; - loading: LoadingRecord<'etherBalance' | 'nodeOperatorsCount'>; + ethBalance: bigint; + nodeOperatorsCount: bigint; }; diff --git a/features/stealing/stealing-cancel-form/context/use-form-max-amount.ts b/features/stealing/stealing-cancel-form/context/use-form-max-amount.ts deleted file mode 100644 index 26eb65e9..00000000 --- a/features/stealing/stealing-cancel-form/context/use-form-max-amount.ts +++ /dev/null @@ -1,22 +0,0 @@ -import { useEffect } from 'react'; -import { UseFormReturn } from 'react-hook-form'; -import { useNodeOperatorLockAmount } from 'shared/hooks'; -import { StealingCancelFormInputType } from './types'; - -export const useFormMaxAmount = ({ - watch, - setValue, - trigger, -}: UseFormReturn) => { - const nodeOperatorId = watch('nodeOperatorId'); - - const { data: maxAmount } = useNodeOperatorLockAmount(nodeOperatorId); - - useEffect(() => { - void trigger('maxAmount'); - }, [nodeOperatorId, trigger]); - - useEffect(() => { - setValue('maxAmount', maxAmount, { shouldValidate: true }); - }, [maxAmount, setValue]); -}; diff --git a/features/stealing/stealing-cancel-form/context/use-stealing-cancel-form-network-data.tsx b/features/stealing/stealing-cancel-form/context/use-stealing-cancel-form-network-data.tsx deleted file mode 100644 index bf3a88a5..00000000 --- a/features/stealing/stealing-cancel-form/context/use-stealing-cancel-form-network-data.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useEthereumBalance } from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; -import { useCallback, useMemo } from 'react'; -import { useNodeOperatorsCount } from 'shared/hooks'; -import { type StealingCancelFormNetworkData } from './types'; - -export const useStealingCancelFormNetworkData = (): [ - StealingCancelFormNetworkData, - () => Promise, -] => { - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - - const { - data: nodeOperatorsCount, - initialLoading: isNodeOperatorsCountLoading, - } = useNodeOperatorsCount(); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateEtherBalance()]); - }, [updateEtherBalance]); - - const loading = useMemo( - () => ({ - isEtherBalanceLoading, - isNodeOperatorsCountLoading, - }), - [isEtherBalanceLoading, isNodeOperatorsCountLoading], - ); - - return [ - { - etherBalance, - nodeOperatorsCount, - loading, - }, - revalidate, - ]; -}; diff --git a/features/stealing/stealing-cancel-form/context/use-stealing-cancel-submit.ts b/features/stealing/stealing-cancel-form/context/use-stealing-cancel-submit.ts index ef0f1577..27e3c8e8 100644 --- a/features/stealing/stealing-cancel-form/context/use-stealing-cancel-submit.ts +++ b/features/stealing/stealing-cancel-form/context/use-stealing-cancel-submit.ts @@ -1,93 +1,66 @@ -import { BigNumber } from 'ethers'; +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; - -import { useCSModuleWeb3, useSendTx } from 'shared/hooks'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; -import { StealingCancelFormInputType } from '.'; import { useTxModalStagesStealingCancel } from '../hooks/use-tx-modal-stages-stealing-cancel'; +import { + StealingCancelFormInputType, + StealingCancelFormNetworkData, +} from './types'; +import invariant from 'tiny-invariant'; -type UseStealingCancelOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type StealingCancelMethodParams = { - nodeOperatorId: NodeOperatorId; - amount: BigNumber; -}; - -const useStealingCancelTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (params: StealingCancelMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - return { - tx: await CSModuleWeb3.populateTransaction.cancelELRewardsStealingPenalty( - params.nodeOperatorId, - params.amount, - ), - txName: 'cancelELRewardsStealingPenalty', - }; - }, - [CSModuleWeb3], - ); -}; - -export const useStealingCancelSubmit = ({ - onConfirm, - onRetry, -}: UseStealingCancelOptions) => { +export const useStealingCancelSubmit: FormSubmitterHook< + StealingCancelFormInputType, + StealingCancelFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesStealingCancel(); - const getTx = useStealingCancelTx(); - const sendTx = useSendTx(); - - const stealingCancel = useCallback( - async ({ - amount, - nodeOperatorId, - }: StealingCancelFormInputType): Promise => { - invariant(amount, 'BondAmount is not defined'); - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); + return useCallback( + async ({ amount, nodeOperatorId }, _data, { onConfirm, onRetry }) => { + invariant(amount !== undefined, 'Amount is not defined'); + invariant(nodeOperatorId !== undefined, 'NodeOperatorId is not defined'); try { - txModalStages.sign({ amount, nodeOperatorId }); - - const tx = await getTx({ + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ amount, nodeOperatorId }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ amount, nodeOperatorId }, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success({ amount, nodeOperatorId }, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.stealing.cancel({ nodeOperatorId, amount, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'StealingCancel signing', - () => sendTx(tx), - ); - - txModalStages.pending({ amount, nodeOperatorId }, txHash); - - await runWithTransactionLogger( - 'StealingCancel block confirmation', - waitTx, - ); - await onConfirm?.(); - txModalStages.success({ amount, nodeOperatorId }, txHash); - return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [getTx, txModalStages, onConfirm, sendTx, onRetry], + [csm.stealing, txModalStages], ); - - return { - stealingCancel, - }; }; diff --git a/features/stealing/stealing-cancel-form/context/use-stealing-cancel-validation.ts b/features/stealing/stealing-cancel-form/context/use-stealing-cancel-validation.ts index afcf7487..4cc50d7b 100644 --- a/features/stealing/stealing-cancel-form/context/use-stealing-cancel-validation.ts +++ b/features/stealing/stealing-cancel-form/context/use-stealing-cancel-validation.ts @@ -1,69 +1,47 @@ -import { TOKENS } from 'consts/tokens'; -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { - handleResolverValidationError, - validateBignumberMax, + useFormValidation, + validateBigintMax, validateEtherAmount, validateNodeOperatorId, } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; -import invariant from 'tiny-invariant'; +import { getTokenDisplayName } from 'utils'; +import { formatEther } from 'viem'; import type { StealingCancelFormInputType, StealingCancelFormNetworkData, } from './types'; -import { getTokenDisplayName } from 'utils'; -import { formatEther } from '@ethersproject/units'; -import { FormatToken } from 'shared/formatters'; - -export const useStealingCancelValidation = ( - networkData: StealingCancelFormNetworkData, -) => { - const dataPromise = useAwaitNetworkData(networkData); - return useCallback>( - async (values, _, options) => { - try { - const { amount, nodeOperatorId, maxAmount } = values; - - const { nodeOperatorsCount, etherBalance } = await dataPromise; +export const useStealingCancelValidation = () => { + return useFormValidation< + StealingCancelFormInputType, + StealingCancelFormNetworkData + >( + 'amount', + async ( + { amount, nodeOperatorId, maxAmount }, + { nodeOperatorsCount }, + validate, + ) => { + await validate('nodeOperatorId', () => { + validateNodeOperatorId( + 'nodeOperatorId', + nodeOperatorId, + nodeOperatorsCount, + ); + }); - invariant(etherBalance); - invariant(nodeOperatorsCount); + await validate('amount', () => { + validateEtherAmount('amount', amount, TOKENS.eth); - if (options.names?.includes('nodeOperatorId')) - validateNodeOperatorId( - 'nodeOperatorId', - nodeOperatorId, - nodeOperatorsCount, + if (amount && maxAmount) + validateBigintMax( + 'amount', + amount, + maxAmount, + `Entered amount exceeds locked bond of ${formatEther(maxAmount)} ${getTokenDisplayName(TOKENS.eth)}`, ); - - if (options.names?.includes('amount')) { - validateEtherAmount('amount', amount, TOKENS.ETH); - - if (amount && maxAmount) - validateBignumberMax( - 'amount', - amount, - maxAmount, - `Entered amount exceeds locked bond of ${formatEther(maxAmount)} ${getTokenDisplayName(TOKENS.ETH)}`, - ); - FormatToken; - } - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError( - error, - 'StealingCancelForm', - 'amount', - ); - } + }); }, - [dataPromise], ); }; diff --git a/features/stealing/stealing-cancel-form/controls/amount-input.tsx b/features/stealing/stealing-cancel-form/controls/amount-input.tsx index 1152185c..c9a00602 100644 --- a/features/stealing/stealing-cancel-form/controls/amount-input.tsx +++ b/features/stealing/stealing-cancel-form/controls/amount-input.tsx @@ -1,8 +1,8 @@ -import { TOKENS } from 'consts/tokens'; import { useWatch } from 'react-hook-form'; import { FormTitle } from 'shared/components'; import { TokenAmountInputHookForm } from 'shared/hook-form/controls'; import { StealingCancelFormInputType } from '../context'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const AmountInput: React.FC = () => { const maxAmount = useWatch({ @@ -14,7 +14,7 @@ export const AmountInput: React.FC = () => { Enter cancellation amount diff --git a/features/stealing/stealing-cancel-form/controls/submit-button.tsx b/features/stealing/stealing-cancel-form/controls/submit-button.tsx index dab5c52b..177c47af 100644 --- a/features/stealing/stealing-cancel-form/controls/submit-button.tsx +++ b/features/stealing/stealing-cancel-form/controls/submit-button.tsx @@ -1,10 +1,5 @@ import { SubmitButtonHookForm } from 'shared/hook-form/controls'; export const SubmitButton = () => { - // TODO: disable - return ( - - Cancel stealing - - ); + return Cancel stealing; }; diff --git a/features/stealing/stealing-cancel-form/hooks/use-tx-modal-stages-stealing-cancel.tsx b/features/stealing/stealing-cancel-form/hooks/use-tx-modal-stages-stealing-cancel.tsx index 1199d46d..763148d2 100644 --- a/features/stealing/stealing-cancel-form/hooks/use-tx-modal-stages-stealing-cancel.tsx +++ b/features/stealing/stealing-cancel-form/hooks/use-tx-modal-stages-stealing-cancel.tsx @@ -1,6 +1,4 @@ -import type { BigNumber } from 'ethers'; - -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { TransactionModalTransitStage, TxAmount, @@ -10,10 +8,10 @@ import { getGeneralTransactionModalStages, useTransactionModalStage, } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; type Props = { - amount: BigNumber; + amount: bigint; nodeOperatorId: NodeOperatorId; }; @@ -28,9 +26,9 @@ const getTxModalStagesStealingCancel = ( title="You are canceling stealing" description={ <> - Node Operator ID: {nodeOperatorId} + Node Operator ID: {nodeOperatorId.toString()}
      - Amount: + Amount: } />, @@ -43,9 +41,9 @@ const getTxModalStagesStealingCancel = ( title="You are canceling stealing" description={ <> - Node Operator ID: {nodeOperatorId} + Node Operator ID: {nodeOperatorId.toString()}
      - Amount: + Amount: } />, @@ -58,9 +56,9 @@ const getTxModalStagesStealingCancel = ( title="Stealing is canceled" description={ <> - Node Operator ID: {nodeOperatorId} + Node Operator ID: {nodeOperatorId.toString()}
      - Amount: + Amount: } />, diff --git a/features/stealing/stealing-cancel-form/stealing-cancel-form-loader.tsx b/features/stealing/stealing-cancel-form/stealing-cancel-form-loader.tsx deleted file mode 100644 index 96c8c834..00000000 --- a/features/stealing/stealing-cancel-form/stealing-cancel-form-loader.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { StealingCancelFormInputType } from './context'; - -export const StealingCancelFormLoader: FC = ({ - children, -}) => { - const { isLoading } = useFormState(); - - return {children}; -}; diff --git a/features/stealing/stealing-cancel-form/stealing-cancel-form.tsx b/features/stealing/stealing-cancel-form/stealing-cancel-form.tsx index 4cb00659..84e9ccd0 100644 --- a/features/stealing/stealing-cancel-form/stealing-cancel-form.tsx +++ b/features/stealing/stealing-cancel-form/stealing-cancel-form.tsx @@ -1,26 +1,30 @@ import { FC, memo } from 'react'; -import { StealingCancelFormProvider } from './context'; +import { + StealingCancelDataProvider, + StealingCancelFormProvider, +} from './context'; import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; import { AmountInput } from './controls/amount-input'; import { NodeOperatorInput } from './controls/node-operator-input'; import { SubmitButton } from './controls/submit-button'; -import { StealingCancelFormLoader } from './stealing-cancel-form-loader'; export const StealingCancelForm: FC = memo(() => { return ( - - - - - - - - - - - + + + + +

      + + + + + + + + ); }); diff --git a/features/stealing/stealing-cancel.tsx b/features/stealing/stealing-cancel.tsx index 45655732..3f344e55 100644 --- a/features/stealing/stealing-cancel.tsx +++ b/features/stealing/stealing-cancel.tsx @@ -1,5 +1,5 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { StealingCancelForm } from './stealing-cancel-form'; import { LockedSection } from './locked-section'; diff --git a/features/stealing/stealing-report-form/context/index.ts b/features/stealing/stealing-report-form/context/index.ts index 6cbe42e4..ab66f0d0 100644 --- a/features/stealing/stealing-report-form/context/index.ts +++ b/features/stealing/stealing-report-form/context/index.ts @@ -1,2 +1,3 @@ +export * from './stealing-report-data-provider'; export * from './stealing-report-form-provider'; export * from './types'; diff --git a/features/stealing/stealing-report-form/context/stealing-report-data-provider.tsx b/features/stealing/stealing-report-form/context/stealing-report-data-provider.tsx new file mode 100644 index 00000000..0456f8d8 --- /dev/null +++ b/features/stealing/stealing-report-form/context/stealing-report-data-provider.tsx @@ -0,0 +1,51 @@ +import { useEthereumBalance, useOperatorsCount } from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type StealingReportFormNetworkData } from './types'; + +const useStealingReportFormNetworkData: NetworkData< + StealingReportFormNetworkData +> = () => { + const ethBalanceQuery = useEthereumBalance(); + + const ethBalance = ethBalanceQuery.data; + const isEthBalanceLoading = ethBalanceQuery.isPending; + + const { data: nodeOperatorsCount, isPending: isNodeOperatorsCountLoading } = + useOperatorsCount(); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ethBalanceQuery.queryKey]); + }, [invalidate, ethBalanceQuery.queryKey]); + + return { + data: { + ethBalance, + nodeOperatorsCount, + } as StealingReportFormNetworkData, + isPending: isEthBalanceLoading || isNodeOperatorsCountLoading, + revalidate, + }; +}; + +export const useStealingReportFormData = + useFormData; + +export const StealingReportDataProvider: FC = ({ + children, +}) => { + const networkData = useStealingReportFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/stealing/stealing-report-form/context/stealing-report-form-provider.tsx b/features/stealing/stealing-report-form/context/stealing-report-form-provider.tsx index 1397bca5..4781d7d4 100644 --- a/features/stealing/stealing-report-form/context/stealing-report-form-provider.tsx +++ b/features/stealing/stealing-report-form/context/stealing-report-form-provider.tsx @@ -1,63 +1,30 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, -} from 'shared/hook-form/form-controller'; -import { - StealingReportFormNetworkData, - type StealingReportFormInputType, -} from './types'; -import { useStealingReportFormNetworkData } from './use-stealing-report-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { type StealingReportFormInputType } from './types'; import { useStealingReportSubmit } from './use-stealing-report-submit'; import { useStealingReportValidation } from './use-stealing-report-validation'; -export const useStealingReportFormData = - useFormData; - export const StealingReportFormProvider: FC = ({ children, }) => { - const [networkData, revalidate] = useStealingReportFormNetworkData(); - const validationResolver = useStealingReportValidation(networkData); + const resolver = useStealingReportValidation(); - // TODO: validate (max amount) const formObject = useForm({ defaultValues: { amount: undefined, }, - resolver: validationResolver, + resolver, mode: 'onChange', }); - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { stealingReport } = useStealingReportSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - StealingReportFormInputType, - StealingReportFormNetworkData - > = useMemo( - () => ({ - onSubmit: stealingReport, - retryEvent, - }), - [stealingReport, retryEvent], - ); + const submitter = useStealingReportSubmit(); return ( - - - {children} - - + + {children} + ); }; diff --git a/features/stealing/stealing-report-form/context/types.ts b/features/stealing/stealing-report-form/context/types.ts index 0588ea1a..c4b1e636 100644 --- a/features/stealing/stealing-report-form/context/types.ts +++ b/features/stealing/stealing-report-form/context/types.ts @@ -1,14 +1,12 @@ -import { BigNumber } from 'ethers'; -import { LoadingRecord, NodeOperatorId } from 'types'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; export type StealingReportFormInputType = { - amount?: BigNumber; + amount?: bigint; nodeOperatorId?: NodeOperatorId; blockhash?: string; }; export type StealingReportFormNetworkData = { - etherBalance?: BigNumber; - nodeOperatorsCount?: BigNumber; - loading: LoadingRecord<'etherBalance' | 'nodeOperatorsCount'>; + ethBalance: bigint; + nodeOperatorsCount: bigint; }; diff --git a/features/stealing/stealing-report-form/context/use-stealing-report-form-network-data.tsx b/features/stealing/stealing-report-form/context/use-stealing-report-form-network-data.tsx deleted file mode 100644 index 5ca6b473..00000000 --- a/features/stealing/stealing-report-form/context/use-stealing-report-form-network-data.tsx +++ /dev/null @@ -1,42 +0,0 @@ -import { useEthereumBalance } from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; -import { useCallback, useMemo } from 'react'; -import { useNodeOperatorsCount } from 'shared/hooks'; -import { type StealingReportFormNetworkData } from './types'; - -export const useStealingReportFormNetworkData = (): [ - StealingReportFormNetworkData, - () => Promise, -] => { - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - - const { - data: nodeOperatorsCount, - initialLoading: isNodeOperatorsCountLoading, - } = useNodeOperatorsCount(); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateEtherBalance()]); - }, [updateEtherBalance]); - - const loading = useMemo( - () => ({ - isEtherBalanceLoading, - isNodeOperatorsCountLoading, - }), - [isEtherBalanceLoading, isNodeOperatorsCountLoading], - ); - - return [ - { - etherBalance, - nodeOperatorsCount, - loading, - }, - revalidate, - ]; -}; diff --git a/features/stealing/stealing-report-form/context/use-stealing-report-submit.ts b/features/stealing/stealing-report-form/context/use-stealing-report-submit.ts index f9a8f4b4..2bacee65 100644 --- a/features/stealing/stealing-report-form/context/use-stealing-report-submit.ts +++ b/features/stealing/stealing-report-form/context/use-stealing-report-submit.ts @@ -1,98 +1,79 @@ -import { BigNumber } from 'ethers'; +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; - -import { useCSModuleWeb3, useSendTx } from 'shared/hooks'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; -import { StealingReportFormInputType } from '.'; +import { isHex } from 'viem'; import { useTxModalStagesStealingReport } from '../hooks/use-tx-modal-stages-stealing-report'; +import { + StealingReportFormInputType, + StealingReportFormNetworkData, +} from './types'; +import invariant from 'tiny-invariant'; -type UseStealingReportOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type StealingReportMethodParams = { - nodeOperatorId: NodeOperatorId; - amount: BigNumber; - blockhash: string; -}; - -const useStealingReportTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (params: StealingReportMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - return { - tx: await CSModuleWeb3.populateTransaction.reportELRewardsStealingPenalty( - params.nodeOperatorId, - params.blockhash, - params.amount, - ), - txName: 'reportELRewardsStealingPenalty', - }; - }, - [CSModuleWeb3], - ); -}; - -export const useStealingReportSubmit = ({ - onConfirm, - onRetry, -}: UseStealingReportOptions) => { +export const useStealingReportSubmit: FormSubmitterHook< + StealingReportFormInputType, + StealingReportFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesStealingReport(); - const getTx = useStealingReportTx(); - const sendTx = useSendTx(); - - const stealingReport = useCallback( - async ({ - amount, - nodeOperatorId, - blockhash, - }: StealingReportFormInputType): Promise => { - invariant(amount, 'BondAmount is not defined'); - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); - invariant(blockhash, 'BlockHash is not defined'); + return useCallback( + async ( + { amount, nodeOperatorId, blockhash }, + _data, + { onConfirm, onRetry }, + ) => { + invariant(amount !== undefined, 'Amount is not defined'); + invariant(nodeOperatorId !== undefined, 'NodeOperatorId is not defined'); + invariant(isHex(blockhash), 'BlockHash is not valid'); try { - txModalStages.sign({ amount, nodeOperatorId, blockhash }); - - const tx = await getTx({ + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ amount, nodeOperatorId, blockhash }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending( + { amount, nodeOperatorId, blockhash }, + payload.hash, + ); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success( + { amount, nodeOperatorId, blockhash }, + payload.hash, + ); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.stealing.report({ nodeOperatorId, amount, - blockhash, + blockHash: blockhash, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'StealingReport signing', - () => sendTx(tx), - ); - - txModalStages.pending({ amount, nodeOperatorId, blockhash }, txHash); - - await runWithTransactionLogger( - 'StealingReport block confirmation', - waitTx, - ); - await onConfirm?.(); - txModalStages.success({ amount, nodeOperatorId, blockhash }, txHash); - return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [getTx, txModalStages, onConfirm, sendTx, onRetry], + [csm.stealing, txModalStages], ); - - return { - stealingReport, - }; }; diff --git a/features/stealing/stealing-report-form/context/use-stealing-report-validation.ts b/features/stealing/stealing-report-form/context/use-stealing-report-validation.ts index 0a1c6249..570a36be 100644 --- a/features/stealing/stealing-report-form/context/use-stealing-report-validation.ts +++ b/features/stealing/stealing-report-form/context/use-stealing-report-validation.ts @@ -1,59 +1,41 @@ -import { TOKENS } from 'consts/tokens'; -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { - handleResolverValidationError, + useFormValidation, validateEtherAmount, validateHash, validateNodeOperatorId, } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; -import invariant from 'tiny-invariant'; import type { StealingReportFormInputType, StealingReportFormNetworkData, } from './types'; -export const useStealingReportValidation = ( - networkData: StealingReportFormNetworkData, -) => { - const dataPromise = useAwaitNetworkData(networkData); - - return useCallback>( - async (values, _, options) => { - try { - const { amount, nodeOperatorId, blockhash } = values; - - const { nodeOperatorsCount, etherBalance } = await dataPromise; - - invariant(etherBalance); - invariant(nodeOperatorsCount); - - if (options.names?.includes('nodeOperatorId')) - validateNodeOperatorId( - 'nodeOperatorId', - nodeOperatorId, - nodeOperatorsCount, - ); - - if (options.names?.includes('amount')) - validateEtherAmount('amount', amount, TOKENS.ETH); +export const useStealingReportValidation = () => { + return useFormValidation< + StealingReportFormInputType, + StealingReportFormNetworkData + >( + 'amount', + async ( + { amount, nodeOperatorId, blockhash }, + { nodeOperatorsCount }, + validate, + ) => { + await validate('nodeOperatorId', () => { + validateNodeOperatorId( + 'nodeOperatorId', + nodeOperatorId, + nodeOperatorsCount, + ); + }); - if (options.names?.includes('blockhash')) - validateHash('blockhash', blockhash); + await validate('amount', () => { + validateEtherAmount('amount', amount, TOKENS.eth); + }); - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError( - error, - 'StealingReportForm', - 'amount', - ); - } + await validate('blockhash', () => { + validateHash('blockhash', blockhash); + }); }, - [dataPromise], ); }; diff --git a/features/stealing/stealing-report-form/controls/amount-input.tsx b/features/stealing/stealing-report-form/controls/amount-input.tsx index 9bfd79bb..38e55f1b 100644 --- a/features/stealing/stealing-report-form/controls/amount-input.tsx +++ b/features/stealing/stealing-report-form/controls/amount-input.tsx @@ -1,4 +1,4 @@ -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { FormTitle } from 'shared/components'; import { TokenAmountInputHookForm } from 'shared/hook-form/controls'; @@ -6,7 +6,7 @@ export const AmountInput: React.FC = () => { return ( <> Enter stealing amount - + ); }; diff --git a/features/stealing/stealing-report-form/controls/submit-button.tsx b/features/stealing/stealing-report-form/controls/submit-button.tsx index b148361b..476c9943 100644 --- a/features/stealing/stealing-report-form/controls/submit-button.tsx +++ b/features/stealing/stealing-report-form/controls/submit-button.tsx @@ -1,10 +1,5 @@ import { SubmitButtonHookForm } from 'shared/hook-form/controls'; export const SubmitButton = () => { - // TODO: disable - return ( - - Report stealing - - ); + return Report stealing; }; diff --git a/features/stealing/stealing-report-form/hooks/use-tx-modal-stages-stealing-report.tsx b/features/stealing/stealing-report-form/hooks/use-tx-modal-stages-stealing-report.tsx index af3fd584..eea9e1cc 100644 --- a/features/stealing/stealing-report-form/hooks/use-tx-modal-stages-stealing-report.tsx +++ b/features/stealing/stealing-report-form/hooks/use-tx-modal-stages-stealing-report.tsx @@ -1,6 +1,4 @@ -import type { BigNumber } from 'ethers'; - -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { TransactionModalTransitStage, TxAmount, @@ -10,10 +8,10 @@ import { getGeneralTransactionModalStages, useTransactionModalStage, } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; type Props = { - amount: BigNumber; + amount: bigint; nodeOperatorId: NodeOperatorId; blockhash: string; }; @@ -29,9 +27,9 @@ const getTxModalStagesStealingReport = ( title="You are reporting stealing" description={ <> - Node Operator ID: {nodeOperatorId} + Node Operator ID: {nodeOperatorId.toString()}
      - Amount: + Amount: } />, @@ -44,9 +42,9 @@ const getTxModalStagesStealingReport = ( title="You are reporting stealing" description={ <> - Node Operator ID: {nodeOperatorId} + Node Operator ID: {nodeOperatorId.toString()}
      - Amount: + Amount: } />, @@ -59,9 +57,9 @@ const getTxModalStagesStealingReport = ( title="Stealing is repotred" description={ <> - Node Operator ID: {nodeOperatorId} + Node Operator ID: {nodeOperatorId.toString()}
      - Amount: + Amount: } />, diff --git a/features/stealing/stealing-report-form/stealing-report-form-loader.tsx b/features/stealing/stealing-report-form/stealing-report-form-loader.tsx deleted file mode 100644 index 67ee4bda..00000000 --- a/features/stealing/stealing-report-form/stealing-report-form-loader.tsx +++ /dev/null @@ -1,12 +0,0 @@ -import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { StealingReportFormInputType } from './context'; - -export const StealingReportFormLoader: FC = ({ - children, -}) => { - const { isLoading } = useFormState(); - - return {children}; -}; diff --git a/features/stealing/stealing-report-form/stealing-report-form.tsx b/features/stealing/stealing-report-form/stealing-report-form.tsx index 57fac990..20a70b27 100644 --- a/features/stealing/stealing-report-form/stealing-report-form.tsx +++ b/features/stealing/stealing-report-form/stealing-report-form.tsx @@ -1,28 +1,30 @@ import { FC, memo } from 'react'; - -import { StealingReportFormProvider } from './context'; - +import { + StealingReportDataProvider, + StealingReportFormProvider, +} from './context'; import { AmountInput } from './controls/amount-input'; import { SubmitButton } from './controls/submit-button'; import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; -import { StealingReportFormLoader } from './stealing-report-form-loader'; +import { FormLoader, Form } from 'shared/hook-form/form-controller'; import { BlockhashInput } from './controls/blockhash-input'; import { NodeOperatorInput } from './controls/node-operator-input'; export const StealingReportForm: FC = memo(() => { return ( - - - - - - - - - - - - + + + + +
      + + + + + +
      +
      +
      +
      ); }); diff --git a/features/stealing/stealing-report.tsx b/features/stealing/stealing-report.tsx index 5cd36f13..05c919b4 100644 --- a/features/stealing/stealing-report.tsx +++ b/features/stealing/stealing-report.tsx @@ -1,5 +1,5 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { StealingReportForm } from './stealing-report-form'; diff --git a/features/surveys/index.ts b/features/surveys/index.ts index f82238e0..2fbc6444 100644 --- a/features/surveys/index.ts +++ b/features/surveys/index.ts @@ -1,7 +1 @@ -export * from './surveys-contacts-page'; -export * from './surveys-experience-page'; -export * from './surveys-home-page'; -export * from './surveys-how-did-you-learn-page'; -export * from './surveys-setup-page'; -export * from './surveys-signin-page'; -export * from './shared'; +export * from './surveys-page'; diff --git a/features/surveys/shared/gate-survey-auth.tsx b/features/surveys/shared/gate-survey-auth.tsx deleted file mode 100644 index a4c28305..00000000 --- a/features/surveys/shared/gate-survey-auth.tsx +++ /dev/null @@ -1,16 +0,0 @@ -import { FC, PropsWithChildren, ReactNode } from 'react'; -import { useAuth } from './survey-auth-provider'; - -type GateProps = { - fallback?: ReactNode; -}; - -export const GateSurveyAuth: FC> = ({ - fallback, - children, -}) => { - const { token } = useAuth(); - const canShow = !!token; - - return <>{canShow ? children : fallback}; -}; diff --git a/features/surveys/shared/index.ts b/features/surveys/shared/index.ts index cea5532d..fee56f86 100644 --- a/features/surveys/shared/index.ts +++ b/features/surveys/shared/index.ts @@ -1,5 +1,2 @@ export * from './back-button'; -export * from './gate-survey-auth'; -export * from './survey-auth-provider'; -export * from './use-siwe'; export * from './use-surveys-fetcher'; diff --git a/features/surveys/shared/survey-auth-provider.tsx b/features/surveys/shared/survey-auth-provider.tsx deleted file mode 100644 index 91594045..00000000 --- a/features/surveys/shared/survey-auth-provider.tsx +++ /dev/null @@ -1,84 +0,0 @@ -import { useModalActions } from 'providers/modal-provider'; -import { - createContext, - FC, - PropsWithChildren, - useCallback, - useContext, - useMemo, -} from 'react'; -import { useAccount, useSessionStorage } from 'shared/hooks'; -import invariant from 'tiny-invariant'; -import { extractError } from 'utils'; -import { useModalStages } from './use-modal-stages'; -import { useSiwe } from './use-siwe'; -import { getExternalLinks } from 'consts/external-links'; - -type AuthContextType = { - token?: string; - signIn: () => Promise; - logout: () => void; -}; - -const AuthContext = createContext({} as AuthContextType); - -export const useAuth = () => { - const context = useContext(AuthContext); - invariant(context, 'Attempt to use `useAuth` outside of provider'); - return context; -}; - -const { surveyApi } = getExternalLinks(); - -export const SurveyAuthProvider: FC = ({ children }) => { - const siwe = useSiwe(); - const { address } = useAccount(); - const [token, setToken] = useSessionStorage( - `surveys-token-${address}`, - undefined, - ); - - const { txModalStages: modalStages } = useModalStages(); - const { closeModal } = useModalActions(); - - const signIn = useCallback(async () => { - modalStages.sign(); - - try { - const payload = await siwe(); - - modalStages.pending(); - const response = await fetch(`${surveyApi}/auth/signin`, { - method: 'POST', - headers: { - 'Content-Type': 'application/json', - }, - body: JSON.stringify(payload), - }); - if (!response.ok) { - modalStages.failed(await extractError(response)); - } - const data: { access_token: string; token_type: string } = - await response.json(); - setToken(`${data.token_type} ${data.access_token}`); - closeModal(); - } catch (e) { - modalStages.rejected(); - } - }, [closeModal, modalStages, setToken, siwe]); - - const logout = useCallback(() => { - setToken(undefined); - }, [setToken]); - - const value = useMemo( - () => ({ - token, - signIn, - logout, - }), - [logout, signIn, token], - ); - - return {children}; -}; diff --git a/features/surveys/shared/use-modal-stages.tsx b/features/surveys/shared/use-modal-stages.tsx deleted file mode 100644 index 1007966a..00000000 --- a/features/surveys/shared/use-modal-stages.tsx +++ /dev/null @@ -1,32 +0,0 @@ -import { - TransactionModalTransitStage, - TxStageFail, - TxStagePending, - TxStagePermit, - useTransactionModalStage, -} from 'shared/transaction-modal'; -import { ErrorCode, getErrorCode } from 'utils'; - -const getModalStages = (transitStage: TransactionModalTransitStage) => ({ - sign: () => transitStage(), - - pending: () => - transitStage( - , - ), - - failed: (error: unknown) => - transitStage( - , - ), - - rejected: () => - transitStage( - , - ), -}); - -export const useModalStages = () => useTransactionModalStage(getModalStages); diff --git a/features/surveys/shared/use-siwe.ts b/features/surveys/shared/use-siwe.ts deleted file mode 100644 index 8409f15f..00000000 --- a/features/surveys/shared/use-siwe.ts +++ /dev/null @@ -1,41 +0,0 @@ -import { useSDK } from '@lido-sdk/react'; -import { addHours } from 'date-fns'; -import { useCallback } from 'react'; -import { SiweMessage } from 'siwe'; -import invariant from 'tiny-invariant'; - -const createSiweMessage = (address: string, chainId?: number) => { - const statement = 'Sign in to use the CSM Surveys'; - const scheme = window.location.protocol.slice(0, -1); - const domain = window.location.host; - const uri = window.location.origin; - - const message = new SiweMessage({ - scheme, - domain, - address, - statement, - uri, - version: '1', - chainId, - expirationTime: addHours(new Date(), 1).toISOString(), - }); - return message.prepareMessage(); -}; - -export const useSiwe = () => { - const { providerWeb3 } = useSDK(); - - return useCallback(async () => { - const signer = providerWeb3?.getSigner(); - invariant(signer, 'Signer is not available'); - - const message = createSiweMessage( - await signer.getAddress(), - await signer.getChainId(), - ); - - const signature = await signer.signMessage(message); - return { signature, message }; - }, [providerWeb3]); -}; diff --git a/features/surveys/shared/use-surveys-fetcher.ts b/features/surveys/shared/use-surveys-fetcher.ts index 66a31b75..70ee2320 100644 --- a/features/surveys/shared/use-surveys-fetcher.ts +++ b/features/surveys/shared/use-surveys-fetcher.ts @@ -1,7 +1,7 @@ import { useCallback } from 'react'; import invariant from 'tiny-invariant'; import { FetcherError, standardFetcher } from 'utils'; -import { useAuth } from './survey-auth-provider'; +import { useSiweAuth } from 'shared/siwe'; import { getExternalLinks } from 'consts/external-links'; const { surveyApi } = getExternalLinks(); @@ -10,7 +10,7 @@ export const useSurveysFetcher = ( transformIncoming?: (d: R) => T, transformOutcoming?: (d: T) => R, ) => { - const { token, logout } = useAuth(); + const { token, logout } = useSiweAuth(); const handleError = useCallback( (err: unknown) => { diff --git a/features/surveys/shared/use-surveys-swr.ts b/features/surveys/shared/use-surveys-swr.ts index 3d51c9a9..6b452e01 100644 --- a/features/surveys/shared/use-surveys-swr.ts +++ b/features/surveys/shared/use-surveys-swr.ts @@ -1,13 +1,15 @@ -import useSWR from 'swr'; +import { useQuery, useMutation, useQueryClient } from '@tanstack/react-query'; import { useSurveysFetcher } from './use-surveys-fetcher'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback } from 'react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; +import { useCallback, useMemo } from 'react'; +import { STRATEGY_LAZY } from 'consts'; +import { useNodeOperatorId } from 'modules/web3'; type Options = { skipFetching?: boolean; transformIncoming?: (d: R) => T; transformOutcoming?: (d: T) => R; + operatorId?: string; + invalidateOnMutate?: boolean; }; export const useSurveysSWR = ( @@ -15,40 +17,84 @@ export const useSurveysSWR = ( options?: Options, ) => { const nodeOperatorId = useNodeOperatorId(); - const url = `csm-${nodeOperatorId}/${path}`; + const effectiveOperatorId = options?.operatorId ?? `csm-${nodeOperatorId}`; + const url = `${effectiveOperatorId}/${path}`; + const queryKey = useMemo( + () => ['surveys', effectiveOperatorId, path], + [effectiveOperatorId, path], + ); + const queryClient = useQueryClient(); const [fetcher, updater] = useSurveysFetcher( options?.transformIncoming, options?.transformOutcoming, ); - const swr = useSWR( - url, - options?.skipFetching ? null : fetcher, - STRATEGY_LAZY, - ); + + const query = useQuery({ + queryKey, + queryFn: () => fetcher(url), + enabled: + !options?.skipFetching && + (options?.operatorId !== undefined || nodeOperatorId !== undefined), + ...STRATEGY_LAZY, + }); + + const updateMutation = useMutation({ + mutationFn: (data: T) => updater(url, data)(), + onSuccess: (result) => { + if (options?.invalidateOnMutate) { + void queryClient.invalidateQueries({ queryKey }); + } else { + queryClient.setQueryData(queryKey, result); + } + void queryClient.invalidateQueries({ + queryKey: ['surveys', effectiveOperatorId, 'summary'], + }); + }, + onError: () => { + void queryClient.invalidateQueries({ + queryKey, + }); + }, + }); + + const deleteMutation = useMutation({ + mutationFn: () => updater(url, null)(), + onSuccess: () => { + void queryClient.invalidateQueries({ + queryKey: ['surveys', effectiveOperatorId], + }); + }, + onError: () => { + void queryClient.invalidateQueries({ + queryKey, + }); + }, + }); const mutate = useCallback( (data?: T) => { if (data === undefined) { - return swr.mutate(); + void queryClient.invalidateQueries({ + queryKey, + }); + return Promise.resolve(); } - return swr.mutate(updater(url, data), { - rollbackOnError: true, - revalidate: false, - }); + return updateMutation.mutateAsync(data); }, - [swr, updater, url], + [queryClient, queryKey, updateMutation], ); const remove = useCallback(() => { - return swr.mutate(updater(url, null), { - rollbackOnError: true, - revalidate: false, - }); - }, [swr, updater, url]); + return deleteMutation.mutateAsync(); + }, [deleteMutation]); return { - ...swr, + data: query.data, + error: query.error, + isLoading: query.isLoading, + loading: query.isLoading, + initialLoading: query.isLoading && query.isFetching, mutate, remove, }; diff --git a/features/surveys/siwe-sign-in/index.ts b/features/surveys/siwe-sign-in/index.ts index 6e79f6c7..b268590a 100644 --- a/features/surveys/siwe-sign-in/index.ts +++ b/features/surveys/siwe-sign-in/index.ts @@ -1 +1,2 @@ +export * from './siwe-connect'; export * from './siwe-sign-in'; diff --git a/features/surveys/siwe-sign-in/siwe-connect.tsx b/features/surveys/siwe-sign-in/siwe-connect.tsx new file mode 100644 index 00000000..52343e71 --- /dev/null +++ b/features/surveys/siwe-sign-in/siwe-connect.tsx @@ -0,0 +1,21 @@ +import { FC } from 'react'; + +import { Text } from '@lidofinance/lido-ui'; +import { Block, Stack } from 'shared/components'; +import { Connect } from 'shared/wallet'; + +export const SiweConnect: FC = () => ( + + + + + Connect your wallet + + + Connect your wallet and sign a verification message to continue. + + + + + +); diff --git a/features/surveys/siwe-sign-in/siwe-sign-in.tsx b/features/surveys/siwe-sign-in/siwe-sign-in.tsx index e38d1193..949c990e 100644 --- a/features/surveys/siwe-sign-in/siwe-sign-in.tsx +++ b/features/surveys/siwe-sign-in/siwe-sign-in.tsx @@ -1,14 +1,11 @@ import { Block, Button, Text } from '@lidofinance/lido-ui'; -import { FC, useCallback } from 'react'; +import { FC } from 'react'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { MatomoLink, Stack } from 'shared/components'; -import { useAuth } from '../shared'; +import { useSiweAuth } from 'shared/siwe'; export const SiweSignIn: FC = () => { - const { signIn } = useAuth(); - - const login = useCallback(() => { - void signIn(); - }, [signIn]); + const { signIn } = useSiweAuth(); return ( @@ -17,14 +14,17 @@ export const SiweSignIn: FC = () => { Here you can voluntarily provide information about your Node Operator, including your contact details, experience, and setup. This information may be used for report building ( - + VaNOM ), UI/UX improvements, or feedback purposes. To view or submit this information, you must sign in to verify that you are the owner of the Reward or Manager address. - diff --git a/features/surveys/survey-contacts/survey-contacts.tsx b/features/surveys/survey-contacts/survey-contacts.tsx index 4f5ae2b4..8226e93f 100644 --- a/features/surveys/survey-contacts/survey-contacts.tsx +++ b/features/surveys/survey-contacts/survey-contacts.tsx @@ -1,5 +1,6 @@ import { PATH } from 'consts/urls'; import { FC, useCallback } from 'react'; +import { trackMatomoFormEvent } from 'utils/track-matomo-event'; import { FormProvider, useForm } from 'react-hook-form'; import { FormTitle, SectionBlock, Stack, WhenLoaded } from 'shared/components'; import { @@ -30,9 +31,11 @@ export const SurveyContacts: FC = () => { const handleSubmit = useCallback( async (data: Contact) => { + trackMatomoFormEvent('surveyContacts'); modals.pending(); try { await mutate(data); + trackMatomoFormEvent('surveyContacts', 'success'); modals.success(); } catch (e) { modals.failed(e); diff --git a/features/surveys/survey-contacts/use-modal-stages.tsx b/features/surveys/survey-contacts/use-modal-stages.tsx index eadfd61b..e8ede9b9 100644 --- a/features/surveys/survey-contacts/use-modal-stages.tsx +++ b/features/surveys/survey-contacts/use-modal-stages.tsx @@ -5,7 +5,7 @@ import { TxStageSuccess, useTransactionModalStage, } from 'shared/transaction-modal'; -import { getErrorCode } from 'utils'; +import { extractErrorMessage, getErrorCode } from 'utils'; const getModalStages = (transitStage: TransactionModalTransitStage) => ({ pending: () => @@ -38,7 +38,11 @@ const getModalStages = (transitStage: TransactionModalTransitStage) => ({ failed: (error: unknown) => transitStage( - , + , ), }); diff --git a/features/surveys/survey-delegates/add-delegate-form.tsx b/features/surveys/survey-delegates/add-delegate-form.tsx new file mode 100644 index 00000000..03ae44e2 --- /dev/null +++ b/features/surveys/survey-delegates/add-delegate-form.tsx @@ -0,0 +1,65 @@ +import { FC, useCallback, useState } from 'react'; +import { useFormContext } from 'react-hook-form'; +import { isAddress } from 'viem'; +import { Stack } from 'shared/components'; +import { + AddressInputHookForm, + SubmitButtonHookForm, +} from 'shared/hook-form/controls'; + +type AddDelegateFormData = { + address: string; +}; + +type AddDelegateFormProps = { + onSubmit: (data: AddDelegateFormData) => void; + isSubmitting?: boolean; +}; + +export const AddDelegateForm: FC = ({ + onSubmit, + isSubmitting, +}) => { + const { handleSubmit, setError, clearErrors } = + useFormContext(); + const [validationError, setValidationError] = useState(); + + const handleFormSubmit = useCallback( + (data: AddDelegateFormData) => { + clearErrors('address'); + setValidationError(undefined); + + if (!data.address) { + setError('address', { type: 'manual', message: 'Address is required' }); + setValidationError('Address is required'); + return; + } + if (!isAddress(data.address)) { + setError('address', { + type: 'manual', + message: 'Invalid Ethereum address', + }); + setValidationError('Invalid Ethereum address'); + return; + } + onSubmit(data); + }, + [clearErrors, onSubmit, setError], + ); + + return ( +
      + + + + Add Delegate + + +
      + ); +}; diff --git a/features/surveys/survey-delegates/confirm-remove-modal.tsx b/features/surveys/survey-delegates/confirm-remove-modal.tsx new file mode 100644 index 00000000..d3e87989 --- /dev/null +++ b/features/surveys/survey-delegates/confirm-remove-modal.tsx @@ -0,0 +1,39 @@ +import { Button, Modal, Text } from '@lidofinance/lido-ui'; +import type { ModalComponentType } from 'providers/modal-provider'; +import { Stack } from 'shared/components'; +import { ConfirmModalProps, getUseConfirmModal } from 'shared/hooks'; +import { Address } from 'shared/components/address'; + +type ConfirmRemoveDelegateProps = ConfirmModalProps & { + address: string; +}; + +export const ConfirmRemoveDelegateModal: ModalComponentType< + ConfirmRemoveDelegateProps +> = ({ onConfirm, onReject, address, ...props }) => { + return ( + + + + + Remove delegate? + + +
      will no longer have + delegate access. + + + + + + + + + ); +}; + +export const useConfirmRemoveDelegateModal = getUseConfirmModal( + ConfirmRemoveDelegateModal, +); diff --git a/features/surveys/survey-delegates/delegate-item.tsx b/features/surveys/survey-delegates/delegate-item.tsx new file mode 100644 index 00000000..37dcb366 --- /dev/null +++ b/features/surveys/survey-delegates/delegate-item.tsx @@ -0,0 +1,32 @@ +import { FC } from 'react'; +import { Button } from '@lidofinance/lido-ui'; +import { Stack } from 'shared/components'; +import { Address } from 'shared/components/address'; +import { Delegate } from '../types'; + +type DelegateItemProps = { + delegate: Delegate; + onRemove: () => void; + isRemoving?: boolean; +}; + +export const DelegateItem: FC = ({ + delegate, + onRemove, + isRemoving, +}) => { + return ( + +
      + + + ); +}; diff --git a/features/surveys/survey-delegates/index.ts b/features/surveys/survey-delegates/index.ts new file mode 100644 index 00000000..407a6ffb --- /dev/null +++ b/features/surveys/survey-delegates/index.ts @@ -0,0 +1 @@ +export * from './survey-delegates'; diff --git a/features/surveys/survey-delegates/survey-delegates.tsx b/features/surveys/survey-delegates/survey-delegates.tsx new file mode 100644 index 00000000..cefbffb5 --- /dev/null +++ b/features/surveys/survey-delegates/survey-delegates.tsx @@ -0,0 +1,109 @@ +import { FC, useCallback, useState } from 'react'; +import { trackMatomoFormEvent } from 'utils/track-matomo-event'; +import { FormProvider, useForm } from 'react-hook-form'; +import { Text } from '@lidofinance/lido-ui'; +import { Plural, SectionBlock, Stack, WhenLoaded } from 'shared/components'; +import { useDelegates } from './use-delegates'; +import { useModalStages } from './use-modal-stages'; +import { useConfirmRemoveDelegateModal } from './confirm-remove-modal'; +import { DelegateItem } from './delegate-item'; +import { AddDelegateForm } from './add-delegate-form'; +import { MAX_DELEGATES } from '../types'; + +type AddDelegateFormData = { + address: string; +}; + +export const SurveyDelegates: FC = () => { + const { delegates, isLoading, add, remove, isAdding, canAddMore } = + useDelegates(); + const { txModalStages: modals } = useModalStages(); + const confirmRemove = useConfirmRemoveDelegateModal(); + const [removingAddress, setRemovingAddress] = useState(null); + + const formObject = useForm({ + defaultValues: { address: '' }, + }); + + const handleAdd = useCallback( + async (data: AddDelegateFormData) => { + trackMatomoFormEvent('surveyDelegates'); + modals.pending(); + try { + await add(data.address); + formObject.reset(); + trackMatomoFormEvent('surveyDelegates', 'success'); + modals.success(); + } catch (e) { + modals.failed(e); + } + }, + [add, formObject, modals], + ); + + const handleRemove = useCallback( + async (address: string) => { + if (await confirmRemove({ address })) { + setRemovingAddress(address); + modals.pendingRemove(); + try { + await remove(address); + modals.successRemove(); + } catch (e) { + modals.failed(e); + } finally { + setRemovingAddress(null); + } + } + }, + [confirmRemove, modals, remove], + ); + + return ( + + + + Delegates can only access and submit Setup surveys on your behalf. + Contact and experience data remains private. Up to{' '} + {' '} + allowed + + + + + {delegates.map((delegate) => ( + handleRemove(delegate.address)} + isRemoving={removingAddress === delegate.address} + /> + ))} + + {delegates.length === 0 && ( + + No delegates added yet. + + )} + + {canAddMore && ( + + + + )} + + {!canAddMore && ( + + Maximum number of delegates reached. + + )} + + + + + ); +}; diff --git a/features/surveys/survey-delegates/use-delegates.ts b/features/surveys/survey-delegates/use-delegates.ts new file mode 100644 index 00000000..ed5bb5e4 --- /dev/null +++ b/features/surveys/survey-delegates/use-delegates.ts @@ -0,0 +1,66 @@ +import { useMutation, useQuery, useQueryClient } from '@tanstack/react-query'; +import { STRATEGY_LAZY } from 'consts'; +import { useNodeOperatorId } from 'modules/web3'; +import { useCallback } from 'react'; +import { useSurveysFetcher } from '../shared/use-surveys-fetcher'; +import { Delegate, DelegatesResponse, MAX_DELEGATES } from '../types'; + +export const useDelegates = () => { + const nodeOperatorId = useNodeOperatorId(); + const effectiveOperatorId = `csm-${nodeOperatorId}`; + const url = `${effectiveOperatorId}/delegates`; + const queryKey = ['surveys', effectiveOperatorId, 'delegates']; + const summaryQueryKey = ['surveys', effectiveOperatorId, 'summary']; + + const queryClient = useQueryClient(); + + const [fetcher, updater] = useSurveysFetcher( + undefined, + (data) => data.delegates[0], + ); + + const query = useQuery({ + queryKey, + queryFn: () => fetcher(url), + enabled: nodeOperatorId !== undefined, + ...STRATEGY_LAZY, + }); + + const addMutation = useMutation({ + mutationFn: (address: string) => + updater(url, { delegates: [{ address }] })(), + onSuccess: () => { + void queryClient.invalidateQueries({ queryKey }); + void queryClient.invalidateQueries({ queryKey: summaryQueryKey }); + }, + }); + + const removeMutation = useMutation({ + mutationFn: (address: string) => updater(`${url}/${address}`, null)(), + onSuccess: () => { + void queryClient.invalidateQueries({ queryKey }); + void queryClient.invalidateQueries({ queryKey: summaryQueryKey }); + }, + }); + + const add = useCallback( + (address: string) => addMutation.mutateAsync(address), + [addMutation], + ); + + const remove = useCallback( + (address: string) => removeMutation.mutateAsync(address), + [removeMutation], + ); + + return { + delegates: query.data?.delegates ?? [], + isLoading: query.isLoading, + error: query.error, + add, + remove, + isAdding: addMutation.isPending, + isRemoving: removeMutation.isPending, + canAddMore: (query.data?.delegates?.length ?? 0) < MAX_DELEGATES, + }; +}; diff --git a/features/surveys/survey-delegates/use-modal-stages.tsx b/features/surveys/survey-delegates/use-modal-stages.tsx new file mode 100644 index 00000000..7d78dd9e --- /dev/null +++ b/features/surveys/survey-delegates/use-modal-stages.tsx @@ -0,0 +1,43 @@ +import { + TransactionModalTransitStage, + TxStageFail, + TxStagePending, + TxStageSuccess, + useTransactionModalStage, +} from 'shared/transaction-modal'; +import { extractErrorMessage, getErrorCode } from 'utils'; + +const getModalStages = (transitStage: TransactionModalTransitStage) => ({ + pending: () => + transitStage( + , + ), + + success: () => + transitStage(), + + pendingRemove: () => + transitStage( + , + ), + + successRemove: () => + transitStage(), + + failed: (error: unknown) => + transitStage( + , + ), +}); + +export const useModalStages = () => useTransactionModalStage(getModalStages); diff --git a/features/surveys/survey-delegator/back-button.tsx b/features/surveys/survey-delegator/back-button.tsx new file mode 100644 index 00000000..13c2b3a4 --- /dev/null +++ b/features/surveys/survey-delegator/back-button.tsx @@ -0,0 +1,34 @@ +import { ArrowLeft, ButtonIcon } from '@lidofinance/lido-ui'; +import { PATH } from 'consts/urls'; +import { FC } from 'react'; +import { LocalLink } from 'shared/navigate'; +import { useSurveyContext } from '../surveys-provider'; + +type DelegatorBackButtonProps = { + operatorId?: string; +}; + +export const DelegatorBackButton: FC = ({ + operatorId, +}) => { + const { isOperator } = useSurveyContext(); + + const href = operatorId + ? (`${PATH.SURVEYS_DELEGATOR}/${operatorId}` as PATH) + : isOperator + ? PATH.SURVEYS_DELEGATOR + : PATH.SURVEYS; + + return ( + + } + > + Back + + + ); +}; diff --git a/features/surveys/survey-delegator/delegator-home.tsx b/features/surveys/survey-delegator/delegator-home.tsx new file mode 100644 index 00000000..becf1294 --- /dev/null +++ b/features/surveys/survey-delegator/delegator-home.tsx @@ -0,0 +1,39 @@ +import { Text } from '@lidofinance/lido-ui'; +import { PATH } from 'consts/urls'; +import { FC } from 'react'; +import { Stack, WhenLoaded } from 'shared/components'; +import { SurveyItem, SurveyLink, SurveySection } from '../components'; +import { useSurveyContext } from '../surveys-provider'; + +export const DelegatorHome: FC = () => { + const { delegatedOperators, isLoading } = useSurveyContext(); + + return ( + + + {delegatedOperators?.length === 0 ? ( + + You are not a delegate for any node operator yet. + + ) : ( + + {delegatedOperators?.map((operatorId) => ( + + + Manage setups + + + ))} + + )} + + + ); +}; diff --git a/features/surveys/survey-delegator/delegator-setup-form.tsx b/features/surveys/survey-delegator/delegator-setup-form.tsx new file mode 100644 index 00000000..eb4dd086 --- /dev/null +++ b/features/surveys/survey-delegator/delegator-setup-form.tsx @@ -0,0 +1,327 @@ +import { FC, useCallback, useMemo } from 'react'; +import { trackMatomoFormEvent } from 'utils/track-matomo-event'; +import { FormProvider, useForm } from 'react-hook-form'; +import { + FormTitle, + Plural, + SectionBlock, + Stack, + WhenLoaded, +} from 'shared/components'; +import { + CheckboxHookForm, + NumberInputHookForm, + SelectHookForm, + SubmitButtonHookForm, + TokenAmountInputHookForm, +} from 'shared/hook-form/controls'; +import { useSurveysSWR } from '../shared/use-surveys-swr'; +import { + CL_CLIENT_OPTIONS, + COUNTRY_OPTIONS, + DVT_OPTIONS, + EL_CLIENT_OPTIONS, + REMOTE_SIGNER_OPTIONS, + SERVER_TYPE_OPTIONS, + TOOL_OPTIONS, + VALIDATOR_CLIENT_OPTIONS, +} from '../survey-setup/options'; +import { + transformIncoming, + transformOutcoming, +} from '../survey-setup/transform'; +import { useModalStages } from '../survey-setup/use-modal-stages'; +import { useConfirmRemoveModal } from '../survey-setup/confirm-remove-modal'; +import { useNavigate } from 'shared/navigate'; +import { PATH } from 'consts/urls'; +import { SurveyButton } from '../components'; +import { Button } from '@lidofinance/lido-ui'; +import { Setup, SetupRaw, SetupsKeys } from '../types'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; + +const required = { required: true }; + +type DelegatorSetupFormProps = { + operatorId: string; + setupId?: string; +}; + +export const DelegatorSetupForm: FC = ({ + operatorId, + setupId, +}) => { + const isEditMode = !!setupId && setupId !== 'new'; + + const { + data: filled, + error, + mutate, + remove, + } = useSurveysSWR( + `setups${isEditMode ? '/' + setupId : ''}`, + { + operatorId, + skipFetching: !isEditMode, + invalidateOnMutate: true, + transformIncoming, + transformOutcoming, + }, + ); + + const data = useMemo( + () => (isEditMode ? filled : undefined), + [isEditMode, filled], + ); + + const { data: keys, mutate: mutateKeys } = useSurveysSWR( + 'setups/keys', + { operatorId }, + ); + + const filledWitoutCurrent = Math.max( + 0, + (keys?.filled ?? 0) - (data?.keysCount ?? 0), + ); + const keysLeft = Math.max(0, (keys?.total ?? 0) - filledWitoutCurrent); + + const maxKeys = Math.max(keysLeft, data?.keysCount ?? 0); + + const { txModalStages: modals } = useModalStages(); + const confirmRemove = useConfirmRemoveModal(); + const navigate = useNavigate(); + + const formObject = useForm({ + values: isEditMode ? data : undefined, + defaultValues: { + validatorSameAsCl: true, + }, + }); + + const validatorSameAsCl = formObject.watch('validatorSameAsCl'); + const keysCount = formObject.watch('keysCount'); + const keysRemain = Math.max(0, keysLeft - (keysCount ?? 0)); + + const handleSubmit = useCallback( + async (data: Setup) => { + trackMatomoFormEvent('surveyDelegatorSetup'); + modals.pending(); + try { + const res = await mutate(data); + void mutateKeys(); + if (!isEditMode && res?.index) { + void navigate( + `${PATH.SURVEYS_DELEGATOR}/${operatorId}/${res.index}` as PATH, + ); + } + trackMatomoFormEvent('surveyDelegatorSetup', 'success'); + modals.success(); + } catch (e) { + modals.failed(e); + } + }, + [modals, mutate, mutateKeys, isEditMode, navigate, operatorId], + ); + + const handleRemove = useCallback(async () => { + if (await confirmRemove({})) { + modals.pendingRemove(); + try { + await remove(); + void mutateKeys(); + void navigate(`${PATH.SURVEYS_DELEGATOR}/${operatorId}` as PATH); + modals.successRemove(); + } catch (e) { + modals.failed(e); + } + } + }, [confirmRemove, modals, mutateKeys, navigate, remove, operatorId]); + + const onKeysClick = useCallback(() => { + formObject.setValue('keysCount', keysLeft); + }, [formObject, keysLeft]); + + return ( + + + + +
      + + + Number of keys in this setup + + {keysRemain}{' '} + {' '} + left + + ) + } + /> + + + + + Are you using Distributed Validator Technology to run these + validators? + + + + + + + Which tool do you use to run your nodes/keys? + + + + + + + Which Execution Layer Client are you running? + + + + + + + Which Consensus Layer Client are you running? + + + + + + + What type of servers are your EL and CL nodes running on? + + + + + + + Which country are your EL and CL nodes in? + + + + + + Which Validator Client are you running? + + {!validatorSameAsCl && ( + + )} + + + {!validatorSameAsCl && ( + + + What type of servers are your Validator Clients running + on? + + + + )} + + {!validatorSameAsCl && ( + + + Which country are your Validator Clients in? + + + + )} + + + + Do you use a remote signer for your validator keys? + + + + + + What is your MEV-boost min-bid value? + + + Submit + +
      + {!!data && ( + + )} +
      +
      +
      +
      + ); +}; diff --git a/features/surveys/survey-delegator/delegator-setups.tsx b/features/surveys/survey-delegator/delegator-setups.tsx new file mode 100644 index 00000000..2f82e244 --- /dev/null +++ b/features/surveys/survey-delegator/delegator-setups.tsx @@ -0,0 +1,95 @@ +import { Plus, Text } from '@lidofinance/lido-ui'; +import { PATH } from 'consts/urls'; +import { FC } from 'react'; +import { Plural, Stack, WhenLoaded } from 'shared/components'; +import { formatDaysAgo } from 'utils'; +import { SurveyItem, SurveyLink, SurveySection, Warning } from '../components'; +import { useSurveysSWR } from '../shared/use-surveys-swr'; +import { SetupRaw, SetupsKeys } from '../types'; + +type DelegatorSetupsProps = { + operatorId: string; +}; + +export const DelegatorSetups: FC = ({ operatorId }) => { + const { data, isLoading } = useSurveysSWR('setups', { + operatorId, + }); + const { data: keys } = useSurveysSWR('setups/keys', { + operatorId, + }); + + const showSetups = !!(keys && (keys.total > 0 || keys.filled > 0)); + + return ( + + + {!showSetups ? ( + + No keys available for this operator. + + ) : ( + <> + {keys && keys.filled > keys.total && ( + + The number of keys has decreased. Please update the data + + )} + {data?.map((setup) => ( + + + Setup #{setup.index}{' '} + + {setup.keysCount}{' '} + + + + + Updated {formatDaysAgo(setup.updatedAt)} + + + } + > + + Edit + + + ))} + + {keys && keys.left > 0 && ( + } + color="primary" + variant="translucent" + fullwidth + path={`${PATH.SURVEYS_DELEGATOR}/${operatorId}/new`} + > + <> + Add new setup + <> + {' '} + ({keys.left}{' '} + {' '} + left) + + + + )} + + )} + + + ); +}; diff --git a/features/surveys/survey-delegator/index.ts b/features/surveys/survey-delegator/index.ts new file mode 100644 index 00000000..3d78fc7f --- /dev/null +++ b/features/surveys/survey-delegator/index.ts @@ -0,0 +1,4 @@ +export { DelegatorBackButton } from './back-button'; +export { DelegatorHome } from './delegator-home'; +export { DelegatorSetups } from './delegator-setups'; +export { DelegatorSetupForm } from './delegator-setup-form'; diff --git a/features/surveys/survey-experience/survey-experience.tsx b/features/surveys/survey-experience/survey-experience.tsx index bf38b73b..90619b18 100644 --- a/features/surveys/survey-experience/survey-experience.tsx +++ b/features/surveys/survey-experience/survey-experience.tsx @@ -1,4 +1,5 @@ import { FC, useCallback } from 'react'; +import { trackMatomoFormEvent } from 'utils/track-matomo-event'; import { FormProvider, useForm } from 'react-hook-form'; import { FormTitle, SectionBlock, Stack, WhenLoaded } from 'shared/components'; import { @@ -34,9 +35,11 @@ export const SurveyExperience: FC = () => { const handleSubmit = useCallback( async (data: ExperienceForm) => { + trackMatomoFormEvent('surveyExperience'); modals.pending(); try { await mutate(data); + trackMatomoFormEvent('surveyExperience', 'success'); modals.success(); } catch (e) { modals.failed(e); diff --git a/features/surveys/survey-experience/use-modal-stages.tsx b/features/surveys/survey-experience/use-modal-stages.tsx index 31f13dd8..622444a0 100644 --- a/features/surveys/survey-experience/use-modal-stages.tsx +++ b/features/surveys/survey-experience/use-modal-stages.tsx @@ -5,7 +5,7 @@ import { TxStageSuccess, useTransactionModalStage, } from 'shared/transaction-modal'; -import { getErrorCode } from 'utils'; +import { extractErrorMessage, getErrorCode } from 'utils'; const getModalStages = (transitStage: TransactionModalTransitStage) => ({ pending: () => @@ -26,7 +26,11 @@ const getModalStages = (transitStage: TransactionModalTransitStage) => ({ failed: (error: unknown) => transitStage( - , + , ), }); diff --git a/features/surveys/survey-how-did-you-learn-csm/survey-how-did-you-learn-csm.tsx b/features/surveys/survey-how-did-you-learn-csm/survey-how-did-you-learn-csm.tsx index 05cb64c4..169b6b0e 100644 --- a/features/surveys/survey-how-did-you-learn-csm/survey-how-did-you-learn-csm.tsx +++ b/features/surveys/survey-how-did-you-learn-csm/survey-how-did-you-learn-csm.tsx @@ -1,4 +1,5 @@ import { FC, useCallback, useEffect } from 'react'; +import { trackMatomoFormEvent } from 'utils/track-matomo-event'; import { FormProvider, useForm } from 'react-hook-form'; import { FormTitle, SectionBlock, Stack, WhenLoaded } from 'shared/components'; import { @@ -25,9 +26,11 @@ export const SurveyHowDidYouLearnCsm: FC = () => { const handleSubmit = useCallback( async (data: HowDidYouLearnCsm) => { + trackMatomoFormEvent('surveyLearnCsm'); modals.pending(); try { await mutate(data); + trackMatomoFormEvent('surveyLearnCsm', 'success'); modals.success(); } catch (e) { modals.failed(e); diff --git a/features/surveys/survey-how-did-you-learn-csm/use-modal-stages.tsx b/features/surveys/survey-how-did-you-learn-csm/use-modal-stages.tsx index 4a29a0d7..f4c22637 100644 --- a/features/surveys/survey-how-did-you-learn-csm/use-modal-stages.tsx +++ b/features/surveys/survey-how-did-you-learn-csm/use-modal-stages.tsx @@ -5,7 +5,7 @@ import { TxStageSuccess, useTransactionModalStage, } from 'shared/transaction-modal'; -import { getErrorCode } from 'utils'; +import { extractErrorMessage, getErrorCode } from 'utils'; const getModalStages = (transitStage: TransactionModalTransitStage) => ({ pending: () => @@ -21,7 +21,11 @@ const getModalStages = (transitStage: TransactionModalTransitStage) => ({ failed: (error: unknown) => transitStage( - , + , ), }); diff --git a/features/surveys/survey-setup/survey-setup.tsx b/features/surveys/survey-setup/survey-setup.tsx index 9def91de..2387dcc4 100644 --- a/features/surveys/survey-setup/survey-setup.tsx +++ b/features/surveys/survey-setup/survey-setup.tsx @@ -1,4 +1,5 @@ import { FC, useCallback, useMemo } from 'react'; +import { trackMatomoFormEvent } from 'utils/track-matomo-event'; import { FormProvider, useForm } from 'react-hook-form'; import { FormTitle, @@ -33,6 +34,9 @@ import { PATH } from 'consts/urls'; import { SurveyButton } from '../components'; import { Button } from '@lidofinance/lido-ui'; import { Setup, SetupRaw, SetupsKeys } from '../types'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { useSurveysFilled } from 'shared/hooks'; +import { useNodeOperatorId } from 'modules/web3'; const required = { required: true }; @@ -53,6 +57,9 @@ export const SurveySetup: FC<{ id?: string }> = ({ id }) => { const { data: keys, mutate: mutateKeys } = useSurveysSWR('setups/keys'); + const nodeOperatorId = useNodeOperatorId(); + const { refetch } = useSurveysFilled(nodeOperatorId); + const filledWitoutCurrent = Math.max( 0, (keys?.filled ?? 0) - (data?.keysCount ?? 0), @@ -78,19 +85,22 @@ export const SurveySetup: FC<{ id?: string }> = ({ id }) => { const handleSubmit = useCallback( async (data: Setup) => { + trackMatomoFormEvent('surveySetup'); modals.pending(); try { const res = await mutate(data); void mutateKeys(); + void refetch(); if (!id && res?.index) { void navigate(`${PATH.SURVEYS_SETUP}/${res.index}` as PATH); } + trackMatomoFormEvent('surveySetup', 'success'); modals.success(); } catch (e) { modals.failed(e); } }, - [modals, mutate, id, mutateKeys, navigate], + [modals, mutate, mutateKeys, refetch, id, navigate], ); const handleRemove = useCallback(async () => { @@ -216,7 +226,6 @@ export const SurveySetup: FC<{ id?: string }> = ({ id }) => { @@ -257,7 +266,6 @@ export const SurveySetup: FC<{ id?: string }> = ({ id }) => { )} @@ -278,8 +286,7 @@ export const SurveySetup: FC<{ id?: string }> = ({ id }) => { Submit diff --git a/features/surveys/survey-setup/transform.tsx b/features/surveys/survey-setup/transform.tsx index 0c0d593c..1ee026e9 100644 --- a/features/surveys/survey-setup/transform.tsx +++ b/features/surveys/survey-setup/transform.tsx @@ -1,15 +1,14 @@ -import { BigNumber } from 'ethers'; import { Setup, SetupRaw } from '../types'; export const transformOutcoming = (data: Setup): SetupRaw => ({ ...data, - mevMinBid: data.mevMinBid?.toString(), + mevMinBid: data.mevMinBid?.toString() || null, validatorClient: data.validatorSameAsCl ? '' : data.validatorClient, validatorServerType: data.validatorSameAsCl ? '' : data.validatorServerType, validatorCountry: data.validatorSameAsCl ? '' : data.validatorCountry, }); export const transformIncoming = (data: SetupRaw): Setup => ({ ...data, - mevMinBid: BigNumber.from(data.mevMinBid), + mevMinBid: data.mevMinBid ? BigInt(data.mevMinBid) : undefined, validatorSameAsCl: data.validatorSameAsCl ?? false, }); diff --git a/features/surveys/survey-setup/use-modal-stages.tsx b/features/surveys/survey-setup/use-modal-stages.tsx index 7ba4368a..1aa8c357 100644 --- a/features/surveys/survey-setup/use-modal-stages.tsx +++ b/features/surveys/survey-setup/use-modal-stages.tsx @@ -5,7 +5,7 @@ import { TxStageSuccess, useTransactionModalStage, } from 'shared/transaction-modal'; -import { getErrorCode } from 'utils'; +import { extractErrorMessage, getErrorCode } from 'utils'; const getModalStages = (transitStage: TransactionModalTransitStage) => ({ pending: () => @@ -31,7 +31,11 @@ const getModalStages = (transitStage: TransactionModalTransitStage) => ({ failed: (error: unknown) => transitStage( - , + , ), }); diff --git a/features/surveys/surveys-contacts-page.tsx b/features/surveys/surveys-contacts-page.tsx index 8e087bca..d95933fa 100644 --- a/features/surveys/surveys-contacts-page.tsx +++ b/features/surveys/surveys-contacts-page.tsx @@ -1,15 +1,12 @@ import { FC } from 'react'; -import { NoSSRWrapper } from 'shared/components'; -import { Layout } from 'shared/layout'; -import { SurveyContacts } from './survey-contacts'; import { BackButton } from './shared'; +import { SurveyContacts } from './survey-contacts'; +import { SurveyOperatorGate } from './surveys-provider'; export const SurveysContactsPage: FC = () => ( - + - - - - + + ); diff --git a/features/surveys/surveys-delegates-page.tsx b/features/surveys/surveys-delegates-page.tsx new file mode 100644 index 00000000..324c8c48 --- /dev/null +++ b/features/surveys/surveys-delegates-page.tsx @@ -0,0 +1,12 @@ +import { FC } from 'react'; + +import { BackButton } from './shared'; +import { SurveyDelegates } from './survey-delegates'; +import { SurveyOperatorGate } from './surveys-provider'; + +export const SurveysDelegatesPage: FC = () => ( + + + + +); diff --git a/features/surveys/surveys-delegator-page.tsx b/features/surveys/surveys-delegator-page.tsx new file mode 100644 index 00000000..c3964fc8 --- /dev/null +++ b/features/surveys/surveys-delegator-page.tsx @@ -0,0 +1,54 @@ +import { FC } from 'react'; +import { NoSSRWrapper } from 'shared/components'; +import { BackButton } from './shared'; +import { + DelegatorBackButton, + DelegatorHome, + DelegatorSetupForm, + DelegatorSetups, +} from './survey-delegator'; +import { SurveyDelegatorGate } from './surveys-provider'; + +type SurveysDelegatorPageProps = { + operatorId?: string; + setupId?: string; +}; + +export const SurveysDelegatorPage: FC = ({ + operatorId, + setupId, +}) => { + // No operatorId means we're at the delegator home page (accessible to all) + if (!operatorId) { + return ( + <> + + + + + + ); + } + + // operatorId but no setupId means we're viewing setups for an operator + if (!setupId) { + return ( + <> + + + + + + ); + } + + // Both operatorId and setupId means we're editing/adding a setup + return ( + <> + + + + + + ); +}; diff --git a/features/surveys/surveys-experience-page.tsx b/features/surveys/surveys-experience-page.tsx index 6faf8d8c..b99f71ad 100644 --- a/features/surveys/surveys-experience-page.tsx +++ b/features/surveys/surveys-experience-page.tsx @@ -1,15 +1,12 @@ import { FC } from 'react'; -import { NoSSRWrapper } from 'shared/components'; -import { Layout } from 'shared/layout'; import { BackButton } from './shared'; import { SurveyExperience } from './survey-experience'; +import { SurveyOperatorGate } from './surveys-provider'; export const SurveysExperiencePage: FC = () => ( - + - - - - + + ); diff --git a/features/surveys/surveys-home-page.tsx b/features/surveys/surveys-home-page.tsx index 09ddb197..336f2bb7 100644 --- a/features/surveys/surveys-home-page.tsx +++ b/features/surveys/surveys-home-page.tsx @@ -1,13 +1,5 @@ import { FC } from 'react'; -import { NoSSRWrapper } from 'shared/components'; -import { Layout } from 'shared/layout'; import { SurveysHome } from './surveys-home/surverys-home'; -export const SurveysHomePage: FC = () => ( - - - - - -); +export const SurveysHomePage: FC = () => ; diff --git a/features/surveys/surveys-home/confirm-erase-modal.tsx b/features/surveys/surveys-home/confirm-erase-modal.tsx index 718e1d9e..d2aaaa58 100644 --- a/features/surveys/surveys-home/confirm-erase-modal.tsx +++ b/features/surveys/surveys-home/confirm-erase-modal.tsx @@ -9,15 +9,7 @@ export const ConfirmEraseModal: ModalComponentType = ({ ...props }) => { return ( - - // Are you sure you want to erase your data from the database? - // - // } - onClose={onReject} - > + diff --git a/features/surveys/surveys-home/surverys-home.tsx b/features/surveys/surveys-home/surverys-home.tsx index 21e5f9c0..220b85d8 100644 --- a/features/surveys/surveys-home/surverys-home.tsx +++ b/features/surveys/surveys-home/surverys-home.tsx @@ -1,143 +1,19 @@ -import { PATH } from 'consts/urls'; -import { FC, useCallback } from 'react'; -import { Plural, Stack, WhenLoaded } from 'shared/components'; -import { - SurveyLink, - SurveyItem, - SurveySection, - SurveyButton, - Warning, -} from '../components'; -import { useSurveysSWR } from '../shared/use-surveys-swr'; -import { useConfirmEraseModal } from './confirm-erase-modal'; -import { Divider, Plus, Text } from '@lidofinance/lido-ui'; -import { SetupsKeys, Summary } from '../types'; +import { FC } from 'react'; +import { WhenLoaded } from 'shared/components'; +import { DelegatorHome } from '../survey-delegator'; +import { useSurveyContext } from '../surveys-provider'; +import { SurveysOperatorHome } from './surverys-operator-home'; +import { SurveysEmpty } from './surveys-empty'; export const SurveysHome: FC = () => { - const { data, isLoading, remove } = useSurveysSWR('summary'); - const { data: keys, mutate: mutateKeys } = - useSurveysSWR('setups/keys'); - - const confirmModal = useConfirmEraseModal(); - - const handleErase = useCallback(async () => { - if (await confirmModal({})) { - await remove(); - void mutateKeys(); - } - }, [confirmModal, mutateKeys, remove]); + const { mode, isLoading } = useSurveyContext(); return ( - - - - - {data?.contacts ? 'Filled' : 'Fill in'} - - - - - - - - {data?.howDidYouLearnCsm ? 'Filled' : 'Fill in'} - - - - - {data?.experience ? 'Filled' : 'Fill in'} - - - - - {keys && (keys.total > 0 || keys.filled > 0) && ( - - {keys && keys.filled > keys.total && ( - - The number of your keys has decreased. Please update the data - - )} - {data?.setups.map((setup) => ( - - Setup #{setup.index}{' '} - - {setup.keysCount}{' '} - - - - } - > - - Edit - - - ))} - - {keys && keys.left > 0 && ( - } - color="primary" - variant="translucent" - fullwidth - path={PATH.SURVEYS_SETUP} - > - <> - Add new setup - <> - {' '} - ({keys.left}{' '} - left) - - - - )} - - )} - - {(data?.contacts || - data?.experience || - data?.howDidYouLearnCsm || - (data?.setups && data.setups.length > 0)) && ( - <> - - - - - - )} + } + > + {mode.type === 'delegator' ? : } ); }; diff --git a/features/surveys/surveys-home/surverys-operator-home.tsx b/features/surveys/surveys-home/surverys-operator-home.tsx new file mode 100644 index 00000000..66f56745 --- /dev/null +++ b/features/surveys/surveys-home/surverys-operator-home.tsx @@ -0,0 +1,200 @@ +import { Divider, Plus, Text } from '@lidofinance/lido-ui'; +import { PATH } from 'consts/urls'; +import { FC, useCallback } from 'react'; +import { Plural, Stack, WhenLoaded } from 'shared/components'; +import { formatDaysAgo, plural } from 'utils'; +import { + SurveyButton, + SurveyItem, + SurveyLink, + SurveySection, + Warning, +} from '../components'; +import { useSurveysSWR } from '../shared/use-surveys-swr'; +import { useSurveyContext } from '../surveys-provider'; +import { MAX_DELEGATES, SetupsKeys, Summary } from '../types'; +import { useConfirmEraseModal } from './confirm-erase-modal'; + +export const SurveysOperatorHome: FC = () => { + const { data, isLoading, remove } = useSurveysSWR('summary'); + const { data: keys, mutate: mutateKeys } = + useSurveysSWR('setups/keys'); + const { delegatedOperators } = useSurveyContext(); + + const confirmModal = useConfirmEraseModal(); + + const handleErase = useCallback(async () => { + if (await confirmModal({})) { + await remove(); + void mutateKeys(); + } + }, [confirmModal, mutateKeys, remove]); + + const showErase = !!( + data?.contacts || + data?.experience || + data?.howDidYouLearnCsm || + (data?.setups && data.setups.length > 0) + ); + const showSetups = !!(keys && (keys.total > 0 || keys.filled > 0)); + + return ( + + + + + {data?.contacts ? 'Filled' : 'Fill in'} + + + + + + + + {data?.howDidYouLearnCsm ? 'Filled' : 'Fill in'} + + + + + {data?.experience ? 'Filled' : 'Fill in'} + + + + + {showSetups && ( + + {keys && keys.filled > keys.total && ( + + The number of your keys has decreased. Please update the data + + )} + {data?.setups.map((setup) => ( + + + Setup #{setup.index}{' '} + + {setup.keysCount}{' '} + + + + + Updated {formatDaysAgo(setup.updatedAt)} + + + } + > + + Edit + + + ))} + + {keys && keys.left > 0 && ( + } + color="primary" + variant="translucent" + fullwidth + path={PATH.SURVEYS_SETUP} + > + <> + Add new setup + <> + {' '} + ({keys.left}{' '} + left) + + + + )} + + )} + + + + Delegates + + {data?.delegates.length} + + + } + > + Manage + + + + {showErase && ( + <> + + + + + + )} + + {delegatedOperators.length > 0 && ( + <> + + + + Operators + + {delegatedOperators.length} + + + } + > + Manage + + + + )} + + ); +}; diff --git a/features/surveys/surveys-home/surveys-empty.tsx b/features/surveys/surveys-home/surveys-empty.tsx new file mode 100644 index 00000000..afaafc5e --- /dev/null +++ b/features/surveys/surveys-home/surveys-empty.tsx @@ -0,0 +1,12 @@ +import { FC } from 'react'; +import { SurveySection } from '../components'; +import { Text } from '@lidofinance/lido-ui'; + +export const SurveysEmpty: FC = () => ( + + + You are not a node operator and have not been added as a delegate for any + operators. + + +); diff --git a/features/surveys/surveys-how-did-you-learn-page.tsx b/features/surveys/surveys-how-did-you-learn-page.tsx index 5f1de9dd..adf6c330 100644 --- a/features/surveys/surveys-how-did-you-learn-page.tsx +++ b/features/surveys/surveys-how-did-you-learn-page.tsx @@ -1,15 +1,12 @@ import { FC } from 'react'; -import { NoSSRWrapper } from 'shared/components'; -import { Layout } from 'shared/layout'; import { BackButton } from './shared'; import { SurveyHowDidYouLearnCsm } from './survey-how-did-you-learn-csm'; +import { SurveyOperatorGate } from './surveys-provider'; export const SurveysHowDidYouLearnCsmPage: FC = () => ( - + - - - - + + ); diff --git a/features/surveys/surveys-page.tsx b/features/surveys/surveys-page.tsx new file mode 100644 index 00000000..302b69e6 --- /dev/null +++ b/features/surveys/surveys-page.tsx @@ -0,0 +1,60 @@ +import { PATH } from 'consts/urls'; +import { FC, useMemo } from 'react'; +import { SiweAuthGate, SiweAuthProvider } from 'shared/siwe'; +import { SurveysContactsPage } from './surveys-contacts-page'; +import { SurveysDelegatesPage } from './surveys-delegates-page'; +import { SurveysExperiencePage } from './surveys-experience-page'; +import { SurveysHowDidYouLearnCsmPage } from './surveys-how-did-you-learn-page'; +import { SurveysSetupPage } from './surveys-setup-page'; +import { SurveysDelegatorPage } from './surveys-delegator-page'; +import { SurveysHomePage } from './surveys-home-page'; +import { SurveyProvider } from './surveys-provider'; +import { SurveysSignInPage } from './surveys-signin-page'; +import { Layout } from 'shared/layout'; +import { NoSSRWrapper } from 'shared/components'; +import { useDappStatus } from 'modules/web3'; +import { Fallback } from 'shared/wallet'; + +export const SurveysPage: FC<{ slug?: string[] }> = ({ slug = [] }) => { + const { isSupportedChain, isWalletConnected } = useDappStatus(); + const isWrongChain = isWalletConnected && !isSupportedChain; + + const page = useMemo(() => { + const [page, id1, id2] = slug; + const path = `/surveys/${page}`; + + switch (path) { + case PATH.SURVEYS_CONTACTS: + return ; + case PATH.SURVEYS_DELEGATES: + return ; + case PATH.SURVEYS_EXPERIENCE: + return ; + case PATH.SURVEYS_HOW_DID_YOU_LEARN_CSM: + return ; + case PATH.SURVEYS_SETUP: + return ; + case PATH.SURVEYS_DELEGATOR: + return ; + + default: + return ; + } + }, [slug]); + + return ( + + + {isWrongChain && } + + }> + {page} + + + + + ); +}; diff --git a/features/surveys/surveys-provider/index.ts b/features/surveys/surveys-provider/index.ts new file mode 100644 index 00000000..a1915f17 --- /dev/null +++ b/features/surveys/surveys-provider/index.ts @@ -0,0 +1,7 @@ +export { + SurveysProvider as SurveyProvider, + useSurveyContext, +} from './survey-provider'; +export type { SurveyMode, SurveyContextValue } from './survey-provider'; +export { SurveyOperatorGate } from './survey-operator-gate'; +export { SurveyDelegatorGate } from './survey-delegator-gate'; diff --git a/features/surveys/surveys-provider/survey-delegator-gate.tsx b/features/surveys/surveys-provider/survey-delegator-gate.tsx new file mode 100644 index 00000000..b49106f7 --- /dev/null +++ b/features/surveys/surveys-provider/survey-delegator-gate.tsx @@ -0,0 +1,26 @@ +import { FC, PropsWithChildren } from 'react'; +import { PATH } from 'consts/urls'; +import { Navigate } from 'shared/navigate'; +import { WhenLoaded } from 'shared/components'; +import { useSurveyContext } from './survey-provider'; + +type Props = { + operatorId: string; +}; + +export const SurveyDelegatorGate: FC> = ({ + operatorId, + children, +}) => { + const { isLoading, delegatedOperators } = useSurveyContext(); + + return ( + + {delegatedOperators.includes(operatorId) ? ( + children + ) : ( + + )} + + ); +}; diff --git a/features/surveys/surveys-provider/survey-operator-gate.tsx b/features/surveys/surveys-provider/survey-operator-gate.tsx new file mode 100644 index 00000000..1789cbaf --- /dev/null +++ b/features/surveys/surveys-provider/survey-operator-gate.tsx @@ -0,0 +1,15 @@ +import { FC, PropsWithChildren } from 'react'; +import { PATH } from 'consts/urls'; +import { Navigate } from 'shared/navigate'; +import { WhenLoaded } from 'shared/components'; +import { useSurveyContext } from './survey-provider'; + +export const SurveyOperatorGate: FC = ({ children }) => { + const { isLoading, isOperator } = useSurveyContext(); + + return ( + + {isOperator ? children : } + + ); +}; diff --git a/features/surveys/surveys-provider/survey-provider.tsx b/features/surveys/surveys-provider/survey-provider.tsx new file mode 100644 index 00000000..750d7f3a --- /dev/null +++ b/features/surveys/surveys-provider/survey-provider.tsx @@ -0,0 +1,60 @@ +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useNodeOperator } from 'modules/web3'; +import { + createContext, + FC, + PropsWithChildren, + useContext, + useMemo, +} from 'react'; +import invariant from 'tiny-invariant'; +import { useDelegatedOperators } from './use-delegated-operators'; + +export type SurveyMode = + | { type: 'loading' } + | { type: 'operator'; operatorId: NodeOperatorId } + | { type: 'delegator'; delegatedOperators: string[] } + | { type: 'empty' }; + +export type SurveyContextValue = { + mode: SurveyMode; + isLoading: boolean; + isOperator: boolean; + delegatedOperators: string[]; +}; + +const SurveyContext = createContext(null); + +export const useSurveyContext = (): SurveyContextValue => { + const value = useContext(SurveyContext); + invariant(value, 'useSurveyContext must be used within SurveyProvider'); + return value; +}; + +export const SurveysProvider: FC = ({ children }) => { + const { nodeOperator, isPending: operatorPending } = useNodeOperator(); + const { data: delegatedOperators, isLoading: delegatorLoading } = + useDelegatedOperators(nodeOperator?.id); + + const isLoading = operatorPending || delegatorLoading; + const isOperator = !!nodeOperator; + + const mode = useMemo((): SurveyMode => { + if (isLoading) return { type: 'loading' }; + if (nodeOperator) return { type: 'operator', operatorId: nodeOperator.id }; + if (delegatedOperators?.length) + return { type: 'delegator', delegatedOperators }; + return { type: 'empty' }; + }, [isLoading, nodeOperator, delegatedOperators]); + + const value: SurveyContextValue = { + mode, + isLoading, + isOperator, + delegatedOperators: delegatedOperators ?? [], + }; + + return ( + {children} + ); +}; diff --git a/features/surveys/surveys-provider/use-delegated-operators.ts b/features/surveys/surveys-provider/use-delegated-operators.ts new file mode 100644 index 00000000..224bd8a0 --- /dev/null +++ b/features/surveys/surveys-provider/use-delegated-operators.ts @@ -0,0 +1,18 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_LAZY } from 'consts'; +import { useSurveysFetcher } from '../shared/use-surveys-fetcher'; +import { DelegatedOperatorsResponse } from '../types'; + +export const useDelegatedOperators = (nodeOperatorId?: bigint) => { + const excludeId = + nodeOperatorId !== undefined ? `csm-${nodeOperatorId}` : undefined; + + const [fetcher] = useSurveysFetcher(); + + return useQuery({ + queryKey: ['surveys', 'delegates/my'], + queryFn: () => fetcher('delegates/my'), + ...STRATEGY_LAZY, + select: (data) => data.nodeOperatorIds.filter((id) => id !== excludeId), + }); +}; diff --git a/features/surveys/surveys-setup-page.tsx b/features/surveys/surveys-setup-page.tsx index 5cbe9acc..428e4198 100644 --- a/features/surveys/surveys-setup-page.tsx +++ b/features/surveys/surveys-setup-page.tsx @@ -1,15 +1,12 @@ import { FC } from 'react'; -import { NoSSRWrapper } from 'shared/components'; -import { Layout } from 'shared/layout'; import { BackButton } from './shared'; import { SurveySetup } from './survey-setup'; +import { SurveyOperatorGate } from './surveys-provider'; export const SurveysSetupPage: FC<{ id?: string }> = ({ id }) => ( - + - - - - + + ); diff --git a/features/surveys/surveys-signin-page.tsx b/features/surveys/surveys-signin-page.tsx index ea991b16..e7921a1b 100644 --- a/features/surveys/surveys-signin-page.tsx +++ b/features/surveys/surveys-signin-page.tsx @@ -1,13 +1,10 @@ import { FC } from 'react'; -import { NoSSRWrapper } from 'shared/components'; -import { Layout } from 'shared/layout'; -import { SiweSignIn } from './siwe-sign-in'; +import { useDappStatus } from 'modules/web3'; +import { SiweConnect, SiweSignIn } from './siwe-sign-in'; -export const SurveysSignInPage: FC = () => ( - - - - - -); +export const SurveysSignInPage: FC = () => { + const { isAccountActive } = useDappStatus(); + + return <>{isAccountActive ? : }; +}; diff --git a/features/surveys/types.ts b/features/surveys/types.ts index abc1360d..b660f664 100644 --- a/features/surveys/types.ts +++ b/features/surveys/types.ts @@ -1,5 +1,3 @@ -import { BigNumber } from 'ethers'; - export type Contact = { name?: string; discord?: string; @@ -30,6 +28,7 @@ export type SetupsKeys = { }; export type Setup = { + updatedAt: string; index: number; keysCount: number; dvt: string; @@ -37,17 +36,17 @@ export type Setup = { elClient: string; clClient: string; clinetsServerType: string; - clientsCountry: string; + clientsCountry?: string; validatorClient: string; validatorServerType: string; - validatorCountry: string; + validatorCountry?: string; validatorSameAsCl?: boolean; remoteSigner: string; - mevMinBid?: BigNumber; + mevMinBid?: bigint; }; export type SetupRaw = Omit & { - mevMinBid?: string; + mevMinBid?: string | null; }; export type Summary = { @@ -55,4 +54,19 @@ export type Summary = { setups: SetupRaw[]; experience: Experience | null; howDidYouLearnCsm: HowDidYouLearnCsm | null; + delegates: Delegate[]; +}; + +export type Delegate = { + address: string; +}; + +export type DelegatesResponse = { + delegates: Delegate[]; +}; + +export const MAX_DELEGATES = 5; + +export type DelegatedOperatorsResponse = { + nodeOperatorIds: string[]; // e.g., ['csm-1', 'csm-42'] }; diff --git a/features/transfer-keys/index.ts b/features/transfer-keys/index.ts new file mode 100644 index 00000000..664ed216 --- /dev/null +++ b/features/transfer-keys/index.ts @@ -0,0 +1,2 @@ +export * from './transfer-keys-page'; +export * from './transfer-keys'; diff --git a/features/transfer-keys/transfer-keys-page.tsx b/features/transfer-keys/transfer-keys-page.tsx new file mode 100644 index 00000000..62d14196 --- /dev/null +++ b/features/transfer-keys/transfer-keys-page.tsx @@ -0,0 +1,19 @@ +import { FC } from 'react'; + +import { Layout } from 'shared/layout'; +import { KeysPageSwitcher } from 'shared/navigate'; +import { TransferKeys } from './transfer-keys'; +import { Faq } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; + +export const TransferKeysPage: FC = () => ( + + + + + +); diff --git a/features/transfer-keys/transfer-keys.tsx b/features/transfer-keys/transfer-keys.tsx new file mode 100644 index 00000000..45a44f2f --- /dev/null +++ b/features/transfer-keys/transfer-keys.tsx @@ -0,0 +1,14 @@ +import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; +import { useWeb3Key } from 'shared/hooks'; +import { TransferKeysForm } from './transfer-keys/transfer-keys-form'; + +export const TransferKeys = () => { + const key = useWeb3Key(); + return ( + <> + + + + + ); +}; diff --git a/features/transfer-keys/transfer-keys/confirm-cleanup-modal.tsx b/features/transfer-keys/transfer-keys/confirm-cleanup-modal.tsx new file mode 100644 index 00000000..2003a13a --- /dev/null +++ b/features/transfer-keys/transfer-keys/confirm-cleanup-modal.tsx @@ -0,0 +1,42 @@ +import { Button, Modal, Text } from '@lidofinance/lido-ui'; + +import type { ModalComponentType } from 'providers/modal-provider'; +import { Stack } from 'shared/components'; +import { ConfirmModalProps } from 'shared/hooks'; + +export const ConfirmCleanupModal: ModalComponentType = ({ + onConfirm, + onReject, + ...props +}) => { + return ( + + + + + Two transactions required + + + To ensure correct positioning of the new keys in the priority queue, + you will need to perform two transactions: + + +
        +
      1. + First transaction will transfer your keys to the priority queue +
      2. +
      3. + Second transaction will cleanup the queue to maintain correct + priority for your new keys +
      4. +
      +
      +
      + + +
      +
      + ); +}; diff --git a/features/transfer-keys/transfer-keys/context/index.ts b/features/transfer-keys/transfer-keys/context/index.ts new file mode 100644 index 00000000..c45a4c9a --- /dev/null +++ b/features/transfer-keys/transfer-keys/context/index.ts @@ -0,0 +1,3 @@ +export * from './transfer-keys-data-provider'; +export * from './transfer-keys-form-provider'; +export * from './types'; diff --git a/features/transfer-keys/transfer-keys/context/transfer-keys-data-provider.tsx b/features/transfer-keys/transfer-keys/context/transfer-keys-data-provider.tsx new file mode 100644 index 00000000..51a675ba --- /dev/null +++ b/features/transfer-keys/transfer-keys/context/transfer-keys-data-provider.tsx @@ -0,0 +1,90 @@ +import { + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS_TO_MIGRATE, + useNodeOperatorId, + useOperatorInfo, + useOperatorKeysWithStatus, + useOperatorCurveId, + useCurveParameters, + KEY_DEPOSIT_QUEUE_BATCHES, +} from 'modules/web3'; +import { useOperatorKeysToMigrate } from 'modules/web3/hooks/use-operator-keys-to-migrate'; +import { FC, PropsWithChildren, useCallback, useMemo } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type TransferKeysFormNetworkData } from './types'; +import { KEY_STATUS } from '@lidofinance/lido-csm-sdk'; +import { canAddMorePriorityKeys } from 'utils'; + +const useTransferKeysFormNetworkData: NetworkData< + TransferKeysFormNetworkData +> = () => { + const nodeOperatorId = useNodeOperatorId(); + + const infoQuery = useOperatorInfo(nodeOperatorId); + const keysToMigrateQuery = useOperatorKeysToMigrate(nodeOperatorId); + + const info = infoQuery.data; + const keysToMigrate = keysToMigrateQuery.data; + + const isInfoLoading = infoQuery.isPending; + const isKeysToMigrateLoading = keysToMigrateQuery.isPending; + + const { data: _keys, isPending: isKeysLoading } = + useOperatorKeysWithStatus(nodeOperatorId); + + const { data: curveId } = useOperatorCurveId(nodeOperatorId); + + const { data: curveParameters } = useCurveParameters(curveId); + + const needCleanup = + info && curveParameters && canAddMorePriorityKeys(info, curveParameters); + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ + KEY_OPERATOR_INFO, + KEY_OPERATOR_KEYS_TO_MIGRATE, + KEY_DEPOSIT_QUEUE_BATCHES, + ]); + }, [invalidate]); + + const keys = useMemo( + () => + _keys + ?.filter((key) => key.statuses.includes(KEY_STATUS.DEPOSITABLE)) + .slice(0, keysToMigrate ?? 0), + [_keys, keysToMigrate], + ); + + return { + data: { + nodeOperatorId, + keysToMigrate, + info, + keys, + needCleanup, + } as TransferKeysFormNetworkData, + isPending: isInfoLoading || isKeysLoading || isKeysToMigrateLoading, + revalidate, + }; +}; + +export const useTransferKeysFormData = useFormData; + +export const TransferKeysDataProvider: FC = ({ + children, +}) => { + const networkData = useTransferKeysFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/transfer-keys/transfer-keys/context/transfer-keys-form-provider.tsx b/features/transfer-keys/transfer-keys/context/transfer-keys-form-provider.tsx new file mode 100644 index 00000000..d6d80d24 --- /dev/null +++ b/features/transfer-keys/transfer-keys/context/transfer-keys-form-provider.tsx @@ -0,0 +1,23 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormProvider, useForm } from 'react-hook-form'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { type TransferKeysFormInputType } from './types'; +import { useTransferKeysSubmit } from './use-transfer-keys-submit'; + +export const TransferKeysFormProvider: FC = ({ + children, +}) => { + const formObject = useForm({ + mode: 'onChange', + }); + + const submitter = useTransferKeysSubmit(); + + return ( + + + {children} + + + ); +}; diff --git a/features/transfer-keys/transfer-keys/context/types.ts b/features/transfer-keys/transfer-keys/context/types.ts new file mode 100644 index 00000000..cf5517ff --- /dev/null +++ b/features/transfer-keys/transfer-keys/context/types.ts @@ -0,0 +1,17 @@ +import { + KeyWithStatus, + NodeOperatorId, + NodeOperatorInfo, +} from '@lidofinance/lido-csm-sdk'; + +export type TransferKeysFormInputType = { + count: number; +}; + +export type TransferKeysFormNetworkData = { + nodeOperatorId: NodeOperatorId; + keys: KeyWithStatus[]; + info: NodeOperatorInfo; + keysToMigrate: number; + needCleanup: boolean; +}; diff --git a/features/transfer-keys/transfer-keys/context/use-transfer-keys-submit.ts b/features/transfer-keys/transfer-keys/context/use-transfer-keys-submit.ts new file mode 100644 index 00000000..74ce2e9f --- /dev/null +++ b/features/transfer-keys/transfer-keys/context/use-transfer-keys-submit.ts @@ -0,0 +1,97 @@ +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; +import { useCallback } from 'react'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; +import { handleTxError } from 'shared/transaction-modal'; +import { useConfirmCleanupModal } from '../hooks/use-confirm-cleanup-modal'; +import { useTxModalStagesTransferKeys } from '../hooks/use-tx-modal-stages-transfer-keys'; +import { + TransferKeysFormInputType, + TransferKeysFormNetworkData, +} from './types'; + +export const useTransferKeysSubmit: FormSubmitterHook< + TransferKeysFormInputType, + TransferKeysFormNetworkData +> = () => { + const { csm } = useLidoSDK(); + const { txModalStages } = useTxModalStagesTransferKeys(); + const confirm = useConfirmCleanupModal(); + + return useCallback( + async (_: TransferKeysFormInputType, data, { onConfirm, onRetry }) => { + const { nodeOperatorId, keysToMigrate: keysCount, needCleanup } = data; + + if (needCleanup && !(await confirm({}))) { + return false; + } + + try { + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ keysCount }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ keysCount }, payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.success({ keysCount }, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.keys.migrateToPriorityQueue({ + nodeOperatorId, + callback, + }); + + const promise = onConfirm?.(); + + if (needCleanup) { + const callback: TransactionCallback = async ({ stage, payload }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.signCleanup(); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pendingCleanup(payload.hash); + break; + case TransactionCallbackStage.DONE: { + txModalStages.successCleanup({ keysCount }, payload.hash); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.depositQueue.clean({ callback }); + } + + await promise; + + return true; + } catch (error) { + return handleTxError(error, txModalStages, onRetry); + } + }, + [confirm, csm.keys, csm.depositQueue, txModalStages], + ); +}; diff --git a/features/transfer-keys/transfer-keys/controls/cleanup-info-note.tsx b/features/transfer-keys/transfer-keys/controls/cleanup-info-note.tsx new file mode 100644 index 00000000..14ba3430 --- /dev/null +++ b/features/transfer-keys/transfer-keys/controls/cleanup-info-note.tsx @@ -0,0 +1,18 @@ +import { WarningBlock } from 'shared/components'; +import { useTransferKeysFormData } from '../context'; + +export const CleanupInfoNote = () => { + const { needCleanup } = useTransferKeysFormData(); + + if (!needCleanup) { + return null; + } + + return ( + + To ensure correct positioning of the new keys in the priority queue, you + will need to perform two transactions: keys transfer and queue cleanup. + Both transactions will be executed sequentially + + ); +}; diff --git a/features/transfer-keys/transfer-keys/controls/keys-selector.tsx b/features/transfer-keys/transfer-keys/controls/keys-selector.tsx new file mode 100644 index 00000000..dea4bbfd --- /dev/null +++ b/features/transfer-keys/transfer-keys/controls/keys-selector.tsx @@ -0,0 +1,41 @@ +import { Block, Box, Text } from '@lidofinance/lido-ui'; +import { + FormTitle, + IconTooltip, + Latice, + Pubkey, + Stack, +} from 'shared/components'; +import { useTransferKeysFormData } from '../context'; + +export const KeysSelector = () => { + const { keys } = useTransferKeysFormData(); + + return ( + <> + + Transfer keys to priority queue + + + + + + Why you might need to transfer your keys: + + + CSM now allows Identified Community Stakers (ICS) to move their keys + from the legacy queue to the priority queue. Transferring keys to + the priority queue may reduce waiting times in the CSM deposit + queue, as keys in the priority queue are deposited before those in + the legacy queue. + + + + + {keys?.map(({ pubkey }) => ( + + ))} + + + ); +}; diff --git a/features/transfer-keys/transfer-keys/controls/submit-button.tsx b/features/transfer-keys/transfer-keys/controls/submit-button.tsx new file mode 100644 index 00000000..0fb5ba44 --- /dev/null +++ b/features/transfer-keys/transfer-keys/controls/submit-button.tsx @@ -0,0 +1,24 @@ +import { SubmitButtonHookForm } from 'shared/hook-form/controls'; +import { useTransferKeysFormData } from '../context'; +import { Plural } from 'shared/components'; + +export const SubmitButton = () => { + const { keysToMigrate, needCleanup } = useTransferKeysFormData(); + + return ( + + {needCleanup ? ( + <> + Transfer{' '} + {' '} + and cleanup + + ) : ( + <> + Transfer{' '} + {' '} + + )} + + ); +}; diff --git a/features/transfer-keys/transfer-keys/hooks/use-confirm-cleanup-modal.ts b/features/transfer-keys/transfer-keys/hooks/use-confirm-cleanup-modal.ts new file mode 100644 index 00000000..fb77e99f --- /dev/null +++ b/features/transfer-keys/transfer-keys/hooks/use-confirm-cleanup-modal.ts @@ -0,0 +1,4 @@ +import { getUseConfirmModal } from 'shared/hooks'; +import { ConfirmCleanupModal } from '../confirm-cleanup-modal'; + +export const useConfirmCleanupModal = getUseConfirmModal(ConfirmCleanupModal); diff --git a/features/transfer-keys/transfer-keys/hooks/use-tx-modal-stages-transfer-keys.tsx b/features/transfer-keys/transfer-keys/hooks/use-tx-modal-stages-transfer-keys.tsx new file mode 100644 index 00000000..831aa982 --- /dev/null +++ b/features/transfer-keys/transfer-keys/hooks/use-tx-modal-stages-transfer-keys.tsx @@ -0,0 +1,93 @@ +import { Plural } from 'shared/components'; +import { + TransactionModalTransitStage, + TxStagePending, + TxStageSign, + TxStageSuccess, + getGeneralTransactionModalStages, + useTransactionModalStage, +} from 'shared/transaction-modal'; + +type Props = { + keysCount: number; +}; + +const getTxModalStagesTransferKeys = ( + transitStage: TransactionModalTransitStage, +) => ({ + ...getGeneralTransactionModalStages(transitStage), + + sign: (props: Props) => + transitStage( + , + ), + + pending: (props: Props, txHash?: string) => + transitStage( + , + ), + + success: (props: Props, txHash?: string) => + transitStage( + + {props.keysCount}{' '} + has + been transfered to priority queue + + } + description="" + />, + { + isClosableOnLedger: true, + }, + ), + + signCleanup: () => + transitStage( + , + ), + + pendingCleanup: (txHash?: string) => + transitStage( + , + ), + + successCleanup: (props: Props, txHash?: string) => + transitStage( + + {props.keysCount}{' '} + has + been transfered to priority queue + + } + description="And legacy queue has been cleaned up" + />, + { + isClosableOnLedger: true, + }, + ), +}); + +export const useTxModalStagesTransferKeys = () => { + return useTransactionModalStage(getTxModalStagesTransferKeys); +}; diff --git a/features/transfer-keys/transfer-keys/index.ts b/features/transfer-keys/transfer-keys/index.ts new file mode 100644 index 00000000..2816461f --- /dev/null +++ b/features/transfer-keys/transfer-keys/index.ts @@ -0,0 +1 @@ +export { TransferKeysForm } from './transfer-keys-form'; diff --git a/features/transfer-keys/transfer-keys/transfer-keys-form-info.tsx b/features/transfer-keys/transfer-keys/transfer-keys-form-info.tsx new file mode 100644 index 00000000..a0d19d8e --- /dev/null +++ b/features/transfer-keys/transfer-keys/transfer-keys-form-info.tsx @@ -0,0 +1,14 @@ +import { DataTable, DataTableRow } from '@lidofinance/lido-ui'; +import { useTransferKeysFormData } from './context'; + +export const TransferKeysFormInfo = () => { + const { keysToMigrate } = useTransferKeysFormData(); + + return ( + + + {keysToMigrate} + + + ); +}; diff --git a/features/transfer-keys/transfer-keys/transfer-keys-form-loader.tsx b/features/transfer-keys/transfer-keys/transfer-keys-form-loader.tsx new file mode 100644 index 00000000..80b7dbfa --- /dev/null +++ b/features/transfer-keys/transfer-keys/transfer-keys-form-loader.tsx @@ -0,0 +1,28 @@ +import { FC, PropsWithChildren } from 'react'; +import { FormLoader } from 'shared/hook-form/form-controller'; +import { useTransferKeysFormData } from './context'; + +export const TransferKeysFormLoader: FC = ({ children }) => { + const data = useTransferKeysFormData(); + const isEmpty = !data.keysToMigrate; + const isUsed = data.info?.usedPriorityQueue; + + return ( + + You have transferred all the keys or the transferring limit is + reached + + ) : ( + <>You have no keys to transfer + ))) || + null + } + > + {children} + + ); +}; diff --git a/features/transfer-keys/transfer-keys/transfer-keys-form.tsx b/features/transfer-keys/transfer-keys/transfer-keys-form.tsx new file mode 100644 index 00000000..98b9bc36 --- /dev/null +++ b/features/transfer-keys/transfer-keys/transfer-keys-form.tsx @@ -0,0 +1,28 @@ +import { FC, memo } from 'react'; +import { FormBlock } from 'shared/components'; +import { Form } from 'shared/hook-form/form-controller'; +import { TransferKeysDataProvider, TransferKeysFormProvider } from './context'; +import { CleanupInfoNote } from './controls/cleanup-info-note'; +import { KeysSelector } from './controls/keys-selector'; +import { SubmitButton } from './controls/submit-button'; +import { TransferKeysFormInfo } from './transfer-keys-form-info'; +import { TransferKeysFormLoader } from './transfer-keys-form-loader'; + +export const TransferKeysForm: FC = memo(() => { + return ( + + + + +
      + + + + + +
      +
      +
      +
      + ); +}); diff --git a/features/type-parameters/index.ts b/features/type-parameters/index.ts new file mode 100644 index 00000000..44c3a161 --- /dev/null +++ b/features/type-parameters/index.ts @@ -0,0 +1,2 @@ +export * from './type-parameters'; +export * from './type-parameters-page'; diff --git a/features/type-parameters/type-parameters-page.tsx b/features/type-parameters/type-parameters-page.tsx new file mode 100644 index 00000000..a1b97345 --- /dev/null +++ b/features/type-parameters/type-parameters-page.tsx @@ -0,0 +1,18 @@ +import { FC } from 'react'; +import { FAQ_OPERATOR_TYPE } from 'faq'; +import { Faq } from 'shared/components'; +import { Layout } from 'shared/layout'; +import { TypePageSwitcher } from 'shared/navigate'; +import { TypeParameters } from './type-parameters'; + +export const TypeParametersPage: FC = () => ( + + + + + +); diff --git a/features/type-parameters/type-parameters.tsx b/features/type-parameters/type-parameters.tsx new file mode 100644 index 00000000..31ef9ace --- /dev/null +++ b/features/type-parameters/type-parameters.tsx @@ -0,0 +1,69 @@ +import { + OPERATOR_TYPE, + OPERATOR_TYPE_CURVE_ID, +} from '@lidofinance/lido-csm-sdk'; +import { Button, Text } from '@lidofinance/lido-ui'; +import { OPERATOR_TYPE_TITLE } from 'consts'; +import { PATH } from 'consts/urls'; +import { + useCurveParameters, + useNodeOperatorId, + useOperatorType, +} from 'modules/web3'; +import { FC } from 'react'; +import { Block, CompareParametersList, Stack } from 'shared/components'; +import { DefColumnBackground, IcsColumnBackground } from 'shared/components'; +import { useShowFlags } from 'shared/hooks'; +import { LocalLink } from 'shared/navigate'; + +export const TypeParameters: FC = () => { + const nodeOperatorId = useNodeOperatorId(); + const { data: operatorType } = useOperatorType(nodeOperatorId); + + const { ICS_APPLY_ENABLED, CAN_CLAIM_ICS } = useShowFlags(); + + const { data: defParams } = useCurveParameters(OPERATOR_TYPE_CURVE_ID.DEF); + const { data: icsParams } = useCurveParameters(OPERATOR_TYPE_CURVE_ID.ICS); + + const canApply = + !CAN_CLAIM_ICS && ICS_APPLY_ENABLED && operatorType !== OPERATOR_TYPE.ICS; + + return ( + + + + Explore the differences in node operator parameters across different + node operator types: + + + + + + + + + + {CAN_CLAIM_ICS && ( + + + + )} + {canApply && ( + + + + )} + + + + ); +}; diff --git a/features/unlock-bond/unlock-bond-form/context/index.ts b/features/unlock-bond/unlock-bond-form/context/index.ts index 2aa8778c..95523277 100644 --- a/features/unlock-bond/unlock-bond-form/context/index.ts +++ b/features/unlock-bond/unlock-bond-form/context/index.ts @@ -1,2 +1,3 @@ +export * from './unlock-bond-data-provider'; export * from './unlock-bond-form-provider'; export * from './types'; diff --git a/features/unlock-bond/unlock-bond-form/context/types.ts b/features/unlock-bond/unlock-bond-form/context/types.ts index 1fb47e03..3e8f0feb 100644 --- a/features/unlock-bond/unlock-bond-form/context/types.ts +++ b/features/unlock-bond/unlock-bond-form/context/types.ts @@ -1,13 +1,11 @@ -import { BigNumber } from 'ethers'; -import { LoadingRecord, NodeOperatorId } from 'types'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; export type UnlockBondFormInputType = { - amount?: BigNumber; + amount?: bigint; }; export type UnlockBondFormNetworkData = { - nodeOperatorId?: NodeOperatorId; - lockedBond?: BigNumber; - etherBalance?: BigNumber; - loading: LoadingRecord<'lockedBond' | 'etherBalance'>; + nodeOperatorId: NodeOperatorId; + lockedBond: bigint; + ethBalance: bigint; }; diff --git a/features/unlock-bond/unlock-bond-form/context/unlock-bond-data-provider.tsx b/features/unlock-bond/unlock-bond-form/context/unlock-bond-data-provider.tsx new file mode 100644 index 00000000..5eb31964 --- /dev/null +++ b/features/unlock-bond/unlock-bond-form/context/unlock-bond-data-provider.tsx @@ -0,0 +1,57 @@ +import { + KEY_OPERATOR_BALANCE, + useEthereumBalance, + useNodeOperatorId, + useOperatorBalance, +} from 'modules/web3'; +import { FC, PropsWithChildren, useCallback } from 'react'; +import { + FormDataContext, + NetworkData, + useFormData, +} from 'shared/hook-form/form-controller'; +import { useInvalidate } from 'shared/hooks'; +import { type UnlockBondFormNetworkData } from './types'; + +const useUnlockBondFormNetworkData: NetworkData< + UnlockBondFormNetworkData +> = () => { + const nodeOperatorId = useNodeOperatorId(); + + const balanceQuery = useOperatorBalance(nodeOperatorId); + const ethBalanceQuery = useEthereumBalance(); + + const balance = balanceQuery.data; + const ethBalance = ethBalanceQuery.data; + + const isLockedBondLoading = balanceQuery.isPending; + const isEthBalanceLoading = ethBalanceQuery.isPending; + + const invalidate = useInvalidate(); + + const revalidate = useCallback(() => { + invalidate([ethBalanceQuery.queryKey, KEY_OPERATOR_BALANCE]); + }, [invalidate, ethBalanceQuery.queryKey]); + + return { + data: { + nodeOperatorId, + lockedBond: balance?.locked, + ethBalance, + } as UnlockBondFormNetworkData, + isPending: isLockedBondLoading || isEthBalanceLoading, + revalidate, + }; +}; + +export const useUnlockBondFormData = useFormData; + +export const UnlockBondDataProvider: FC = ({ children }) => { + const networkData = useUnlockBondFormNetworkData(); + + return ( + + {children} + + ); +}; diff --git a/features/unlock-bond/unlock-bond-form/context/unlock-bond-form-provider.tsx b/features/unlock-bond/unlock-bond-form/context/unlock-bond-form-provider.tsx index 1f37e633..5725aa0c 100644 --- a/features/unlock-bond/unlock-bond-form/context/unlock-bond-form-provider.tsx +++ b/features/unlock-bond/unlock-bond-form/context/unlock-bond-form-provider.tsx @@ -1,27 +1,13 @@ -import { FC, PropsWithChildren, useMemo } from 'react'; +import { FC, PropsWithChildren } from 'react'; import { FormProvider, useForm } from 'react-hook-form'; -import { - FormControllerContext, - FormControllerContextValueType, - FormDataContext, - useFormControllerRetry, - useFormData, -} from 'shared/hook-form/form-controller'; -import { - UnlockBondFormNetworkData, - type UnlockBondFormInputType, -} from './types'; -import { useUnlockBondFormNetworkData } from './use-unlock-bond-form-network-data'; +import { FormControllerProvider } from 'shared/hook-form/form-controller'; +import { type UnlockBondFormInputType } from './types'; import { useUnlockBondSubmit } from './use-unlock-bond-submit'; import { useUnlockBondValidation } from './use-unlock-bond-validation'; -export const useUnlockBondFormData = useFormData; - export const UnlockBondFormProvider: FC = ({ children }) => { - const [networkData, revalidate] = useUnlockBondFormNetworkData(); - const validationResolver = useUnlockBondValidation(networkData); + const validationResolver = useUnlockBondValidation(); - // TODO: validate (max amount) const formObject = useForm({ defaultValues: { amount: undefined, @@ -30,31 +16,13 @@ export const UnlockBondFormProvider: FC = ({ children }) => { mode: 'onChange', }); - const { retryEvent, retryFire } = useFormControllerRetry(); - - const { unlockBond } = useUnlockBondSubmit({ - onConfirm: revalidate, - onRetry: retryFire, - }); - - const formControllerValue: FormControllerContextValueType< - UnlockBondFormInputType, - UnlockBondFormNetworkData - > = useMemo( - () => ({ - onSubmit: unlockBond, - retryEvent, - }), - [unlockBond, retryEvent], - ); + const submitter = useUnlockBondSubmit(); return ( - - - {children} - - + + {children} + ); }; diff --git a/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-form-network-data.tsx b/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-form-network-data.tsx deleted file mode 100644 index 156fb31d..00000000 --- a/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-form-network-data.tsx +++ /dev/null @@ -1,47 +0,0 @@ -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useCallback, useMemo } from 'react'; -import { useNodeOperatorLockAmount } from 'shared/hooks'; -import { type UnlockBondFormNetworkData } from './types'; -import { useEthereumBalance } from '@lido-sdk/react'; -import { STRATEGY_LAZY } from 'consts/swr-strategies'; - -export const useUnlockBondFormNetworkData = (): [ - UnlockBondFormNetworkData, - () => Promise, -] => { - const nodeOperatorId = useNodeOperatorId(); - - const { - data: lockedBond, - update: updateLockedBond, - initialLoading: isLockedBondLoading, - } = useNodeOperatorLockAmount(nodeOperatorId); - - const { - data: etherBalance, - update: updateEtherBalance, - initialLoading: isEtherBalanceLoading, - } = useEthereumBalance(undefined, STRATEGY_LAZY); - - const revalidate = useCallback(async () => { - await Promise.allSettled([updateLockedBond(), updateEtherBalance()]); - }, [updateEtherBalance, updateLockedBond]); - - const loading = useMemo( - () => ({ - isLockedBondLoading, - isEtherBalanceLoading, - }), - [isEtherBalanceLoading, isLockedBondLoading], - ); - - return [ - { - nodeOperatorId, - lockedBond, - etherBalance, - loading, - }, - revalidate, - ]; -}; diff --git a/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-submit.ts b/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-submit.ts index 04190637..46e8a56e 100644 --- a/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-submit.ts +++ b/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-submit.ts @@ -1,95 +1,71 @@ -import { BigNumber } from 'ethers'; import { useCallback } from 'react'; -import invariant from 'tiny-invariant'; -import { useCSAccountingRPC, useCSModuleWeb3, useSendTx } from 'shared/hooks'; +import { + TransactionCallback, + TransactionCallbackStage, +} from '@lidofinance/lido-csm-sdk'; +import { useLidoSDK } from 'modules/web3'; +import { FormSubmitterHook } from 'shared/hook-form/form-controller'; import { handleTxError } from 'shared/transaction-modal'; -import { NodeOperatorId } from 'types'; -import { runWithTransactionLogger } from 'utils'; import { UnlockBondFormInputType, UnlockBondFormNetworkData } from '../context'; import { useTxModalStagesUnlockBond } from '../hooks/use-tx-modal-stages-unlock-bond'; -type UseUnlockBondOptions = { - onConfirm?: () => Promise | void; - onRetry?: () => void; -}; - -type UnlockBondMethodParams = { - nodeOperatorId: NodeOperatorId; - amount: BigNumber; -}; - -// encapsulates eth/steth/wsteth flows -const useUnlockBondTx = () => { - const CSModuleWeb3 = useCSModuleWeb3(); - - return useCallback( - async (params: UnlockBondMethodParams) => { - invariant(CSModuleWeb3, 'must have CSModuleWeb3'); - - return { - tx: await CSModuleWeb3.populateTransaction.compensateELRewardsStealingPenalty( - params.nodeOperatorId, - { value: params.amount }, - ), - txName: 'compensateELRewardsStealingPenalty', - }; - }, - [CSModuleWeb3], - ); -}; - -export const useUnlockBondSubmit = ({ - onConfirm, - onRetry, -}: UseUnlockBondOptions) => { +export const useUnlockBondSubmit: FormSubmitterHook< + UnlockBondFormInputType, + UnlockBondFormNetworkData +> = () => { + const { csm } = useLidoSDK(); const { txModalStages } = useTxModalStagesUnlockBond(); - const CSAccounting = useCSAccountingRPC(); - const getTx = useUnlockBondTx(); - const sendTx = useSendTx(); - - const unlockBond = useCallback( - async ( - { amount }: UnlockBondFormInputType, - { nodeOperatorId }: UnlockBondFormNetworkData, - ): Promise => { - invariant(amount, 'BondAmount is not defined'); - invariant(nodeOperatorId, 'NodeOperatorId is not defined'); + return useCallback( + async ({ amount }, { nodeOperatorId }, { onConfirm, onRetry }) => { + if (amount === undefined) { + throw new Error('BondAmount is not defined'); + } try { - txModalStages.sign({ amount }); - - const tx = await getTx({ + const callback: TransactionCallback = async ({ + stage, + payload, + }) => { + switch (stage) { + case TransactionCallbackStage.SIGN: + txModalStages.sign({ amount }); + break; + case TransactionCallbackStage.RECEIPT: + txModalStages.pending({ amount }, payload.hash); + break; + case TransactionCallbackStage.DONE: { + payload; + txModalStages.success( + { lockedBond: payload.result }, + payload.hash, + ); + break; + } + case TransactionCallbackStage.MULTISIG_DONE: + txModalStages.successMultisig(); + break; + case TransactionCallbackStage.ERROR: + txModalStages.failed(payload.error, onRetry); + break; + default: + } + }; + + await csm.bond.coverLockedBond({ nodeOperatorId, amount, + callback, }); - const [txHash, waitTx] = await runWithTransactionLogger( - 'UnlockBond signing', - () => sendTx(tx), - ); - - txModalStages.pending({ amount }, txHash); - - await runWithTransactionLogger('UnlockBond block confirmation', waitTx); - await onConfirm?.(); - // TODO: move to onConfirm - const current = await CSAccounting.getActualLockedBond(nodeOperatorId); - - txModalStages.success({ lockedBond: current }, txHash); - return true; } catch (error) { return handleTxError(error, txModalStages, onRetry); } }, - [getTx, txModalStages, onConfirm, CSAccounting, sendTx, onRetry], + [csm.bond, txModalStages], ); - - return { - unlockBond, - }; }; diff --git a/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-validation.ts b/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-validation.ts index 7c0a2c2d..cfcb3d6a 100644 --- a/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-validation.ts +++ b/features/unlock-bond/unlock-bond-form/context/use-unlock-bond-validation.ts @@ -1,64 +1,45 @@ -import { formatEther } from '@ethersproject/units'; -import { TOKENS } from 'consts/tokens'; -import { useCallback } from 'react'; -import type { Resolver } from 'react-hook-form'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { - handleResolverValidationError, - validateBignumberMax, + useFormValidation, + validateBigintMax, validateEtherAmount, } from 'shared/hook-form/validation'; -import { useAwaitNetworkData } from 'shared/hooks'; -import invariant from 'tiny-invariant'; import { getTokenDisplayName } from 'utils'; +import { formatEther } from 'viem'; import type { UnlockBondFormInputType, UnlockBondFormNetworkData, } from './types'; -import { Zero } from '@ethersproject/constants'; -export const useUnlockBondValidation = ( - networkData: UnlockBondFormNetworkData, -) => { - const dataPromise = useAwaitNetworkData(networkData); +export const useUnlockBondValidation = () => { + return useFormValidation( + 'amount', + async ({ amount }, { lockedBond, ethBalance }, validate) => { + await validate('amount', () => + validateEtherAmount('amount', amount, TOKENS.eth), + ); - return useCallback>( - async (values) => { - try { - const { amount } = values; - - const { lockedBond, etherBalance } = await dataPromise; - - invariant(etherBalance); - invariant(lockedBond); - - validateEtherAmount('amount', amount, TOKENS.ETH); - - validateBignumberMax( + await validate('amount', () => + validateBigintMax( 'amount', - amount ?? Zero, - etherBalance, - `Entered ${getTokenDisplayName(TOKENS.ETH)} amount exceeds your balance of ${formatEther( - etherBalance, + amount ?? 0n, + ethBalance, + `Entered ${getTokenDisplayName(TOKENS.eth)} amount exceeds your balance of ${formatEther( + ethBalance, )}`, - ); + ), + ); - validateBignumberMax( + await validate('amount', () => + validateBigintMax( 'amount', - amount ?? Zero, + amount ?? 0n, lockedBond, - `Entered ${getTokenDisplayName(TOKENS.ETH)} amount exceeds locked bond of ${formatEther( + `Entered ${getTokenDisplayName(TOKENS.eth)} amount exceeds locked bond of ${formatEther( lockedBond, )}`, - ); - - return { - values, - errors: {}, - }; - } catch (error) { - return handleResolverValidationError(error, 'UnlockBondForm', 'amount'); - } + ), + ); }, - [dataPromise], ); }; diff --git a/features/unlock-bond/unlock-bond-form/controls/amount-input.tsx b/features/unlock-bond/unlock-bond-form/controls/amount-input.tsx index 5e74af95..0b65ad40 100644 --- a/features/unlock-bond/unlock-bond-form/controls/amount-input.tsx +++ b/features/unlock-bond/unlock-bond-form/controls/amount-input.tsx @@ -1,18 +1,17 @@ -import { TOKENS } from 'consts/tokens'; import { FormTitle, Note } from 'shared/components'; import { TokenAmountInputHookForm } from 'shared/hook-form/controls'; import { useMaxValue } from '../hooks/use-max-value'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; export const AmountInput: React.FC = () => { const max = useMaxValue(); - // TODO: disable return ( <> Enter token amount Locked bond can be compensated only in ETH diff --git a/features/unlock-bond/unlock-bond-form/controls/info.tsx b/features/unlock-bond/unlock-bond-form/controls/info.tsx index f8e6a9fe..c314e0f9 100644 --- a/features/unlock-bond/unlock-bond-form/controls/info.tsx +++ b/features/unlock-bond/unlock-bond-form/controls/info.tsx @@ -1,10 +1,15 @@ -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { + LIDO_REWARDS_VAULT_LINK, + MEV_STEALING_LINK, +} from 'consts/external-links'; import { FC } from 'react'; import { Latice, MatomoLink, Stack, TitledAmount } from 'shared/components'; import { useUnlockBondFormData } from '../context'; export const Info: FC = () => { - const { lockedBond, loading } = useUnlockBondFormData(); + const { lockedBond } = useUnlockBondFormData(); return ( <> @@ -12,20 +17,25 @@ export const Info: FC = () => { - {lockedBond?.gt(0) && ( -

      - + {!!lockedBond && ( +

      + EL reward stealing {' '} penalties have been applied to your Node Operator because one of your validators produced a block with the EL rewards sent to the wrong address (an address different from from{' '} - + the Lido Execution Layer Rewards Vault ) @@ -40,13 +50,16 @@ export const Info: FC = () => {
    • Check if the feeRecipient address of your validators consensus / validator client is set to{' '} - + the Lido Execution Layer Rewards Vault {' '} to avoid the further penalties.
    -

    + )}
    diff --git a/features/unlock-bond/unlock-bond-form/controls/submit-button.tsx b/features/unlock-bond/unlock-bond-form/controls/submit-button.tsx index eab10274..508ac6cf 100644 --- a/features/unlock-bond/unlock-bond-form/controls/submit-button.tsx +++ b/features/unlock-bond/unlock-bond-form/controls/submit-button.tsx @@ -1,10 +1,5 @@ import { SubmitButtonHookForm } from 'shared/hook-form/controls'; export const SubmitButton = () => { - // TODO: disable - return ( - - Compensate locked bond - - ); + return Compensate locked bond; }; diff --git a/features/unlock-bond/unlock-bond-form/hooks/use-max-value.ts b/features/unlock-bond/unlock-bond-form/hooks/use-max-value.ts index 10919285..b9a7a180 100644 --- a/features/unlock-bond/unlock-bond-form/hooks/use-max-value.ts +++ b/features/unlock-bond/unlock-bond-form/hooks/use-max-value.ts @@ -1,11 +1,10 @@ -import { Zero } from '@ethersproject/constants'; import { useUnlockBondFormData } from '../context'; export const useMaxValue = () => { - const { lockedBond, etherBalance } = useUnlockBondFormData(); - return lockedBond && etherBalance - ? lockedBond?.lt(etherBalance) + const { lockedBond, ethBalance } = useUnlockBondFormData(); + return lockedBond && ethBalance + ? lockedBond < ethBalance ? lockedBond - : etherBalance - : Zero; + : ethBalance + : 0n; }; diff --git a/features/unlock-bond/unlock-bond-form/hooks/use-tx-modal-stages-unlock-bond.tsx b/features/unlock-bond/unlock-bond-form/hooks/use-tx-modal-stages-unlock-bond.tsx index de012728..233fa24f 100644 --- a/features/unlock-bond/unlock-bond-form/hooks/use-tx-modal-stages-unlock-bond.tsx +++ b/features/unlock-bond/unlock-bond-form/hooks/use-tx-modal-stages-unlock-bond.tsx @@ -1,6 +1,4 @@ -import type { BigNumber } from 'ethers'; - -import { TOKENS } from 'consts/tokens'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { TransactionModalTransitStage, TxAmount, @@ -11,7 +9,7 @@ import { } from 'shared/transaction-modal'; type Props = { - amount: BigNumber; + amount: bigint; }; const getTxModalStagesUnlockBond = ( @@ -24,7 +22,7 @@ const getTxModalStagesUnlockBond = ( , ), @@ -33,26 +31,26 @@ const getTxModalStagesUnlockBond = ( , ), - success: ({ lockedBond }: { lockedBond: BigNumber }, txHash?: string) => + success: ({ lockedBond }: { lockedBond: bigint }, txHash?: string) => transitStage( 0n ? 'Bond has been partially unlocked' : 'Bond has been completely unlocked' } description={ - lockedBond.gt(0) && ( + lockedBond > 0n && ( <> Remaining locked bond{' '} - + ) } diff --git a/features/unlock-bond/unlock-bond-form/unlock-bond-form-info.tsx b/features/unlock-bond/unlock-bond-form/unlock-bond-form-info.tsx index 09377fbf..bde0b0b7 100644 --- a/features/unlock-bond/unlock-bond-form/unlock-bond-form-info.tsx +++ b/features/unlock-bond/unlock-bond-form/unlock-bond-form-info.tsx @@ -1,23 +1,22 @@ +import { TOKENS } from '@lidofinance/lido-csm-sdk'; import { DataTable, DataTableRow } from '@lidofinance/lido-ui'; -import { TOKENS } from 'consts/tokens'; import { useWatch } from 'react-hook-form'; import { FormatToken } from 'shared/formatters'; import { UnlockBondFormInputType, useUnlockBondFormData } from './context'; export const UnlockBondFormInfo = () => { - const { - lockedBond, - loading: { isLockedBondLoading }, - } = useUnlockBondFormData(); + const { lockedBond } = useUnlockBondFormData(true); const amount = useWatch({ name: 'amount', }); + const remainLockedBond = lockedBond - (amount ?? 0n); + return ( - - + + ); diff --git a/features/unlock-bond/unlock-bond-form/unlock-bond-form-loader.tsx b/features/unlock-bond/unlock-bond-form/unlock-bond-form-loader.tsx index 1dfa1767..24da38b7 100644 --- a/features/unlock-bond/unlock-bond-form/unlock-bond-form-loader.tsx +++ b/features/unlock-bond/unlock-bond-form/unlock-bond-form-loader.tsx @@ -1,18 +1,13 @@ +import { ROLES } from '@lidofinance/lido-csm-sdk'; +import { useNodeOperator } from 'modules/web3'; import { FC, PropsWithChildren } from 'react'; -import { useFormState } from 'react-hook-form'; -import { WhenLoaded } from 'shared/components'; -import { UnlockBondFormInputType } from './context'; +import { FormLoader } from 'shared/hook-form/form-controller'; import { Info } from './controls/info'; -import { useActiveNodeOperator } from 'providers/node-operator-provider'; -import { ROLES } from 'consts/roles'; export const UnlockBondFormLoader: FC = ({ children }) => { - const nodeOperator = useActiveNodeOperator(); - const { isLoading } = useFormState(); + const { nodeOperator } = useNodeOperator(); - const isView = !nodeOperator?.roles.includes(ROLES.MANAGER); + const isView = !nodeOperator.roles.includes(ROLES.MANAGER); - return ( - {isView ? : children} - ); + return {isView ? : children}; }; diff --git a/features/unlock-bond/unlock-bond-form/unlock-bond-form.tsx b/features/unlock-bond/unlock-bond-form/unlock-bond-form.tsx index df77c2cb..841efe66 100644 --- a/features/unlock-bond/unlock-bond-form/unlock-bond-form.tsx +++ b/features/unlock-bond/unlock-bond-form/unlock-bond-form.tsx @@ -1,28 +1,28 @@ import { FC, memo } from 'react'; - -import { UnlockBondFormProvider } from './context'; - +import { UnlockBondDataProvider, UnlockBondFormProvider } from './context'; import { UnlockBondFormInfo } from './unlock-bond-form-info'; import { AmountInput } from './controls/amount-input'; import { SubmitButton } from './controls/submit-button'; import { FormBlock } from 'shared/components'; -import { FormControllerStyled } from 'shared/hook-form/form-controller'; +import { Form } from 'shared/hook-form/form-controller'; import { Info } from './controls/info'; import { UnlockBondFormLoader } from './unlock-bond-form-loader'; export const UnlockBondForm: FC = memo(() => { return ( - - - - - - - - - - - - + + + + +
    + + + + + +
    +
    +
    +
    ); }); diff --git a/features/unlock-bond/unlock-bond-page.tsx b/features/unlock-bond/unlock-bond-page.tsx index 0105e280..98ce94da 100644 --- a/features/unlock-bond/unlock-bond-page.tsx +++ b/features/unlock-bond/unlock-bond-page.tsx @@ -3,15 +3,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { BondPageSwitcher } from 'shared/navigate'; import { UnlockBond } from './unlock-bond'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_LOCKED } from 'faq'; export const UnlockBondPage: FC = () => ( + ); diff --git a/features/unlock-bond/unlock-bond.tsx b/features/unlock-bond/unlock-bond.tsx index 8eb8d20f..83881c97 100644 --- a/features/unlock-bond/unlock-bond.tsx +++ b/features/unlock-bond/unlock-bond.tsx @@ -1,8 +1,7 @@ import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; +import { useWeb3Key } from 'shared/hooks'; import { UnlockBondForm } from './unlock-bond-form'; -import { Faq } from 'shared/components'; export const UnlockBond = () => { const key = useWeb3Key(); @@ -11,7 +10,6 @@ export const UnlockBond = () => { - ); }; diff --git a/features/view-keys/deposit-queue/added-tooltip-content.tsx b/features/view-keys/deposit-queue/added-tooltip-content.tsx new file mode 100644 index 00000000..c30b2297 --- /dev/null +++ b/features/view-keys/deposit-queue/added-tooltip-content.tsx @@ -0,0 +1,31 @@ +import { Divider } from '@lidofinance/lido-ui'; +import { FC } from 'react'; +import { Stack } from 'shared/components'; +import { getPriorityName } from './get-priority-name'; +import { TooltipContentStyle } from './style'; +import { BatchMetadata, GraphPart } from './types'; + +type AddedTooltipContentProps = { + metadata: BatchMetadata; +}; + +export const AddedTooltipContent: FC = ({ + metadata, +}) => { + return ( + + {metadata.map((item, index) => ( + <> + {index > 0 && } + + + {getPriorityName(`priority${item.priority}` as GraphPart)} + + Submitting keys: {item.keysCount.toString()} + Keys ahead: {item.position.toString()} + + + ))} + + ); +}; diff --git a/features/view-keys/deposit-queue/batch-tooltip-content.tsx b/features/view-keys/deposit-queue/batch-tooltip-content.tsx new file mode 100644 index 00000000..1d099e88 --- /dev/null +++ b/features/view-keys/deposit-queue/batch-tooltip-content.tsx @@ -0,0 +1,33 @@ +import { Divider } from '@lidofinance/lido-ui'; +import { FC, Fragment } from 'react'; +import { Stack } from 'shared/components'; +import { getPriorityName } from './get-priority-name'; +import { TooltipContentStyle } from './style'; +import { BatchMetadata, GraphPart } from './types'; + +type BatchTooltipContentProps = { + metadata: BatchMetadata; +}; + +export const BatchTooltipContent: FC = ({ + metadata, +}) => { + return ( + + {metadata.map((batch, index) => ( + + {index > 0 && } + + + {batch.combined + ? 'Multiple batches' + : getPriorityName(`priority${batch.priority}` as GraphPart)} + + Keys: {batch.keysCount.toString()} + Keys ahead: {batch.position.toString()} + + + ))} + + ); +}; diff --git a/features/view-keys/deposit-queue/deposit-queue-graph.tsx b/features/view-keys/deposit-queue/deposit-queue-graph.tsx index 1b018cbe..cd81a9c1 100644 --- a/features/view-keys/deposit-queue/deposit-queue-graph.tsx +++ b/features/view-keys/deposit-queue/deposit-queue-graph.tsx @@ -1,70 +1,57 @@ import { InlineLoader } from '@lidofinance/lido-ui'; -import { FC, useState } from 'react'; +import { FC } from 'react'; import { Stack } from 'shared/components'; -import { HoverProvider } from './hover-provider'; +import { useDepositQueueGraph } from './hooks/use-deposit-queue-graph'; +import { + GraphInteractionProvider, + useGraphInteraction, +} from './hover-provider'; import { Legend } from './legend'; +import { LineWrapper } from './line-wrapper'; import { Part } from './part'; -import { FarStyle, LegendsStyle, LineStyle, WrapperStyle } from './style'; -import { useDepositQueueGraph } from './use-deposit-queue-graph'; +import { LegendsStyle, LineStyle } from './style'; -export const DepositQueueGraph: FC = () => { - const [fullView, setFullView] = useState(false); - const { graph, values, isLoading } = useDepositQueueGraph(fullView); +const Graph: FC = () => { + const { fullView } = useGraphInteraction(); + const { data, isLoading } = useDepositQueueGraph(fullView); - if (isLoading || !graph) { + if (isLoading || !data) { return ; } return ( - - - setFullView(false)}> - - - - - - - - - - - + + + + {data.parts.map((part, index) => ( + + ))} + {data.operator?.batches.map((batch, index) => ( + + ))} + + + + + {data.parts + .filter((part) => part.type !== 'added') + .map((part, index) => ( + + ))} + + + + + ); }; + +export const DepositQueueGraph: FC = () => ( + + + +); diff --git a/features/view-keys/deposit-queue/deposit-queue.tsx b/features/view-keys/deposit-queue/deposit-queue.tsx index 397d0484..a998c089 100644 --- a/features/view-keys/deposit-queue/deposit-queue.tsx +++ b/features/view-keys/deposit-queue/deposit-queue.tsx @@ -1,4 +1,9 @@ import { Accordion, Text } from '@lidofinance/lido-ui'; +import { MATOMO_CLICK_EVENTS_TYPES } from 'consts'; +import { + LIDO_OPERATOR_PORTAL_DEPOSITS_FLOW, + SUBSCRIBE_EVENTS_LINK, +} from 'consts/external-links'; import { FC } from 'react'; import { MatomoLink, Stack } from 'shared/components'; import { DepositQueueGraph } from './deposit-queue-graph'; @@ -22,14 +27,22 @@ export const DepositQueue: FC = () => (

    You can subscribe to{' '} - + the important CSM events {' '} to stay notified about your validator being deposited to.

    Read more information about{' '} - + the deposits flow . diff --git a/features/view-keys/deposit-queue/get-priority-name.ts b/features/view-keys/deposit-queue/get-priority-name.ts new file mode 100644 index 00000000..64af728f --- /dev/null +++ b/features/view-keys/deposit-queue/get-priority-name.ts @@ -0,0 +1,44 @@ +import { GraphPart } from './types'; + +export const getPriorityName = (type: GraphPart) => { + switch (type) { + case 'active': + return 'Active keys'; + case 'batch': + return 'Your queued keys'; + case 'added': + return 'Keys you’re trying to submit'; + case 'limit': + return 'CSM stake limit'; + case 'queue': + return 'Queued keys'; + case 'queueOverLimit': + return 'Queued keys (over limit)'; + case 'priority0': + return 'Priority queue'; + case 'priority1': + return 'Priority 2 queue'; + case 'priority2': + return 'Priority 3 queue'; + case 'priority3': + return 'Priority 4 queue'; + case 'priority4': + return 'Legacy queue'; + case 'priority5': + return 'General queue'; + case 'priority0OverLimit': + return 'Priority queue (over limit)'; + case 'priority1OverLimit': + return 'Priority 2 queue (over limit)'; + case 'priority2OverLimit': + return 'Priority 3 queue (over limit)'; + case 'priority3OverLimit': + return 'Priority 4 queue (over limit)'; + case 'priority4OverLimit': + return 'Legacy queue (over limit)'; + case 'priority5OverLimit': + return 'General queue (over limit)'; + default: + return 'Unknown'; + } +}; diff --git a/features/view-keys/deposit-queue/hooks/calculate-and-select-by-operator.ts b/features/view-keys/deposit-queue/hooks/calculate-and-select-by-operator.ts new file mode 100644 index 00000000..f7860b79 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/calculate-and-select-by-operator.ts @@ -0,0 +1,59 @@ +import { DepositQueueBatch } from '@lidofinance/lido-csm-sdk'; + +type OperatorBatch = { + keysCount: number; + offset: bigint; // Keys count before this batch (from other operators) +}; + +export type QueueAnalysis = { + queueIndex: number; + totalKeysInQueue: bigint; + operatorBatches: OperatorBatch[]; +}; + +export type DepositQueueAnalysis = { + totalKeysCount: bigint; + queueAnalysis: QueueAnalysis[]; +}; + +export const calculateAndSelectByOperator = ( + nodeOperatorId: bigint | undefined, +) => { + return (allBatches: DepositQueueBatch[][]): DepositQueueAnalysis => { + let totalKeysCount = 0n; + const queueAnalysis: QueueAnalysis[] = []; + + allBatches.forEach((batches, queueIndex) => { + let totalKeysInQueue = 0n; + let runningOffset = 0n; + const operatorBatches: OperatorBatch[] = []; + + batches.forEach((batch) => { + const isOperatorBatch = batch.nodeOperatorId === nodeOperatorId; + + if (isOperatorBatch) { + operatorBatches.push({ + keysCount: batch.keysCount, + offset: runningOffset, + }); + } + + runningOffset += BigInt(batch.keysCount); + totalKeysInQueue += BigInt(batch.keysCount); + }); + + totalKeysCount += totalKeysInQueue; + + queueAnalysis.push({ + queueIndex, + totalKeysInQueue, + operatorBatches, + }); + }); + + return { + totalKeysCount, + queueAnalysis, + }; + }; +}; diff --git a/features/view-keys/deposit-queue/hooks/calculate-priority-placement.ts b/features/view-keys/deposit-queue/hooks/calculate-priority-placement.ts new file mode 100644 index 00000000..99d03aa2 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/calculate-priority-placement.ts @@ -0,0 +1,51 @@ +import type { OperatorInfo, SubmittingAllocation } from './enhanced-types'; + +const FALLBACK_LOWEST_PRIORITY = 5; + +type QueueConfig = { + priority: number; + maxDeposits: number; + lowestPriority: number; +}; + +export const calculatePriorityPlacement = ( + operatorInfo: OperatorInfo | undefined, + queueConfig: QueueConfig | undefined, + submittingCount: number | undefined, +): SubmittingAllocation | undefined => { + if (submittingCount === undefined) { + return undefined; + } + if (!operatorInfo || !queueConfig || !submittingCount) { + return { + keysCount: BigInt(submittingCount), + allocation: submittingCount + ? [[FALLBACK_LOWEST_PRIORITY, BigInt(submittingCount)]] + : [], + }; + } + + const { totalDepositedKeys = 0, enqueuedCount = 0 } = operatorInfo; + + const { priority, maxDeposits, lowestPriority } = queueConfig; + + // Calculate available priority slots + const depositedAndQueued = totalDepositedKeys + enqueuedCount; + const priorityDepositsLeft = Math.max(0, maxDeposits - depositedAndQueued); + + // Keys that will go to priority queue + const keysToPriority = Math.min(submittingCount, priorityDepositsLeft); + + // Remaining keys go to general queue (lowest priority) + const keysToLowestPriority = submittingCount - keysToPriority; + + const allocation = [ + [priority, BigInt(keysToPriority)], + [lowestPriority, BigInt(keysToLowestPriority)], + ].filter(([, count]) => count > 0) as [number, bigint][]; + + return { + keysCount: BigInt(submittingCount), + allocation, + }; +}; diff --git a/features/view-keys/deposit-queue/hooks/enhanced-types.ts b/features/view-keys/deposit-queue/hooks/enhanced-types.ts new file mode 100644 index 00000000..e49adf25 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/enhanced-types.ts @@ -0,0 +1,73 @@ +import type { + QueueGraphData, + UseDepositQueueGraphResult, + BatchPart, + QueuePart, +} from '../types'; + +export type GraphBounds = { + startPosition: bigint; + endPosition: bigint; + range: bigint; + displayStart: number; + displayEnd: number; + displayRange: number; + minSegmentSize: number; + extraLow: boolean; + extraHigh: boolean; + farAway: boolean; +}; + +export type QueueSegment = { + keysUnderLimit: bigint; + keysOverLimit: bigint; + underLimitSize: number; + overLimitSize: number; + totalSize: number; + startPosition: bigint; +}; + +export type ViewConfig = { + fullView: boolean; + minSegmentSize: number; +}; + +export type ShareLimit = { + active: bigint; + queue: bigint; + capacity: bigint; + activeLeft: bigint; +}; + +export type OperatorInfo = { + depositableValidatorsCount?: number; + totalDepositedKeys?: number; + enqueuedCount?: number; +}; + +export type SubmittingAllocation = { + keysCount: bigint; + allocation: [number, bigint][]; +}; // queue priority, keys count + +export type ProcessedBatches = { + batches: BatchPart[]; + cumulativeKeys: bigint; +}; + +export type SegmentInfo = { + startPos: bigint; + underLimitKeys: bigint; + overLimitKeys: bigint; +}; + +export type GraphCalculationParams = { + active: bigint; + queue: bigint; + added: bigint; + capacity: bigint; + fullView: boolean; +}; + +// Re-export original types +export type { QueueGraphData, UseDepositQueueGraphResult, QueuePart }; diff --git a/features/view-keys/deposit-queue/hooks/graph-calculations.ts b/features/view-keys/deposit-queue/hooks/graph-calculations.ts new file mode 100644 index 00000000..851f24b2 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/graph-calculations.ts @@ -0,0 +1,119 @@ +import { GRAPH_CONFIG } from './graph-config'; +import type { GraphBounds, GraphCalculationParams } from './enhanced-types'; + +export const calculateGraphBounds = ( + params: GraphCalculationParams, +): GraphBounds => { + const { active, queue, capacity, fullView } = params; + const { BACK_OFFSET, POTENTIAL_ADDED } = GRAPH_CONFIG.QUEUE; + const { LEFT_MARGIN, RIGHT_MARGIN, FULL_WIDTH } = GRAPH_CONFIG.VIEW.BOUNDS; + + const potential = + params.added < POTENTIAL_ADDED ? POTENTIAL_ADDED : params.added; + + // Calculate start position with back offset + const activeStart = active < BACK_OFFSET ? 0n : active; + const startPosition = fullView + ? 0n + : activeStart - BACK_OFFSET < 0n + ? activeStart + : activeStart - BACK_OFFSET; + + // Calculate end position + const endKeysPosition = active + queue + potential; + const endPosition = fullView + ? endKeysPosition < capacity + ? capacity + : endKeysPosition + : endKeysPosition; + + const range = endPosition - startPosition; + + // Determine display boundaries based on view mode and capacity + const extraLow = !fullView && capacity < startPosition - range; + const extraHigh = !fullView && capacity > endPosition + endPosition / 10n; + + const displayStart = fullView + ? 0 + : extraLow + ? LEFT_MARGIN + : startPosition > potential + ? LEFT_MARGIN + : 0; + + const displayEnd = fullView + ? FULL_WIDTH + : extraHigh + ? RIGHT_MARGIN + : FULL_WIDTH; + + const displayRange = displayEnd - displayStart; + const minSegmentSize = fullView + ? GRAPH_CONFIG.VIEW.MIN_SIZE_PERCENTAGE.FULL + : GRAPH_CONFIG.VIEW.MIN_SIZE_PERCENTAGE.NORMAL; + + const farAway = displayStart > 0; + + return { + startPosition, + endPosition, + range, + displayStart, + displayEnd, + displayRange, + minSegmentSize, + extraLow, + extraHigh, + farAway, + }; +}; + +export const normalizeToGraphCoordinate = ( + value: bigint, + bounds: GraphBounds, +): number => { + const { startPosition, displayStart, displayRange, range } = bounds; + + if (range === 0n) return displayStart; + + const relativePosition = Number( + ((value - startPosition) * BigInt(displayRange)) / range, + ); + return relativePosition + displayStart; +}; + +export const calculateSegmentSize = ( + value: bigint, + previousOffset: bigint, + bounds: GraphBounds, +): number => { + if (value === 0n) return 0; + + const { minSegmentSize } = bounds; + const previousPosition = + previousOffset === 0n + ? 0 + : Math.max( + minSegmentSize, + normalizeToGraphCoordinate(previousOffset, bounds), + ); + + const currentPosition = Math.max( + minSegmentSize, + normalizeToGraphCoordinate(value + previousOffset, bounds), + ); + + return Math.max(minSegmentSize, currentPosition - previousPosition); +}; + +export const calculateLimitOffset = ( + capacity: bigint, + bounds: GraphBounds, +): number => { + const { FULL_WIDTH } = GRAPH_CONFIG.VIEW.BOUNDS; + if (bounds.extraLow) return 8; + if (bounds.extraHigh) return GRAPH_CONFIG.VIEW.BOUNDS.FULL_WIDTH; + const offset = normalizeToGraphCoordinate(capacity, bounds); + if (offset < 0) return 0; + return offset > FULL_WIDTH ? FULL_WIDTH : offset; +}; diff --git a/features/view-keys/deposit-queue/hooks/graph-config.ts b/features/view-keys/deposit-queue/hooks/graph-config.ts new file mode 100644 index 00000000..a02d5b0e --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/graph-config.ts @@ -0,0 +1,17 @@ +export const GRAPH_CONFIG = { + QUEUE: { + POTENTIAL_ADDED: 25n, + BACK_OFFSET: 30n, + }, + VIEW: { + MIN_SIZE_PERCENTAGE: { + FULL: 0.5, + NORMAL: 1, + }, + BOUNDS: { + LEFT_MARGIN: 15, + RIGHT_MARGIN: 85, + FULL_WIDTH: 95, + }, + }, +} as const; diff --git a/features/view-keys/deposit-queue/hooks/operator-batch-collector.ts b/features/view-keys/deposit-queue/hooks/operator-batch-collector.ts new file mode 100644 index 00000000..7f9b8ab8 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/operator-batch-collector.ts @@ -0,0 +1,213 @@ +import { BatchPart, OperatorQueue } from '../types'; +import { QueueAnalysis } from './calculate-and-select-by-operator'; +import type { GraphBounds, SubmittingAllocation } from './enhanced-types'; +import { normalizeToGraphCoordinate } from './graph-calculations'; + +const MAX_TOOLTIP_ITEMS = 2; + +type BatchInfo = { + keysCount: bigint; + absoluteOffset: bigint; // Position from the begining of active keys + queueOffset: bigint; // Position from the start of all queues + batchOffset: bigint; // Offset within its own queue + priority: number; +}; + +type CollectOperatorBatchesProps = { + queueDataList: QueueAnalysis[]; + activeKeys: bigint; + bounds: GraphBounds; + submittingAllocation?: SubmittingAllocation; +}; + +/** + * Collects all operator batches from multiple priority queues, + * converts them to graph coordinates, and combines adjacent batches. + */ +export const collectOperatorBatches = ({ + queueDataList, + activeKeys, + bounds, + submittingAllocation, +}: CollectOperatorBatchesProps): OperatorQueue => { + const allBatchInfos: BatchInfo[] = []; + let cumulativeKeys = 0n; + let submittingKeys = 0n; + + // Collect all batch information + queueDataList.forEach((queueData) => { + const keysCountInQueue = queueData.totalKeysInQueue; + + queueData.operatorBatches.forEach((batch) => { + const batchKeysCount = BigInt(batch.keysCount); + const batchOffset = batch.offset; + + allBatchInfos.push({ + keysCount: batchKeysCount, + absoluteOffset: + activeKeys + cumulativeKeys + submittingKeys + batchOffset, + queueOffset: cumulativeKeys + submittingKeys + batchOffset, + batchOffset, + priority: queueData.queueIndex, + }); + }); + + cumulativeKeys += keysCountInQueue; + + // Include submitting keys for this priority in cumulative position + const submittingKeysInPriority = + submittingAllocation?.allocation?.find( + ([priority]) => priority === queueData.queueIndex, + )?.[1] || 0n; + submittingKeys += submittingKeysInPriority; + }); + + // Convert to graph coordinates and combine adjacent batches + const graphBatches = convertToGraphBatches(allBatchInfos, bounds); + const combinedBatches = combineAdjacentBatches(graphBatches); + + // Sum operator batch keys only (not total queue keys) + const operatorKeysCount = allBatchInfos.reduce( + (sum, batch) => sum + batch.keysCount, + 0n, + ); + + return { + keysCount: operatorKeysCount, + batches: combinedBatches, + }; +}; + +/** + * Converts batch information to graph coordinates with normalized positions. + */ +const convertToGraphBatches = ( + batchInfos: BatchInfo[], + bounds: GraphBounds, +): BatchPart[] => { + const minSize = bounds.minSegmentSize; + + return batchInfos.map((batchInfo) => { + const startPos = normalizeToGraphCoordinate( + batchInfo.absoluteOffset, + bounds, + ); + const endPos = normalizeToGraphCoordinate( + batchInfo.absoluteOffset + batchInfo.keysCount, + bounds, + ); + + const size = Math.max(minSize, endPos - startPos); + + return { + offset: startPos, + width: size, + metadata: [ + { + keysCount: batchInfo.keysCount, + position: batchInfo.queueOffset, + priority: batchInfo.priority, + }, + ], + }; + }); +}; + +/** + * Merges two metadata arrays, combining consecutive entries with same priority. + */ +const mergeMetadataArrays = ( + first: BatchPart['metadata'] = [], + second: BatchPart['metadata'] = [], +): BatchPart['metadata'] => { + if (first.length > 0 && second.length > 0) { + const lastMeta = first[first.length - 1]; + const firstMeta = second[0]; + + const isConsecutive = + lastMeta.position + lastMeta.keysCount === firstMeta.position && + lastMeta.priority === firstMeta.priority; + + if (isConsecutive) { + const mergedMeta = { + position: lastMeta.position, + keysCount: lastMeta.keysCount + firstMeta.keysCount, + priority: lastMeta.priority, + }; + return [...first.slice(0, -1), mergedMeta, ...second.slice(1)]; + } + } + + return [...first, ...second]; +}; + +/** + * Ensures batch metadata doesn't exceed MAX_TOOLTIP_ITEMS. + * If exceeded, combines all metadata into a single entry with summed keys. + */ +const ensureMetadataWithinTooltipLimit = (batch: BatchPart): BatchPart => { + if (batch.metadata.length > MAX_TOOLTIP_ITEMS) { + const totalKeysCount = batch.metadata.reduce( + (sum, meta) => sum + meta.keysCount, + 0n, + ); + const firstMeta = batch.metadata[0]; + + return { + ...batch, + metadata: [ + { + keysCount: totalKeysCount, + position: firstMeta.position, + priority: firstMeta.priority, + combined: true, + }, + ], + }; + } + + return batch; +}; + +/** + * Combines adjacent or overlapping batches to reduce visual clutter. + * Uses a 0.5% tolerance for determining adjacency. + * Preserves individual batch metadata for tooltips. + */ +const combineAdjacentBatches = (batches: BatchPart[]): BatchPart[] => { + if (batches.length <= 1) return batches; + + // Sort by offset + const sortedBatches = [...batches].sort((a, b) => a.offset - b.offset); + const combined: BatchPart[] = []; + + let current = sortedBatches[0]; + + for (let i = 1; i < sortedBatches.length; i++) { + const next = sortedBatches[i]; + const currentEnd = current.offset + current.width; + + // Check if batches are adjacent or overlapping (with small tolerance for visual proximity) + const isAdjacent = next.offset - currentEnd <= 0.5; // 0.5px tolerance + + if (isAdjacent) { + // Combine batches by merging metadata arrays + const combinedEnd = Math.max(currentEnd, next.offset + next.width); + + current = { + offset: current.offset, + width: combinedEnd - current.offset, + metadata: mergeMetadataArrays(current.metadata, next.metadata), + }; + } else { + // Add current batch and start new one + combined.push(ensureMetadataWithinTooltipLimit(current)); + current = next; + } + } + + // Add the last batch + combined.push(ensureMetadataWithinTooltipLimit(current)); + + return combined; +}; diff --git a/features/view-keys/deposit-queue/hooks/use-deposit-queue-graph.ts b/features/view-keys/deposit-queue/hooks/use-deposit-queue-graph.ts new file mode 100644 index 00000000..75a48874 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/use-deposit-queue-graph.ts @@ -0,0 +1,36 @@ +import { useMemo } from 'react'; +import type { UseDepositQueueGraphResult } from './enhanced-types'; +import { createMultiQueueVisualization } from './use-multi-queue'; +import { isMultiQueue, useQueueData } from './use-queue-data'; +import { createSingleQueueVisualization } from './use-single-queue'; + +export const useDepositQueueGraph = ( + fullView = false, +): UseDepositQueueGraphResult => { + const { shareLimit, queueAnalysis, submittingAllocation, isLoading } = + useQueueData(); + + return useMemo((): UseDepositQueueGraphResult => { + if (isLoading || !shareLimit) { + return { isLoading: true }; + } + + const data = isMultiQueue(queueAnalysis) + ? createMultiQueueVisualization( + queueAnalysis, + shareLimit, + submittingAllocation, + fullView, + ) + : createSingleQueueVisualization( + shareLimit, + submittingAllocation, + fullView, + ); + + return { + isLoading: false, + data, + }; + }, [isLoading, shareLimit, queueAnalysis, submittingAllocation, fullView]); +}; diff --git a/features/view-keys/deposit-queue/hooks/use-multi-queue.ts b/features/view-keys/deposit-queue/hooks/use-multi-queue.ts new file mode 100644 index 00000000..2e8d4843 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/use-multi-queue.ts @@ -0,0 +1,145 @@ +import { GraphPart } from '../types'; +import type { DepositQueueAnalysis } from './calculate-and-select-by-operator'; +import type { + QueueGraphData, + QueuePart, + ShareLimit, + SubmittingAllocation, +} from './enhanced-types'; +import { + calculateGraphBounds, + calculateLimitOffset, + calculateSegmentSize, +} from './graph-calculations'; +import { collectOperatorBatches } from './operator-batch-collector'; + +const getPriorityType = (priority: number, overLimit: boolean): GraphPart => { + const base = `priority${priority}`; + const result = overLimit ? `${base}OverLimit` : base; + return result as GraphPart; +}; + +export const createMultiQueueVisualization = ( + queueAnalysis: DepositQueueAnalysis, + shareLimit: ShareLimit, + submittingAllocation: SubmittingAllocation | undefined, + fullView: boolean, +): QueueGraphData => { + const { active, queue, capacity, activeLeft } = shareLimit; + const added = submittingAllocation?.keysCount || 0n; + + // Calculate graph bounds and coordinates + const bounds = calculateGraphBounds({ + active, + queue, + capacity, + added, + fullView, + }); + + // Calculate segment sizes + const activeSize = calculateSegmentSize(active, 0n, bounds); + + const limitOffset = calculateLimitOffset(capacity, bounds); + + // Process multi-queue data + const { queueAnalysis: queues } = queueAnalysis; + + // Process priority queues and insert added keys at appropriate positions + const priorityQueues: QueuePart[] = []; + let cumulativeKeys = 0n; + let cumulativeAddedKeys = 0n; + + queues.forEach((queueData) => { + if (queueData.totalKeysInQueue > 0n) { + const keysInQueue = queueData.totalKeysInQueue; + + // Calculate queue segments + const queueUnderLimit = + activeLeft > 0n && cumulativeKeys < activeLeft + ? cumulativeKeys + keysInQueue <= activeLeft + ? keysInQueue + : activeLeft - cumulativeKeys + : 0n; + + const queueOverLimit = keysInQueue - queueUnderLimit; + const segmentStartPos = active + cumulativeKeys; + + const underLimitSize = calculateSegmentSize( + queueUnderLimit, + segmentStartPos, + bounds, + ); + + const overLimitSize = calculateSegmentSize( + queueOverLimit, + segmentStartPos + queueUnderLimit, + bounds, + ); + + priorityQueues.push( + { + type: getPriorityType(queueData.queueIndex, false), + keysCount: queueUnderLimit, + width: underLimitSize, + }, + { + type: getPriorityType(queueData.queueIndex, true), + keysCount: queueOverLimit, + width: overLimitSize, + }, + ); + + cumulativeKeys += keysInQueue; + } + + const [, submitting] = + submittingAllocation?.allocation?.find( + ([priority]) => priority === queueData.queueIndex, + ) || []; + + if (submitting) { + const addedPrioritySize = calculateSegmentSize( + submitting, + active + cumulativeKeys + cumulativeAddedKeys, + bounds, + ); + + priorityQueues.push({ + type: 'added', + keysCount: submitting, + width: addedPrioritySize, + metadata: [ + { + keysCount: submitting, + position: cumulativeKeys + cumulativeAddedKeys, + priority: queueData.queueIndex, + }, + ], + }); + + cumulativeAddedKeys += submitting; + } + }); + + const operatorData = collectOperatorBatches({ + queueDataList: queues, + activeKeys: active, + bounds, + submittingAllocation, + }); + + return { + parts: [ + { type: 'active', width: activeSize, keysCount: active }, + ...priorityQueues, + ], + limit: { + offset: limitOffset, + keysCount: capacity, + }, + operator: operatorData, + farAway: bounds.farAway, + submittingKeysCount: submittingAllocation?.keysCount, + }; +}; diff --git a/features/view-keys/deposit-queue/hooks/use-queue-data.ts b/features/view-keys/deposit-queue/hooks/use-queue-data.ts new file mode 100644 index 00000000..d63e97ed --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/use-queue-data.ts @@ -0,0 +1,70 @@ +import { + useCurveParameters, + useDepositQueueBatches, + useNodeOperatorId, + useOperatorInfo, + useShareLimit, +} from 'modules/web3'; +import { useFormContext } from 'react-hook-form'; +import { DepositDataInputType } from 'shared/hook-form/deposit-data'; +import { calculateAndSelectByOperator } from './calculate-and-select-by-operator'; +import type { + ShareLimit, + OperatorInfo, + SubmittingAllocation, +} from './enhanced-types'; +import type { DepositQueueAnalysis } from './calculate-and-select-by-operator'; +import { useCurrentCurveId } from 'shared/hooks'; +import { calculatePriorityPlacement } from './calculate-priority-placement'; + +export type QueueDataResult = { + nodeOperatorId: bigint | undefined; + operatorInfo: OperatorInfo | undefined; + shareLimit: ShareLimit | undefined; + queueAnalysis: DepositQueueAnalysis | undefined; + submittingAllocation: SubmittingAllocation | undefined; + isLoading: boolean; +}; + +export const useQueueData = (): QueueDataResult => { + const nodeOperatorId = useNodeOperatorId(); + const { data: operatorInfo } = useOperatorInfo(nodeOperatorId); + const { data: shareLimit } = useShareLimit(); + const { data: queueAnalysis } = useDepositQueueBatches( + calculateAndSelectByOperator(nodeOperatorId), + ); + + const curveId = useCurrentCurveId(); + const { data: queueConfig } = useCurveParameters( + curveId, + (params) => params.queueConfig, + ); + + const form = useFormContext(); + const submittingCount = form?.getValues('depositData')?.length; + + const submittingAllocation = calculatePriorityPlacement( + operatorInfo, + queueConfig, + submittingCount, + ); + + return { + nodeOperatorId, + operatorInfo, + shareLimit, + queueAnalysis, + submittingAllocation, + isLoading: !shareLimit, + }; +}; + +export const isMultiQueue = ( + queueAnalysis: DepositQueueAnalysis | undefined, +): queueAnalysis is DepositQueueAnalysis => { + return Boolean( + queueAnalysis && + queueAnalysis.queueAnalysis && + queueAnalysis.queueAnalysis.some((q) => q.totalKeysInQueue > 0n), + ); +}; diff --git a/features/view-keys/deposit-queue/hooks/use-single-queue.ts b/features/view-keys/deposit-queue/hooks/use-single-queue.ts new file mode 100644 index 00000000..ac3ff987 --- /dev/null +++ b/features/view-keys/deposit-queue/hooks/use-single-queue.ts @@ -0,0 +1,71 @@ +import type { + SubmittingAllocation, + QueueGraphData, + ShareLimit, +} from './enhanced-types'; +import { + calculateGraphBounds, + calculateLimitOffset, + calculateSegmentSize, +} from './graph-calculations'; + +export const createSingleQueueVisualization = ( + shareLimit: ShareLimit, + submittingAllocation: SubmittingAllocation | undefined, + fullView: boolean, +): QueueGraphData => { + const { active, queue, capacity, activeLeft } = shareLimit; + const added = submittingAllocation?.keysCount || 0n; + + // Calculate graph bounds and coordinates + const bounds = calculateGraphBounds({ + active, + queue, + capacity, + added, + fullView, + }); + + // Calculate segment sizes + const activeSize = calculateSegmentSize(active, 0n, bounds); + + const addedSize = calculateSegmentSize(added, queue + active, bounds); + + const limitOffset = calculateLimitOffset(capacity, bounds); + + // Calculate queue segments + const queueUnderLimit = + activeLeft > 0n ? (queue < activeLeft ? queue : activeLeft) : 0n; + const queueOverLimit = queue - queueUnderLimit; + + const queueUnderLimitSize = calculateSegmentSize( + queueUnderLimit, + active, + bounds, + ); + + const queueOverLimitSize = calculateSegmentSize( + queueOverLimit, + queueUnderLimit + active, + bounds, + ); + + return { + parts: [ + { type: 'active', width: activeSize, keysCount: active }, + { type: 'queue', width: queueUnderLimitSize, keysCount: queueUnderLimit }, + { + type: 'queueOverLimit', + width: queueOverLimitSize, + keysCount: queueOverLimit, + }, + { type: 'added', width: addedSize, keysCount: added }, + ], + limit: { + offset: limitOffset, + keysCount: capacity, + }, + farAway: bounds.farAway, + submittingKeysCount: submittingAllocation?.keysCount, + }; +}; diff --git a/features/view-keys/deposit-queue/hover-provider.tsx b/features/view-keys/deposit-queue/hover-provider.tsx index c5523f33..65c04cfb 100644 --- a/features/view-keys/deposit-queue/hover-provider.tsx +++ b/features/view-keys/deposit-queue/hover-provider.tsx @@ -8,25 +8,34 @@ import { import invariant from 'tiny-invariant'; import { GraphPart } from './types'; -export type HoverContextType = { +export type GraphInteractionContextType = { hover?: GraphPart; setHover: (hover?: GraphPart) => void; + fullView: boolean; + setFullView: (fullView: boolean) => void; }; -const HoverContext = createContext({} as HoverContextType); +const GraphInteractionContext = createContext( + {} as GraphInteractionContextType, +); -export const HoverProvider: FC = ({ children }) => { +export const GraphInteractionProvider: FC = ({ + children, +}) => { const [hover, setHover] = useState(); + const [fullView, setFullView] = useState(false); return ( - + {children} - + ); }; -export const useHover = () => { - const value = useContext(HoverContext); - invariant(value, 'useHover was used outside the provider'); +export const useGraphInteraction = () => { + const value = useContext(GraphInteractionContext); + invariant(value, 'useGraphInteraction was used outside the provider'); return value; }; diff --git a/features/view-keys/deposit-queue/legend.tsx b/features/view-keys/deposit-queue/legend.tsx index 5308a4ef..514904f9 100644 --- a/features/view-keys/deposit-queue/legend.tsx +++ b/features/view-keys/deposit-queue/legend.tsx @@ -1,23 +1,18 @@ import { FC, useCallback } from 'react'; import { Stack } from 'shared/components'; -import { useHover } from './hover-provider'; +import { useGraphInteraction } from './hover-provider'; import { ChipStyle, CircleStyle, LegendStyle, PartStyle } from './style'; +import { getPriorityName } from './get-priority-name'; import { GraphPart } from './types'; type LegendProps = { type: GraphPart; - title: string; - count?: string; + keysCount?: number | bigint; hide?: boolean; }; -export const Legend: FC = ({ - type, - title, - count, - hide = false, -}) => { - const { setHover } = useHover(); +export const Legend: FC = ({ type, keysCount, hide = false }) => { + const { setHover } = useGraphInteraction(); const handleHover = useCallback(() => { setHover(type); @@ -30,6 +25,12 @@ export const Legend: FC = ({ return null; } + const title = getPriorityName(type); + + if (!keysCount && !['limit', 'active'].includes(type)) { + return null; + } + return ( @@ -37,10 +38,8 @@ export const Legend: FC = ({ {title} - {(count !== undefined && ( - - {count} - + {(keysCount !== undefined && ( + {keysCount.toString()} )) || null} diff --git a/features/view-keys/deposit-queue/line-wrapper.tsx b/features/view-keys/deposit-queue/line-wrapper.tsx new file mode 100644 index 00000000..c4db83b0 --- /dev/null +++ b/features/view-keys/deposit-queue/line-wrapper.tsx @@ -0,0 +1,18 @@ +import { FC, PropsWithChildren } from 'react'; +import { useGraphInteraction } from './hover-provider'; +import { FarStyle, WrapperStyle } from './style'; + +type Props = { farAway: boolean }; + +export const LineWrapper: FC> = ({ + children, + farAway, +}) => { + const { setFullView } = useGraphInteraction(); + return ( + setFullView(false)}> + + ); +}; diff --git a/features/view-keys/deposit-queue/part.tsx b/features/view-keys/deposit-queue/part.tsx index d6f5c8c2..bfaac6e9 100644 --- a/features/view-keys/deposit-queue/part.tsx +++ b/features/view-keys/deposit-queue/part.tsx @@ -1,24 +1,60 @@ -import { FC } from 'react'; -import { useHover } from './hover-provider'; -import { GraphPart } from './types'; +import { Tooltip } from '@lidofinance/lido-ui'; +import { FC, useCallback } from 'react'; +import { useGraphInteraction } from './hover-provider'; import { PartStyle } from './style'; +import { BatchMetadata, GraphPart } from './types'; +import { BatchTooltipContent } from './batch-tooltip-content'; +import { AddedTooltipContent } from './added-tooltip-content'; type PartProps = { type: GraphPart; - size?: number; + width?: number; offset?: number; -} & React.HTMLAttributes; + metadata?: BatchMetadata; +}; + +export const Part: FC = ({ type, width, offset, metadata }) => { + const { hover, setFullView } = useGraphInteraction(); + + const onMouseEnter = useCallback(() => { + setFullView(true); + }, [setFullView]); -export const Part: FC = ({ type, size, offset, ...props }) => { - const { hover } = useHover(); + if (!width && type !== 'limit') { + return null; + } - return ( + const part = ( ); + + if (type === 'batch' && metadata) { + return ( + } + placement="top" + > + {part} + + ); + } + + if (type === 'added' && metadata) { + return ( + } + placement="top" + > + {part} + + ); + } + + return part; }; diff --git a/features/view-keys/deposit-queue/style.ts b/features/view-keys/deposit-queue/style.ts index fe109270..b15f9466 100644 --- a/features/view-keys/deposit-queue/style.ts +++ b/features/view-keys/deposit-queue/style.ts @@ -3,6 +3,61 @@ import { StackStyle } from 'shared/components'; import styled, { css } from 'styled-components'; import { GraphPart } from './types'; +const COLOR_VARIANTS = { + active: css` + color: #53ba95; + `, + queue: css` + color: #00a3ff; + `, + priority0: css` + color: #00cfff; + `, + priority1: css` + color: #007fff; + `, + priority2: css` + color: #0046ff; + `, + priority3: css` + color: #002db3; + `, + priority4: css` + color: #6e0eff; + `, + priority5: css` + color: #c747ff; + `, + queueOverLimit: css` + color: #81d1ff; + `, + priority0OverLimit: css` + color: #66e7ff; + `, + priority1OverLimit: css` + color: #66bfff; + `, + priority2OverLimit: css` + color: #668aff; + `, + priority3OverLimit: css` + color: #6685cc; + `, + priority4OverLimit: css` + color: #9966ff; + `, + priority5OverLimit: css` + color: #da85ff; + `, + batch: css` + color: #ffa276; + `, + added: css` + color: #ff8d47ff; + `, + limit: css``, +} as const; + export const WrapperStyle = styled.div` position: relative; `; @@ -33,77 +88,86 @@ export const LineStyle = styled.div` white-space: nowrap; `; +const linearGradient = css` + --part-color-1: currentColor; + --part-color-2: color-mix(in srgb, var(--part-color-1) 85%, white 15%); + + background: repeating-linear-gradient( + 120deg, + var(--part-color-1), + var(--part-color-1) 4px, + var(--part-color-2) 4px, + var(--part-color-2) 8px + ) + 0px fixed; +`; + type PartProps = { $type: GraphPart; - $size?: number; + $width?: number; $offset?: number; $fade?: boolean; }; -const linearGradient = ( - color1: string, - color2: string, - angle = 120, - w1 = 4, - w2 = 4, -) => css` - background: repeating-linear-gradient( - ${angle}deg, - ${color1}, - ${color1} ${w1}px, - ${color2} ${w1}px, - ${color2} ${w1 + w2}px - ); - background-attachment: fixed; - background-position-x: 0px; -`; - -const PART_VARIANTS = { - active: css` - background: #53ba95; - `, - queued: css` - ${linearGradient('#00a3ff', '#26b1ff')} - `, - queuedOverLimit: css` - ${linearGradient('#81d1ff', '#94d8ff')} - `, - yourQueued: css` - position: absolute; - left: ${({ $offset }) => $offset}%; - - ${linearGradient('#ffa276', '#ffb695')} - `, - added: css` - background: #f17ecb; - `, - limit: css` - position: absolute; - width: 2px; - left: calc(${({ $offset = 50 }) => $offset}% - 1px); - - top: -40%; - height: 180%; - - ${linearGradient('var(--lido-color-text)', 'transparent', 0, 5, 3)} - background-attachment: initial; - - mix-blend-mode: ${({ theme }) => - theme.name === ThemeName.light ? 'multiply' : 'plus-lighter'}; - `, +const getPartVariant = (type: GraphPart) => { + switch (type) { + case 'active': + case 'added': + return css` + background: currentColor; + `; + case 'batch': + return css` + position: absolute; + left: ${({ $offset }) => $offset}%; + + ${linearGradient} + `; + case 'limit': + return css` + position: absolute; + z-index: 1; + width: 2px; + left: ${({ $offset = 50 }) => + !$offset ? '1px' : `calc(${$offset}% - 1px)`}; + + top: -40%; + height: 180%; + + --part-color-1: var(--lido-color-text); + --part-color-2: transparent; + background: repeating-linear-gradient( + 0deg, + var(--part-color-1), + var(--part-color-1) 5px, + var(--part-color-2) 5px, + var(--part-color-2) 8px + ) + 0px; + + mix-blend-mode: ${({ theme }) => + theme.name === ThemeName.light ? 'multiply' : 'plus-lighter'}; + `; + default: + return css` + ${linearGradient} + `; + } }; export const PartStyle = styled.div` display: inline-block; height: 100%; - width: ${({ $size = 100 }) => $size}%; + width: ${({ $width = 100 }) => $width}%; opacity: ${({ $fade }) => ($fade ? '0.2' : '1')}; transition: opacity 0.25s ease-in-out, left 0.25s ease-in-out, width 0.25s ease-in-out; + position: relative; - ${(props) => PART_VARIANTS[props.$type]} + ${({ $type }) => COLOR_VARIANTS[$type] ?? ''} + ${({ $type }) => getPartVariant($type)} `; export const CircleStyle = styled(LineStyle)` @@ -119,26 +183,10 @@ export const LegendsStyle = styled(StackStyle)` gap: 12px 24px; `; -const CHIP_VARIANTS = { - active: css` - color: #53ba95; - `, - queued: css` - color: #00a3ff; - `, - queuedOverLimit: css` - color: #81d1ff; - `, - yourQueued: css` - color: #ffa276; - `, - added: css` - color: #f17ecb; - `, - limit: css``, -}; - -export const ChipStyle = styled.div<{ $type?: GraphPart; $loading?: boolean }>` +export const ChipStyle = styled.div<{ + $type: GraphPart; + $loading?: boolean; +}>` width: fit-content; padding: 0px 4px; text-align: center; @@ -149,7 +197,7 @@ export const ChipStyle = styled.div<{ $type?: GraphPart; $loading?: boolean }>` font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; line-height: ${({ theme }) => theme.fontSizesMap.lg}px; font-weight: 700; - ${(props) => CHIP_VARIANTS[props.$type || 'active']} + ${({ $type }) => COLOR_VARIANTS[$type] ?? ''} ${({ $loading }) => $loading @@ -170,3 +218,10 @@ export const ChipStyle = styled.div<{ $type?: GraphPart; $loading?: boolean }>` ` : ''} `; + +export const TooltipContentStyle = styled(StackStyle).attrs({ + $direction: 'column', + $gap: 'xs', +})` + font-size: ${({ theme }) => theme.fontSizesMap.xxs}px; +`; diff --git a/features/view-keys/deposit-queue/types.ts b/features/view-keys/deposit-queue/types.ts index 1d194b66..e61050bf 100644 --- a/features/view-keys/deposit-queue/types.ts +++ b/features/view-keys/deposit-queue/types.ts @@ -1,7 +1,63 @@ export type GraphPart = | 'active' - | 'queued' - | 'queuedOverLimit' - | 'yourQueued' + | 'queue' + | 'queueOverLimit' + | 'priority0' + | 'priority1' + | 'priority2' + | 'priority3' + | 'priority4' + | 'priority5' + | 'priority0OverLimit' + | 'priority1OverLimit' + | 'priority2OverLimit' + | 'priority3OverLimit' + | 'priority4OverLimit' + | 'priority5OverLimit' | 'added' + | 'batch' | 'limit'; + +type KeysCount = { + keysCount: bigint; +}; + +export type QueuePart = { + width: number; + type: GraphPart; + metadata?: BatchMetadata; +} & KeysCount; + +export type QueueLimit = { + offset: number; +} & KeysCount; + +export type BatchMetadata = Array<{ + keysCount: bigint; + position: bigint; + priority: number; + combined?: boolean; +}>; + +export type BatchPart = { + offset: number; + width: number; + metadata: BatchMetadata; +}; + +export type OperatorQueue = { + batches: BatchPart[]; +} & KeysCount; + +export type QueueGraphData = { + limit: QueueLimit; + parts: QueuePart[]; + operator?: OperatorQueue; + farAway: boolean; + submittingKeysCount?: bigint; +}; + +export type UseDepositQueueGraphResult = { + isLoading: boolean; + data?: QueueGraphData; +}; diff --git a/features/view-keys/deposit-queue/use-deposit-queue-graph.ts b/features/view-keys/deposit-queue/use-deposit-queue-graph.ts deleted file mode 100644 index 0e14c885..00000000 --- a/features/view-keys/deposit-queue/use-deposit-queue-graph.ts +++ /dev/null @@ -1,158 +0,0 @@ -import { One, Zero } from '@ethersproject/constants'; -import { BigNumber } from 'ethers'; -import { useNodeOperatorId } from 'providers/node-operator-provider'; -import { useMemo } from 'react'; -import { useFormContext } from 'react-hook-form'; -import { DepositDataInputType } from 'shared/hook-form/form-controller'; -import { useCSMShareLimitInfo, useNodeOperatorInfo } from 'shared/hooks'; -import { useCSMQueueBatches } from 'shared/hooks/useCSMQueueBatches'; - -const POTENTIAL_ADDED = BigNumber.from(100); -const BACK = BigNumber.from(30); - -type Pos = { size: number; offset: number }; -const mergeBatches = (list?: Pos[]) => - list?.reduce((acc, c) => { - const last = acc.at(-1); - if (!last || last.offset + last.size < c.offset) return [...acc, c]; - last.size = c.offset + c.size - last.offset; - return acc; - }, [] as Pos[]); - -export const useDepositQueueGraph = (fullView = false) => { - const nodeOperatorId = useNodeOperatorId(); - const { data: info } = useNodeOperatorInfo(nodeOperatorId); - const hasDepositable = info?.depositableValidatorsCount; - - const { data, initialLoading } = useCSMShareLimitInfo(); - const { data: batches, initialLoading: isBatchesLoading } = - useCSMQueueBatches(hasDepositable ? nodeOperatorId : undefined); - - const form = useFormContext(); - const submitting: number | undefined = form?.getValues('depositData')?.length; - - const minSize = fullView ? 0.5 : 1; // percentage - - return useMemo(() => { - if (!data || initialLoading) return { isLoading: true }; - - const { active, queue, capacity, activeLeft } = data; - const added = submitting ? BigNumber.from(submitting) : Zero; - const isSubmitting = submitting !== undefined; - const potential = added.lt(POTENTIAL_ADDED) ? POTENTIAL_ADDED : added; - - const m0 = active.isZero() ? queue : active; - const m1 = m0.sub(BACK).isNegative() ? m0 : m0.sub(BACK); - const m2 = active.add(queue).add(potential); - const md = m2.sub(m1); - - const extraLow = !fullView && capacity.lt(m1.sub(md)); - const extraHigh = !fullView && capacity.gt(m2.add(md)); - - const l1 = fullView - ? Zero - : m1.lt(capacity) - ? m1 - : extraLow - ? m1 - : capacity; - const l2 = m2.gt(capacity) ? m2 : extraHigh ? m2 : capacity; - const ld = l2.sub(l1); - - const g1 = fullView ? 0 : extraLow ? 15 : l1.gt(potential) ? 15 : 0; - const g2 = fullView ? 95 : extraHigh ? 85 : 95; - const gd = g2 - g1; - const farAway = g1 > 0; - - const cc = (v: BigNumber) => v.sub(l1).mul(gd).div(ld).add(g1).toNumber(); - const ccc = (value: BigNumber, prev = Zero) => { - const p = prev.isZero() ? 0 : Math.max(minSize, cc(prev)); - return value.isZero() ? 0 : Math.max(minSize, cc(value.add(prev)) - p); - }; - - const queueUnderLimit = queue.lt(activeLeft) ? queue : activeLeft; - const queueOverLimit = queue.sub(queueUnderLimit); - - const activeSize = ccc(active); - const queueSize = ccc(queueUnderLimit, active); - const queueOverLimitSize = ccc(queueOverLimit, queueUnderLimit.add(active)); - const addedSize = ccc(added, queue.add(active)); - const limitOffset = extraLow ? 8 : extraHigh ? 95 : cc(capacity); - - const koef = queue - .mul(100) - .div(batches?.summ || queue) - .toNumber(); - - const yourBatches = mergeBatches( - batches?.list.map((batch) => { - const offset = batch[0].mul(koef).div(100); - let size = batch[1].mul(koef).div(100); - if (size.isZero() && !batch[1].isZero()) size = One; - - const batchProps = { - size: ccc(size, active.add(offset)), - offset: cc(offset.add(active)), - }; - - if ( - batchProps.offset + batchProps.size > - activeSize + queueSize + queueOverLimitSize - ) { - batchProps.offset = - activeSize + queueSize + queueOverLimitSize - batchProps.size; - } - - return batchProps; - }), - ); - - const depositable: string = hasDepositable - ? isBatchesLoading - ? '...' - : hasDepositable.toString() - : '0'; - - return { - isLoading: false, - graph: { - active: { - size: activeSize, - }, - queue: { - size: queueSize, - }, - queueOverLimit: { - size: queueOverLimitSize, - }, - added: { - size: addedSize, - }, - limit: { - offset: limitOffset, - }, - your: yourBatches, - farAway, - isSubmitting, - }, - values: { - active: active.toString(), - queue: queueUnderLimit.toString(), - queueOverLimit: queueOverLimit.toString(), - added: added.toString(), - limit: capacity.toString(), - your: depositable, - }, - }; - }, [ - minSize, - batches?.list, - batches?.summ, - data, - fullView, - hasDepositable, - initialLoading, - isBatchesLoading, - submitting, - ]); -}; diff --git a/features/view-keys/view-keys-page.tsx b/features/view-keys/view-keys-page.tsx index d2b27710..f852d84a 100644 --- a/features/view-keys/view-keys-page.tsx +++ b/features/view-keys/view-keys-page.tsx @@ -3,15 +3,17 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { KeysPageSwitcher } from 'shared/navigate'; import { ViewKeys } from './view-keys'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { Faq } from 'shared/components'; +import { FAQ_KEYS } from 'faq'; export const ViewKeysPage: FC = () => ( + ); diff --git a/features/view-keys/view-keys-section/keys-table.tsx b/features/view-keys/view-keys-section/keys-table.tsx index 49b8ec78..4b9ddad9 100644 --- a/features/view-keys/view-keys-section/keys-table.tsx +++ b/features/view-keys/view-keys-section/keys-table.tsx @@ -1,62 +1,69 @@ -import { Tbody, Td, Text, Th, Thead, Tr } from '@lidofinance/lido-ui'; +import { KEY_STATUS, KeyWithStatus } from '@lidofinance/lido-csm-sdk'; import { FC } from 'react'; +import { SortButton, useTable } from 'providers/table-provider'; import { - Address, - BeaconchainPubkeyLink, + PriorityChip, + Pubkey, + PubkeyLinks, Stack, StatusChip, StatusComment, } from 'shared/components'; -import { KeyWithStatus, useSortedKeys } from 'shared/hooks'; -import { AddressRow, TableStyle } from './styles'; +import { useMaxPriorityKeyIndex } from 'shared/hooks'; +import { StrikesCount } from './strikes-counts'; +import { TableStyle } from './styles'; -type Props = { - keys?: KeyWithStatus[]; -}; - -export const KeysTable: FC = ({ keys }) => { - const sortedKeys = useSortedKeys(keys); +export const KeysTable: FC = () => { + const maxPriorityKeyIndex = useMaxPriorityKeyIndex(); + const { data } = useTable(); return ( - - - # - Key - Status - Comment - - - - {sortedKeys?.map(({ key, index, statuses }) => ( - - - - {index + 1} - - - - -

    } - /> - - - + + + + Key + + + Status + + + Strikes + + Comment + + + + {data.map((key) => ( + + + } /> + + - {statuses.map((status) => ( - + {key.statuses.map((status) => ( + + ) : null + } + /> ))} - - - - - + + + + + + + + ))} - + ); }; diff --git a/features/view-keys/view-keys-section/sort.ts b/features/view-keys/view-keys-section/sort.ts new file mode 100644 index 00000000..0119baf7 --- /dev/null +++ b/features/view-keys/view-keys-section/sort.ts @@ -0,0 +1,45 @@ +import { KEY_STATUS, KeyWithStatus } from '@lidofinance/lido-csm-sdk'; +import { SortCriteria, SortFunctions } from 'providers/table-provider'; +import { getArraySum } from 'utils'; + +const DEFAULT_STATUS_ORDER: KEY_STATUS[] = [ + KEY_STATUS.INVALID, + KEY_STATUS.DUPLICATED, + KEY_STATUS.UNBONDED, + KEY_STATUS.EXIT_REQUESTED, + KEY_STATUS.NON_QUEUED, + KEY_STATUS.UNCHECKED, + + KEY_STATUS.DEPOSITABLE, + KEY_STATUS.ACTIVATION_PENDING, + KEY_STATUS.ACTIVE, + KEY_STATUS.EXITING, + KEY_STATUS.WITHDRAWAL_PENDING, + KEY_STATUS.WITHDRAWN, + + KEY_STATUS.SLASHED, +]; + +const getStatusPriority = (statuses: KEY_STATUS[]): number => + DEFAULT_STATUS_ORDER.findIndex((st) => statuses.includes(st)); + +const sortByPubkey: SortCriteria = (item) => [ + item.pubkey, + item.index, +]; + +const sortByStatus: SortCriteria = (item) => [ + getStatusPriority(item.statuses), + item.index, +]; + +const sortByStrikes: SortCriteria = (item) => [ + getArraySum(item.strikes), + item.index, +]; + +export const sortFunctions: SortFunctions = { + pubkey: sortByPubkey, + statuses: sortByStatus, + strikes: sortByStrikes, +}; diff --git a/features/view-keys/view-keys-section/strikes-counts.tsx b/features/view-keys/view-keys-section/strikes-counts.tsx new file mode 100644 index 00000000..1d5cf5c6 --- /dev/null +++ b/features/view-keys/view-keys-section/strikes-counts.tsx @@ -0,0 +1,64 @@ +import { KeyStrikes } from '@lidofinance/lido-csm-sdk'; +import { Box, Text, Tooltip } from '@lidofinance/lido-ui'; +import { + useCurveParameters, + useNodeOperatorId, + useOperatorCurveId, +} from 'modules/web3'; +import { FC, useCallback } from 'react'; +import { useStrikeDates } from 'shared/hooks'; +import { formatDate, getArraySum } from 'utils'; + +export const StrikesCount: FC<{ strikes?: KeyStrikes }> = ({ strikes }) => { + const id = useNodeOperatorId(); + const { data: curveId } = useOperatorCurveId(id); + const { data: max } = useCurveParameters( + curveId, + (params) => params.strikesConfig.threshold, + ); + + const lastStrike = strikes?.findIndex((v) => !!v); + const getDates = useStrikeDates(undefined); + + const count = getArraySum(strikes); + const warning = max && count >= max; + + const content = ( + + 0 ? 'default' : 'secondary'} + > + {count} + + + /{max?.toString() ?? 0} + + + ); + + const getTooltip = useCallback( + (n: number) => { + const dates = getDates(n); + if (!dates) return null; + + return ( + <>Last Strike: {formatDate(dates?.receivedTimestamp, 'dd.MM.yyyy')} + ); + }, + [getDates], + ); + + return ( + <> + {lastStrike !== undefined ? ( + + {content} + + ) : ( + content + )} + + ); +}; diff --git a/features/view-keys/view-keys-section/styles.tsx b/features/view-keys/view-keys-section/styles.tsx index 2eba8978..43a99531 100644 --- a/features/view-keys/view-keys-section/styles.tsx +++ b/features/view-keys/view-keys-section/styles.tsx @@ -1,58 +1,47 @@ -import { Block, Table } from '@lidofinance/lido-ui'; -import { StackStyle } from 'shared/components/stack/style'; +import { Table } from 'shared/components'; import styled from 'styled-components'; -export const ViewKeysBlock = styled(Block)` - display: flex; - gap: ${({ theme }) => theme.spaceMap.md}px; - flex-direction: column; -`; - export const TableStyle = styled(Table)` - margin: -32px -32px; + grid-template-columns: 5fr 4fr 1fr; - thead tr::before, - thead tr::after, - th { - border-top: none; - } + tr { + gap: 12px 32px; - th { - padding: 24px 8px 16px 8px; - min-width: 40px; + ${({ theme }) => theme.mediaQueries.md} { + grid-template-columns: 1fr; + + padding: 20px 32px; + } } - td { - padding: 12px 8px; + th:nth-child(4) { + display: none; } - th > div { - display: flex; - gap: ${({ theme }) => theme.spaceMap.xs}px; - align-items: center; + td:nth-child(4) { + grid-column: 1 / -1; - svg { - width: 16px; + &:empty { + display: none; } } - td { - border-bottom: none; + td:empty, + td:has(> span:empty) { + display: none; } - td:last-child { - max-width: 200px; - } + td:nth-child(3) { + justify-self: center; - td:nth-child(2) { - min-width: max-content; + ${({ theme }) => theme.mediaQueries.md} { + justify-self: start; + } } - tbody tr:nth-child(odd) { - background-color: var(--lido-color-accentControlBg); + thead { + ${({ theme }) => theme.mediaQueries.md} { + display: none; + } } `; - -export const AddressRow = styled(StackStyle).attrs({ $gap: 'xs' })` - align-items: center; -`; diff --git a/features/view-keys/view-keys-section/view-keys-section.tsx b/features/view-keys/view-keys-section/view-keys-section.tsx index 4a9eef54..300e4641 100644 --- a/features/view-keys/view-keys-section/view-keys-section.tsx +++ b/features/view-keys/view-keys-section/view-keys-section.tsx @@ -1,20 +1,33 @@ +import { useNodeOperatorId, useOperatorKeysWithStatus } from 'modules/web3'; +import { TablePagination, TableProvider } from 'providers/table-provider'; import { FC } from 'react'; -import { WhenLoaded } from 'shared/components'; -import { useKeysWithStatus } from 'shared/hooks'; +import { Block, Stack, WhenLoaded } from 'shared/components'; import { KeysTable } from './keys-table'; -import { ViewKeysBlock } from './styles'; +import { sortFunctions } from './sort'; export const ViewKeysSection: FC = () => { - const { data: keys, initialLoading: loading } = useKeysWithStatus(); + const nodeOperatorId = useNodeOperatorId(); + const { data: keys, isPending: loading } = + useOperatorKeysWithStatus(nodeOperatorId); return ( - - - - - + + + + + + + + + + ); }; diff --git a/features/view-keys/view-keys.tsx b/features/view-keys/view-keys.tsx index 8be44488..36a48545 100644 --- a/features/view-keys/view-keys.tsx +++ b/features/view-keys/view-keys.tsx @@ -1,8 +1,8 @@ +import { ExtraWidth } from 'shared/components'; import NoSSRWrapper from 'shared/components/no-ssr-wrapper'; -import { useWeb3Key } from 'shared/hooks/useWeb3Key'; -import { ViewKeysSection } from './view-keys-section'; -import { ExtraWidth, Faq } from 'shared/components'; +import { useWeb3Key } from 'shared/hooks'; import { DepositQueue } from './deposit-queue'; +import { ViewKeysSection } from './view-keys-section'; export const ViewKeys = () => { const key = useWeb3Key(); @@ -14,7 +14,6 @@ export const ViewKeys = () => { - ); }; diff --git a/features/welcome/early-adoption-banner/early-adoption-banner.tsx b/features/welcome/early-adoption-banner/early-adoption-banner.tsx deleted file mode 100644 index 75ecefb7..00000000 --- a/features/welcome/early-adoption-banner/early-adoption-banner.tsx +++ /dev/null @@ -1,62 +0,0 @@ -import { FC } from 'react'; - -import { - DarkThemeProvider, - External, - LightThemeProvider, -} from '@lidofinance/lido-ui'; -import { getExternalLinks } from 'consts/external-links'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { MatomoLink, Stack } from 'shared/components'; -import { BlockStyled, Header, Heading, StyledButton } from './styles'; - -export const EarlyAdoptionBanner: FC = () => { - const links = getExternalLinks(); - - return ( - - -
    Early Adoption mode is active
    -

    - During this period, only curated community stakers are eligible to - join CSM. After the end of the period, CSM entry will be fully - permissionless. -

    -
    - {links && ( - - - - - Learn more about Early Adoption - - - - - - - See Early Adoption members list - - - - - )} -
    - ); -}; diff --git a/features/welcome/early-adoption-banner/index.ts b/features/welcome/early-adoption-banner/index.ts deleted file mode 100644 index cc08598b..00000000 --- a/features/welcome/early-adoption-banner/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './early-adoption-banner'; diff --git a/features/welcome/early-adoption-banner/styles.tsx b/features/welcome/early-adoption-banner/styles.tsx deleted file mode 100644 index 5de47241..00000000 --- a/features/welcome/early-adoption-banner/styles.tsx +++ /dev/null @@ -1,40 +0,0 @@ -import { Block, Button } from '@lidofinance/lido-ui'; -import { Stack } from 'shared/components'; -import styled from 'styled-components'; - -export const Heading = styled(Stack).attrs(() => ({ direction: 'column' }))``; - -export const Header = styled.h3` - font-size: ${({ theme }) => theme.fontSizesMap.lg}px; - line-height: ${({ theme }) => theme.fontSizesMap.xl}px; - font-weight: bold; -`; - -export const BlockStyled = styled(Block)` - display: flex; - flex-direction: column; - gap: ${({ theme }) => theme.spaceMap.xl}px; - - text-align: center; - color: var(--lido-color-primaryContrast); - font-size: ${({ theme }) => theme.fontSizesMap.xs}px; - line-height: ${({ theme }) => theme.fontSizesMap.lg}px; - - background: radial-gradient( - 114.67% 199.49% at 51.78% 123.98%, - #ef81f9 0%, - rgba(249, 129, 183, 0) 100% - ), - linear-gradient(97deg, #00a3ff 36.36%, #2238ff 99.58%); -`; - -export const StyledButton = styled(Button)` - min-width: max-content; - - span { - display: flex; - align-items: center; - justify-content: center; - gap: 6px; // @style - } -`; diff --git a/features/welcome/holesky-banner/holesky-banner.tsx b/features/welcome/holesky-banner/holesky-banner.tsx deleted file mode 100644 index b1442188..00000000 --- a/features/welcome/holesky-banner/holesky-banner.tsx +++ /dev/null @@ -1,39 +0,0 @@ -import { DarkThemeProvider, Text } from '@lidofinance/lido-ui'; -import { FC } from 'react'; -import { Stack } from 'shared/components'; -import { StyledAccordion } from './style'; - -export const HoleskyBanner: FC<{ open?: boolean }> = ({ open }) => { - return ( - - - - CSM is paused on Holesky - - - CSM is transitioning from the Holesky testnet to the Hoodi - testnet, and its operations on Holesky have been paused. - - - } - > - <> - - This means that uploading new keys is currently not possible, but - Node Operator stats can be viewed. - - - This update affects only CSM on Holesky testnet — CSM on Mainnet - remains fully operational. - - - Stay tuned for more details on the Hoodi testnet launch! - - - - - ); -}; diff --git a/features/welcome/holesky-banner/index.ts b/features/welcome/holesky-banner/index.ts deleted file mode 100644 index 07dbb04b..00000000 --- a/features/welcome/holesky-banner/index.ts +++ /dev/null @@ -1 +0,0 @@ -export * from './holesky-banner'; diff --git a/features/welcome/holesky-banner/style.ts b/features/welcome/holesky-banner/style.ts deleted file mode 100644 index 5e687c5b..00000000 --- a/features/welcome/holesky-banner/style.ts +++ /dev/null @@ -1,18 +0,0 @@ -import { Accordion } from '@lidofinance/lido-ui'; -import styled from 'styled-components'; - -export const StyledAccordion = styled(Accordion)` - --first-color: #bfdbfe; - --second-color: #ccfbf1; - - background: radial-gradient( - 1435.85% 196.07% at 95.46% -44.7%, - rgba(34, 56, 255, 0.8) 0%, - rgba(235, 0, 255, 0.4) 100% - ), - linear-gradient(102deg, #bae6fd -8.89%, #93c5fd 105.62%); - - > div + div p { - margin-bottom: 0.5em; - } -`; diff --git a/features/welcome/maintenance-page.tsx b/features/welcome/maintenance-page.tsx index b37bca12..42965cae 100644 --- a/features/welcome/maintenance-page.tsx +++ b/features/welcome/maintenance-page.tsx @@ -2,16 +2,12 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { MaintenanceBanner } from './maintenance-banner'; -import { WelcomeSection } from './welcome-section'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { TryCSM } from './try-csm'; +import { WelcomeSection } from 'shared/components'; export const MaintenancePage: FC = () => { return ( - + diff --git a/features/welcome/try-csm/try-csm.tsx b/features/welcome/try-csm/try-csm.tsx index a092b7b1..b8c885b9 100644 --- a/features/welcome/try-csm/try-csm.tsx +++ b/features/welcome/try-csm/try-csm.tsx @@ -1,11 +1,11 @@ import { Button, Text } from '@lidofinance/lido-ui'; import { getConfig } from 'config'; -import { CHAINS } from 'consts/chains'; import { CSM_MAINNET_LINK, CSM_TESTNET_LINK } from 'consts/external-links'; import { FC } from 'react'; import { MatomoLink } from 'shared/components'; import { StyledBlock, StyledStack } from './styles'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; const { defaultChain } = getConfig(); @@ -17,7 +17,7 @@ export const TryCSM: FC = () => { - Try CSM on Holesky + Try CSM on Hoodi { - CSM uses Holesky as a testnet playground for those who want to try the + CSM uses Hoodi as a testnet playground for those who want to try the module in action in a test environment. diff --git a/features/welcome/welcome-page.tsx b/features/welcome/welcome-page.tsx index 64fdefa2..8ec9085b 100644 --- a/features/welcome/welcome-page.tsx +++ b/features/welcome/welcome-page.tsx @@ -2,12 +2,11 @@ import { FC } from 'react'; import { Layout } from 'shared/layout'; import { Welcome } from './welcome'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { TryCSM } from './try-csm'; export const WelcomePage: FC = () => { return ( - + diff --git a/features/welcome/welcome-section/welcome-section.tsx b/features/welcome/welcome-section/welcome-section.tsx deleted file mode 100644 index 07c07c5f..00000000 --- a/features/welcome/welcome-section/welcome-section.tsx +++ /dev/null @@ -1,36 +0,0 @@ -import { FC, PropsWithChildren } from 'react'; - -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { MatomoLink } from 'shared/components'; -import { - BlockStyled, - CSMLogo, - ContentWrapper, - Header, - Heading, -} from './styles'; - -export const WelcomeSection: FC = ({ children }) => ( - - - -
    Community Staking Module
    -
    - -

    - The Community Staking Module (CSM) is a permissionless staking module - aimed at attracting community stakers to participate in the Lido on - Ethereum protocol as Node Operators. For a detailed description of the - module, follow the{' '} - - link - - . -

    -
    - {children} -
    -); diff --git a/features/welcome/welcome.tsx b/features/welcome/welcome.tsx index 5acdd433..6a29e4e9 100644 --- a/features/welcome/welcome.tsx +++ b/features/welcome/welcome.tsx @@ -1,35 +1,25 @@ import { FC } from 'react'; import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; -import { Stack } from 'shared/components'; -import { useAccount } from 'shared/hooks'; -import { useCsmPaused, useCsmPublicRelease } from 'shared/hooks/useCsmStatus'; +import { useDappStatus } from 'modules/web3'; +import { Stack, WelcomeSection } from 'shared/components'; import { Connect, Fallback } from 'shared/wallet'; -import { EarlyAdoptionBanner } from './early-adoption-banner'; -import { WelcomeSection } from './welcome-section'; import styled from 'styled-components'; -import { HoleskyBanner } from './holesky-banner'; -import { getConfig } from 'config'; -import { CHAINS } from 'consts/chains'; - -const { defaultChain } = getConfig(); export const Welcome: FC = () => { - const { active, isConnected } = useAccount(); - const { data: isPublicRelease } = useCsmPublicRelease(); - const { data: paused } = useCsmPaused(); + const { isSupportedChain, isWalletConnected } = useDappStatus(); - const isWrongChain = isConnected && !active; + const isWrongChain = isWalletConnected && !isSupportedChain; return ( <> - {defaultChain === CHAINS.Holesky && paused && } {isWrongChain && } I am a Node Operator @@ -37,12 +27,12 @@ export const Welcome: FC = () => { fullwidth matomoEvent={MATOMO_CLICK_EVENTS_TYPES.connectToBecomeNodeOperator} color="secondary" + data-testid="becomeANodeOperatorBtn" > Become a Node Operator - {!isPublicRelease && !paused && } ); }; diff --git a/global.d.ts b/global.d.ts index 9f0a2244..a8c3921c 100644 --- a/global.d.ts +++ b/global.d.ts @@ -1,6 +1,8 @@ interface Window { // see _document.js for definition _paq: undefined | [string, ...unknown[]][]; + + ethereum?: any; } declare module '*.svg' { @@ -26,28 +28,27 @@ declare module 'next/config' { maintenance: boolean; defaultChain: string; + rpcUrls_1: string | undefined; rpcUrls_17000: string | undefined; - ethplorerApiKey: string | undefined; + rpcUrls_560048: string | undefined; + clApiUrls_1: string | undefined; clApiUrls_17000: string | undefined; + clApiUrls_560048: string | undefined; - oneInchApiKey: string | undefined; + migalabsApiUrl: string | undefined; + migalabsApiToken: string | undefined; cspTrustedHosts: string | undefined; cspReportUri: string | undefined; cspReportOnly: string | undefined; - subgraphMainnet: string | undefined; - subgraphGoerli: string | undefined; - subgraphHolesky: string | undefined; - subgraphRequestTimeout: string | undefined; - rateLimit: string; rateLimitTimeFrame: string; - ethAPIBasePath: string; - rewardsBackendAPI: string | undefined; + validationAPI: string | undefined; + validationFilePath: string | undefined; }; publicRuntimeConfig: { basePath: string | undefined; diff --git a/lib/getFaq.ts b/lib/getFaq.ts deleted file mode 100644 index c31c3a3e..00000000 --- a/lib/getFaq.ts +++ /dev/null @@ -1,88 +0,0 @@ -import matter from 'gray-matter'; -import remark from 'remark'; -import html from 'remark-html'; -import externalLinks from 'remark-external-links'; -import { getConfig } from 'config'; -import { CHAINS } from 'consts/chains'; - -export type FaqItem = { - id: string; - content: string; - title: string; - earlyAdoptionMember: boolean | null; - onlyWithReferrer: boolean | null; - anchor: string | null; -}; - -export type FaqGetter = () => Promise; - -const readFaqFile = async (id: string): Promise => { - const fileContents = await import(`faq/${id}.md`); - const matterResult = matter(fileContents.default); - - const processedContent = await remark() - .use(externalLinks, { target: '_blank', rel: ['nofollow', 'noopener'] }) - .use(html) - .process(matterResult.content); - - return { - id, - content: processedContent.toString(), - title: String(matterResult.data.title || id), - anchor: matterResult.data.anchor ?? null, - earlyAdoptionMember: matterResult.data.earlyAdoption ?? null, - onlyWithReferrer: matterResult.data.onlyWithReferrer ?? null, - }; -}; - -const { defaultChain } = getConfig(); -const isMainnet = defaultChain === CHAINS.Mainnet; - -export const readFaqFiles = async (fileNames: string[]) => { - const ids = isMainnet - ? fileNames - : fileNames.map((name) => `testnet-${name}`); - - return Promise.all(ids.map(readFaqFile)); -}; - -export const getFaqMain = () => - readFaqFiles([ - 'main-1', - 'main-2', - 'main-3', - 'main-4', - 'main-5', - 'main-6', - 'main-7', - 'main-7a', - 'main-8', - ]); - -export const getFaqKeys = () => - readFaqFiles([ - 'keys-1', - 'keys-2', - 'keys-3', - 'keys-3a', - 'keys-4', - 'keys-4a', - 'keys-5', - 'keys-6', - 'keys-7', - 'keys-8', - 'keys-9', - 'keys-10', - 'keys-13', - 'keys-11', - 'keys-12', - ]); - -export const getFaqBond = () => - readFaqFiles(['bond-1', 'bond-2', 'bond-3', 'bond-4', 'bond-5']); - -export const getFaqLocked = () => - readFaqFiles(['locked-1', 'locked-2', 'locked-3']); - -export const getFaqRoles = () => - readFaqFiles(['roles-1', 'roles-2', 'roles-3', 'roles-4', 'roles-5']); diff --git a/lib/getProps.ts b/lib/getProps.ts deleted file mode 100644 index e008f900..00000000 --- a/lib/getProps.ts +++ /dev/null @@ -1,20 +0,0 @@ -import { GetServerSideProps } from 'next'; -import { FaqGetter } from './getFaq'; -import { secretConfig } from 'config'; - -export const getProps = - ( - faqGetter?: FaqGetter, - options?: { continueAnyway?: boolean }, - ): GetServerSideProps => - async () => { - const { maintenance, defaultChain } = secretConfig; - - if (!options?.continueAnyway && maintenance) return { notFound: true }; - - const props = { maintenance, defaultChain }; - - return { - props: faqGetter ? { ...props, faqList: await faqGetter() } : props, - }; - }; diff --git a/mock/queue/CLAUDE.md b/mock/queue/CLAUDE.md new file mode 100644 index 00000000..4d400594 --- /dev/null +++ b/mock/queue/CLAUDE.md @@ -0,0 +1,161 @@ +# Queue Mock Data Documentation + +This document describes the rules and relationships for creating realistic mock data for deposit queue testing scenarios. + +## Data Structure Overview + +The mock queue system simulates Lido's CSM (Community Staking Module) deposit queue with multiple priority levels and operator batches. + +## Core Data Relationships + +### 1. **depositableValidatorsCount vs Batch Data** + +`depositableValidatorsCount` represents the **actual** number of keys the operator can deposit, while batch data may contain **stale** information due to key removals. + +**Rules:** + +- `depositableValidatorsCount <= sum(operator's batches in all queues)` +- Batch data can be larger than `depositableValidatorsCount` (realistic - keys were removed but batches not updated) +- `depositableValidatorsCount` should never be larger than batch sum (impossible in real system) + +**Examples:** + +```javascript +// Realistic: Stale batch data (keys were removed) +operatorInfo: { depositableValidatorsCount: 15 } +operator batches total: 25 keys // ✅ Valid - 10 keys were removed + +// Realistic: Accurate batch data +operatorInfo: { depositableValidatorsCount: 30 } +operator batches total: 30 keys // ✅ Valid - data is current + +// Unrealistic: More depositable than batches +operatorInfo: { depositableValidatorsCount: 40 } +operator batches total: 25 keys // ❌ Invalid - impossible scenario +``` + +### 2. **shareLimit.queue vs Total Queue** + +`shareLimit.queue` represents the **actual** total of all queued keys across all operators. + +**Rules:** + +- `shareLimit.queue = sum(all keys in all priority queues)` +- `shareLimit.queue >= sum(all operators' depositableValidatorsCount)` +- Batch totals may differ from `shareLimit.queue` due to coefficient calculation + +### 3. **Priority System** + +**Realistic Priorities (Production Use):** + +- **Priority 0**: "Priority queue" - Highest priority, limited capacity per operator +- **Priority 4**: "Legacy queue" - For legacy operators +- **Priority 5**: "General queue" - Default queue for most operators + +**Reserved Priorities (Future Use):** + +- **Priority 1-3**: Reserved for future features, minimal test coverage + +### 4. **CSM Capacity Limits** + +**Rules:** + +- `shareLimit.active + shareLimit.queue <= shareLimit.capacity` (under limit) +- `shareLimit.active + shareLimit.queue > shareLimit.capacity` (over limit scenario) +- `shareLimit.activeLeft = max(0, shareLimit.capacity - shareLimit.active)` + +### 5. **Key Submission Logic** + +When operator submits keys: + +- First fill their designated priority (0, 4, or 5) up to `maxDeposits` +- Overflow goes to Priority 5 (General queue) +- Never submit to priorities 1-3 in realistic scenarios + +## Test Scenario Guidelines + +### Realistic Scenarios Should: + +1. **Use priorities 0, 4, 5** primarily +2. **Respect stale batch data** - `depositableValidatorsCount <= batch sum` +3. **Match queue totals** - `shareLimit.queue = sum of all batch keys` +4. **Include edge cases** - zero capacity, single keys, operator at queue end +5. **Test batch merging** - adjacent operator batches should merge in visualization + +### Edge Cases to Include: + +1. **Stale Data Scenarios:** + + - Operator with 0 `depositableValidatorsCount` but has batches (all keys removed) + - Large batch sum vs small `depositableValidatorsCount` + +2. **Position Scenarios:** + + - Operator at beginning, middle, end of priority queues + - Operator as only batch in a priority + - Adjacent batches that should merge + +3. **Capacity Scenarios:** + + - Zero capacity + - Very low capacity (1-5 keys) + - Exactly at capacity limit + - Far over capacity limit + +4. **Multi-Priority Scenarios:** + + - Keys only in Priority 0 + - Keys only in Priority 5 + - Keys split between Priority 0 and 5 + - All priorities empty except Priority 5 + - All priorities (P0-P5) active with keys + - Operator distributed across all 6 priorities + - All priorities active but operator has no keys + +5. **All-Priority Scenarios:** + + - Comprehensive queue state with all 6 priorities populated + - Operator presence across every priority level (P0-P5) + - All priorities extending beyond capacity limits + - Full queue activity without current operator participation + +6. **Submission Scenarios:** + - Submitting to empty Priority 0 + - Priority 0 at limit, overflow to Priority 5 + - Large submission that spans multiple priorities + +## Data Validation Checklist + +Before adding a new test scenario, verify: + +- [ ] `depositableValidatorsCount <= sum(operator batches)` +- [ ] `shareLimit.queue = sum(all batch keys)` +- [ ] Uses realistic priorities (0, 4, 5) +- [ ] CSM limits are realistic +- [ ] Scenario has clear testing purpose +- [ ] Edge cases are properly documented + +## Common Pitfalls + +1. **Making `depositableValidatorsCount` larger than batch sum** - Impossible in real system +2. **Using priorities 1-3 in realistic scenarios** - These are reserved for future +3. **Ignoring stale batch data** - Real system often has outdated batch information +4. **Inconsistent queue totals** - `shareLimit.queue` must match actual queue sum +5. **Unrealistic capacity limits** - Should reflect real CSM constraints + +## Testing Groups + +Test scenarios are organized into logical groups (42 total scenarios): + +- **[Basic]** (5): Empty queue, active-only, within/over limits +- **[Priority]** (5): Distribution across production priorities (P0, P4, P5) +- **[Position]** (6): Operator placements - beginning, middle, end, single key scenarios +- **[Stale]** (3): Realistic batch data inconsistencies due to key removals +- **[Edge]** (3): Capacity limits - zero, extremely low, single keys +- **[Submit]** (3): Key submission patterns and priority allocation +- **[Fallback]** (3): Undefined data, error scenarios, general queue fallback +- **[Stress]** (2): Large-scale, high-volume testing +- **[Coeff]** (1): Queue coefficient calculation edge cases +- **[Reserved]** (4): Reserved priorities (P1-P3) for future feature testing +- **[All Priorities]** (4): Comprehensive testing with all 6 priorities active +- **[Real]** (3): Realistic edge cases - P5-only, far triggers, multi-priority operators diff --git a/mock/queue/mock-data.ts b/mock/queue/mock-data.ts new file mode 100644 index 00000000..6a083b5a --- /dev/null +++ b/mock/queue/mock-data.ts @@ -0,0 +1,155 @@ +import { + ShareLimitInfo, + NodeOperatorInfo, + DepositQueueBatch, +} from '@lidofinance/lido-csm-sdk'; +import { DepositDataInputType } from 'shared/hook-form/deposit-data'; + +export type MockShareLimitParams = { + active: number; + queue: number; + capacity: number; + shareLimit?: number; +}; + +export type MockOperatorInfoParams = { + depositableValidatorsCount: number; + totalDepositedKeys?: number; + enqueuedCount?: number; +}; + +export type MockFormDataParams = { + depositDataLength: number; +}; + +export type MockDepositQueueParams = { + // Array of priority queues, each containing batches with [nodeOperatorId, keysCount] pairs + // Index 0 = Priority 0 (highest), Index 5 = Priority 5 (lowest) + priorities: Array>; +}; + +export type MockCurveParams = { + priority: number; + maxDeposits: number; + lowestPriority: number; +}; + +export type MockScenarioData = { + nodeOperatorId: number; + shareLimit: MockShareLimitParams; + operatorInfo: MockOperatorInfoParams; + formData: MockFormDataParams; + depositQueueBatches: MockDepositQueueParams | undefined; + curveParams?: MockCurveParams; +}; + +export const createMockShareLimit = ({ + active, + queue, + capacity, + shareLimit = capacity, +}: MockShareLimitParams): ShareLimitInfo => { + const activeBigInt = BigInt(active); + const queueBigInt = BigInt(queue); + const capacityBigInt = BigInt(capacity); + const shareLimitBigInt = BigInt(shareLimit); + + const activeLeft = + capacityBigInt > activeBigInt ? capacityBigInt - activeBigInt : 0n; + + return { + active: activeBigInt, + activeLeft, + capacity: capacityBigInt, + queue: queueBigInt, + shareLimit: shareLimitBigInt, + }; +}; + +export const createMockOperatorInfo = ({ + depositableValidatorsCount, + totalDepositedKeys = 0, + enqueuedCount = 0, +}: MockOperatorInfoParams): NodeOperatorInfo => { + return { + totalAddedKeys: 0, + totalWithdrawnKeys: 0, + totalDepositedKeys, + totalVettedKeys: 0, + stuckValidatorsCount: 0, + depositableValidatorsCount, + targetLimit: 0, + targetLimitMode: 0, + totalExitedKeys: 0, + enqueuedCount, + managerAddress: '0x0000000000000000000000000000000000000000', + rewardsAddress: '0x0000000000000000000000000000000000000000', + extendedManagerPermissions: false, + usedPriorityQueue: false, + }; +}; + +export const createMockDepositQueueBatches = ({ + priorities, +}: MockDepositQueueParams): DepositQueueBatch[][] => { + const mappedPriorities = priorities.map((priorityBatches) => + priorityBatches.map(([nodeOperatorId, keysCount]) => ({ + nodeOperatorId: BigInt(nodeOperatorId), + keysCount: keysCount, + })), + ); + + // Always return exactly 6 arrays (priorities 0-5) + const result: DepositQueueBatch[][] = []; + for (let i = 0; i < 6; i++) { + result.push(mappedPriorities[i] || []); + } + + return result; +}; + +export const createMockCurveParams = ({ + priority, + maxDeposits, + lowestPriority, +}: MockCurveParams) => { + return { + queueConfig: { + priority, + maxDeposits, + lowestPriority, + }, + }; +}; + +export const createMockFormData = ({ + depositDataLength, +}: MockFormDataParams): DepositDataInputType => { + const mockDepositItem = { + pubkey: + '0x000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + withdrawal_credentials: + '0x010000000000000000000000000000000000000000000000000000000000000000', + amount: 32000000000, + signature: + '0x00000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000', + deposit_message_root: + '0x0000000000000000000000000000000000000000000000000000000000000000', + deposit_data_root: + '0x0000000000000000000000000000000000000000000000000000000000000000', + fork_version: '0x00000000', + deposit_cli_version: '2.3.0', + network_name: 'mainnet', + }; + + const depositData = Array.from( + { length: depositDataLength }, + () => mockDepositItem, + ); + + return { + rawDepositData: undefined, + depositData, + confirmKeysReady: true, + }; +}; diff --git a/mock/queue/mock-providers.tsx b/mock/queue/mock-providers.tsx new file mode 100644 index 00000000..bb49f1a7 --- /dev/null +++ b/mock/queue/mock-providers.tsx @@ -0,0 +1,103 @@ +import { FC, PropsWithChildren } from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { useForm, FormProvider } from 'react-hook-form'; +import { + createMockShareLimit, + createMockOperatorInfo, + createMockFormData, + createMockDepositQueueBatches, + createMockCurveParams, + type MockScenarioData, +} from './mock-data'; +import { + NodeOperatorContext, + NodeOperatorContextValue, +} from 'modules/web3/operator-provider/node-operator-provider'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { + KEY_DEPOSIT_QUEUE_BATCHES, + KEY_OPERATOR_INFO, + KEY_SHARE_LIMIT, +} from 'modules/web3'; +import { hashKey } from 'utils'; + +// Main mock provider that combines all the mocking +export const MockDepositQueueProvider: FC< + PropsWithChildren<{ scenario: MockScenarioData }> +> = ({ children, scenario }) => { + const mockShareLimit = createMockShareLimit(scenario.shareLimit); + const mockOperatorInfo = createMockOperatorInfo(scenario.operatorInfo); + const mockFormData = createMockFormData(scenario.formData); + const mockDepositQueueBatches = scenario.depositQueueBatches + ? createMockDepositQueueBatches(scenario.depositQueueBatches) + : null; + const mockCurveParams = scenario.curveParams + ? createMockCurveParams(scenario.curveParams) + : undefined; + + // Create a unique QueryClient for this scenario to avoid cache conflicts + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + queryKeyHashFn: hashKey, + retry: false, + ...STRATEGY_IMMUTABLE, + }, + }, + }); + + // Pre-populate the query cache with mock data + queryClient.setQueryData(KEY_SHARE_LIMIT, mockShareLimit); + queryClient.setQueryData( + [...KEY_OPERATOR_INFO, { nodeOperatorId: BigInt(scenario.nodeOperatorId) }], + mockOperatorInfo, + ); + queryClient.setQueryData(KEY_DEPOSIT_QUEUE_BATCHES, mockDepositQueueBatches); + + // Mock curve parameters if provided + if (mockCurveParams) { + const mockCurveId = BigInt(0); // Default curve ID for testing + // Mock operator curve ID + queryClient.setQueryData( + [ + 'operator-curve-id', + { nodeOperatorId: BigInt(scenario.nodeOperatorId) }, + ], + mockCurveId, + ); + // Mock curve parameters + queryClient.setQueryData( + ['curve-parameters', { curveId: mockCurveId }], + mockCurveParams, + ); + } + + // Mock node operator context value + const mockNodeOperatorContextValue: NodeOperatorContextValue = { + isPending: false, + nodeOperator: { + id: BigInt(scenario.nodeOperatorId), + // Add other required properties if needed + } as any, + switchNodeOperator: () => {}, // Mock function + }; + + // Create form with mock data + const formMethods = useForm({ + defaultValues: mockFormData, + }); + + return ( + + + + {children} + + + + ); +}; + +// Note: These mock hooks are not exported as they conflict with the real hooks. +// Instead, the mock data is pre-populated in the QueryClient cache, +// so the real hooks will automatically use the mocked data. diff --git a/mock/queue/real-case-scenario.ts b/mock/queue/real-case-scenario.ts new file mode 100644 index 00000000..6acc37a0 --- /dev/null +++ b/mock/queue/real-case-scenario.ts @@ -0,0 +1,171 @@ +import { TestScenario } from './test-scenarios'; + +/** + * Real production queue data snapshot + * + * This scenario is based on actual production queue state captured from mainnet. + * It represents a real-world distribution of validators across priorities with + * operator 346 being the primary focus (having the most keys in priority 4). + * + * Key characteristics: + * - High-volume scenario with 8869 active validators + * - Large capacity (13257) with 2331 in queue + * - Priorities 0-3 are empty + * - Priority 4 contains the bulk of queued keys + * - Priority 5 has additional diverse operator distribution + * - Note: Original data had priority 6, excluded for system compatibility (expects 6 priorities: 0-5) + */ +export const realCaseScenario: TestScenario = { + title: '[Real] Production Queue Snapshot', + description: + 'Real mainnet queue state - operator 346 dominates priority 4 with 905 keys, high-volume scenario with 8869 active validators', + data: { + nodeOperatorId: 253, + shareLimit: { + active: 8869, + queue: 2331, + capacity: 13257, + shareLimit: 500, + }, + operatorInfo: { + depositableValidatorsCount: 1, // Matches operator 346's total keys in priority 4 + }, + formData: { + depositDataLength: 0, // No new keys being submitted + }, + depositQueueBatches: { + priorities: [ + // Priority 0: Empty (highest priority) + [], + // Priority 1: Empty (reserved) + [], + // Priority 2: Empty (reserved) + [], + // Priority 3: Empty (reserved) + [], + // Priority 4: Legacy queue - operator 346 dominates with 905 keys + [ + [346, 51], + [346, 150], + [346, 150], + [346, 150], + [346, 150], + [346, 150], + [346, 103], + [346, 1], + [457, 1], + [457, 25], + [239, 1], + [458, 25], + [458, 25], + [458, 25], + [458, 15], + [457, 25], + [457, 25], + [457, 25], + [452, 1], + [457, 25], + [457, 25], + [457, 25], + [457, 25], + [459, 1], + [99, 2], + [460, 3], + [461, 1], + [333, 25], + [344, 5], + [344, 4], + [333, 25], + [333, 25], + [333, 25], + [427, 1], + [325, 2], + [125, 25], + [125, 25], + [125, 18], + [427, 1], + [99, 1], + [463, 1], + [357, 1], + [295, 3], + ], + // Priority 5: General queue - diverse operator distribution + [ + [253, 1], + [464, 15], + [465, 1], + [25, 3], + [25, 1], + [49, 4], + [206, 1], + [286, 2], + [291, 15], + [466, 100], + [103, 1], + [237, 10], + [427, 1], + [257, 2], + [427, 1], + [207, 4], + [127, 15], + [466, 20], + [201, 5], + [185, 4], + [243, 4], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [399, 10], + [469, 6], + [464, 14], + [294, 64], + [460, 3], + [294, 77], + [171, 100], + [50, 5], + [17, 1], + [17, 1], + [17, 1], + [17, 1], + [17, 1], + [17, 1], + [470, 1], + [471, 1], + [260, 6], + [464, 61], + [472, 1], + [461, 2], + [152, 80], + [473, 1], + [99, 1], + ], + ], + }, + }, +}; diff --git a/mock/queue/test-scenarios.ts b/mock/queue/test-scenarios.ts new file mode 100644 index 00000000..56d79bca --- /dev/null +++ b/mock/queue/test-scenarios.ts @@ -0,0 +1,1815 @@ +import { MockScenarioData } from './mock-data'; +import { realCaseScenario } from './real-case-scenario'; + +export type TestScenario = { + title: string; + description: string; + data: MockScenarioData; +}; + +export const testScenarios: TestScenario[] = [ + // ======================================== + // GROUP 0: REAL PRODUCTION DATA + // ======================================== + realCaseScenario, + { + title: '[Real] All Priorities Empty Except P5', + description: 'Realistic scenario where only general queue has validators', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 150, + queue: 180, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 50, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [], + [], + [], + [], // Priorities 0-4: Empty + [ + [1, 50], + [2, 70], + [3, 60], + ], // Priority 5: All keys here + ], + }, + }, + }, + { + title: '[Real] Far Away Indicator Trigger', + description: 'Small queue with large capacity triggering far-away view', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 50, + queue: 25, + capacity: 2000, // Very large capacity + }, + operatorInfo: { + depositableValidatorsCount: 8, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[2, 10]], // Priority 0: Small queue + [], + [], + [], + [], // Empty priorities + [ + [1, 8], + [3, 7], + ], // Priority 5: Small operator presence + ], + }, + }, + }, + { + title: '[Real] Operator Across All Production Priorities', + description: 'Operator has keys in P0, P4, and P5 simultaneously', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 400, + queue: 350, + capacity: 900, + }, + operatorInfo: { + depositableValidatorsCount: 140, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 60], + [2, 50], + ], // Priority 0: Operator present + [], + [], + [], // Reserved + [ + [1, 40], + [3, 70], + ], // Priority 4: Operator present + [ + [1, 40], + [4, 60], + [5, 30], + ], // Priority 5: Operator present + ], + }, + }, + }, + + // ======================================== + // GROUP A: BASIC QUEUE STATES + // ======================================== + { + title: '[Basic] Empty Queue', + description: 'No active keys, no queued keys - fresh start state', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 0, + queue: 0, + capacity: 1000, + }, + operatorInfo: { + depositableValidatorsCount: 0, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [[], [], [], [], [], []], // All priorities empty + }, + }, + }, + { + title: '[Basic] Active Keys Only - No Queue', + description: + 'Only active validators, empty queue - typical established operator', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 0, + capacity: 1000, + }, + operatorInfo: { + depositableValidatorsCount: 0, // No keys in queue + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [[], [], [], [], [], []], // All priorities empty + }, + }, + }, + { + title: '[Basic] Queue Within CSM Limit', + description: 'Active + queue stays within CSM capacity', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 150, + capacity: 1000, + }, + operatorInfo: { + depositableValidatorsCount: 65, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[1, 45]], // Priority 0: 45 keys for operator 1 + [], + [], + [], // Priorities 1-3: Empty (reserved) + [[2, 40]], // Priority 4: Other operator + [ + [1, 20], + [3, 45], + ], // Priority 5: 20 keys for operator 1, others + ], + }, + }, + }, + { + title: '[Basic] Queue Exactly at CSM Limit', + description: 'Queue fills exactly to CSM capacity', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 400, + queue: 100, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 45, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 35], + [1, 30], + ], // Priority 0: operator at end + [], + [], + [], // Reserved priorities + [], // Priority 4: empty + [ + [1, 15], + [3, 20], + ], // Priority 5: operator first, others + ], + }, + }, + }, + { + title: '[Basic] Queue Exceeds CSM Limit', + description: 'Queue extends beyond CSM capacity - over limit scenario', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 250, + capacity: 450, // Only 150 capacity left + }, + operatorInfo: { + depositableValidatorsCount: 90, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 60], + [1, 50], + ], // Priority 0: 110 total + [], + [], + [], // Reserved + [[3, 40]], // Priority 4: 40 keys + [ + [1, 40], + [4, 60], + ], // Priority 5: 100 total + ], + }, + }, + }, + + // ======================================== + // GROUP B: PRIORITY DISTRIBUTION (0, 4, 5) + // ======================================== + { + title: '[Priority] Keys Only in Priority 0', + description: 'All validators in highest priority queue only', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 180, + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 80, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 80], + [2, 60], + [3, 40], + ], // Priority 0: All keys here + [], + [], + [], + [], + [], // All other priorities empty + ], + }, + }, + }, + { + title: '[Priority] Keys Only in Legacy Queue (P4)', + description: 'All validators in legacy priority queue only', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 150, + queue: 200, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 55, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [], + [], + [], + [], // Priorities 0-3: Empty + [ + [2, 70], + [1, 55], + [3, 45], + [4, 30], + ], // Priority 4: All keys here + [], // Priority 5: Empty + ], + }, + }, + }, + { + title: '[Priority] Keys Only in General Queue (P5)', + description: 'All validators in general (lowest) priority queue only', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 100, + queue: 250, + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 75, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [], + [], + [], + [], + [], // Priorities 0-4: Empty + [ + [2, 80], + [1, 75], + [3, 60], + [4, 35], + ], // Priority 5: All keys here + ], + }, + }, + }, + { + title: '[Priority] Keys in Priority 0 and 5 Only', + description: 'Edge priorities only - highest and lowest priority', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 220, + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 90, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 50], + [1, 60], + ], // Priority 0: 110 total + [], + [], + [], // Priorities 1-3: Reserved + [], // Priority 4: Empty + [ + [1, 30], + [3, 80], + ], // Priority 5: 110 total + ], + }, + }, + }, + { + title: '[Priority] Keys in Priority 0, 4, and 5', + description: 'Realistic distribution across production priorities', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 300, + capacity: 700, + }, + operatorInfo: { + depositableValidatorsCount: 105, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 50], + [2, 40], + ], // Priority 0: 90 total + [], + [], + [], // Reserved priorities + [ + [3, 60], + [1, 35], + ], // Priority 4: 95 total + [ + [1, 20], + [4, 55], + [5, 40], + ], // Priority 5: 115 total + ], + }, + }, + }, + + // ======================================== + // GROUP C: OPERATOR POSITION SCENARIOS + // ======================================== + { + title: '[Position] Operator at Beginning of Queues', + description: 'Operator batches positioned at start of priority segments', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 320, // 120 + 120 + 80 = 320 total + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 80, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 50], + [2, 40], + [3, 30], + ], // Priority 0: Operator first + [], + [], + [], // Reserved + [ + [1, 30], + [4, 50], + [5, 40], + ], // Priority 4: Operator first + [ + [6, 30], + [7, 20], + [8, 30], + ], // Priority 5: No operator + ], + }, + }, + }, + { + title: '[Position] Operator at End of Queues', + description: 'Operator batches positioned at end of priority segments', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 260, + capacity: 700, + }, + operatorInfo: { + depositableValidatorsCount: 75, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 60], + [3, 40], + [1, 45], + ], // Priority 0: Operator last + [], + [], + [], // Reserved + [], // Priority 4: Empty + [ + [4, 50], + [5, 35], + [1, 30], + ], // Priority 5: Operator last + ], + }, + }, + }, + { + title: '[Position] Operator with Adjacent Batches (Should Merge)', + description: + 'Consecutive operator batches that should merge in visualization', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 285, // 130 + 85 + 70 = 285 total + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 85, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 30], + [1, 25], + [1, 35], + [3, 40], + ], // Priority 0: Adjacent operator batches pos 2-3 + [], + [], + [], // Reserved + [ + [1, 20], + [1, 5], + [4, 60], + ], // Priority 4: Adjacent operator batches pos 1-2 + [ + [5, 40], + [6, 30], + ], // Priority 5: No operator + ], + }, + }, + }, + { + title: '[Position] Operator as Only Batch in Priority', + description: 'Priority segments where operator is the sole participant', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 140, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 90, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[1, 60]], // Priority 0: Only operator + [], + [], + [], // Reserved + [[1, 30]], // Priority 4: Only operator + [ + [2, 40], + [3, 10], + ], // Priority 5: Other operators only + ], + }, + }, + }, + { + title: '[Position] Operator Single Key at Very End of Queue', + description: + 'Operator has exactly 1 key positioned at the absolute end of all queues', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 291, // 140 + 90 + 61 = 291 total + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 1, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 80], + [3, 60], + ], // Priority 0: Other operators + [], + [], + [], // Reserved priorities + [ + [4, 50], + [5, 40], + ], // Priority 4: Other operators + [ + [6, 30], + [7, 20], + [8, 10], + [1, 1], + ], // Priority 5: Operator at very end + ], + }, + }, + }, + { + title: '[Position] Single Key at End + Submitting One More', + description: 'Operator has 1 key at queue end and submits 1 additional key', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 150, + queue: 241, // 120 + 60 + 61 = 241 total + capacity: 400, + }, + operatorInfo: { + depositableValidatorsCount: 1, // Current queue keys + totalDepositedKeys: 20, + enqueuedCount: 1, + }, + formData: { + depositDataLength: 1, // Submitting 1 more key + }, + curveParams: { + priority: 0, + maxDeposits: 30, // Room for 9 more (30 - 20 deposited - 1 queued) + lowestPriority: 5, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 70], + [3, 50], + ], // Priority 0: Other operators, will receive the new key + [], + [], + [], // Reserved priorities + [[4, 60]], // Priority 4: Other operator + [ + [5, 40], + [6, 20], + [1, 1], + ], // Priority 5: Operator at very end with 1 key + ], + }, + }, + }, + + // ======================================== + // GROUP D: STALE BATCH DATA EDGE CASES + // ======================================== + { + title: '[Stale] Operator with Zero Depositable Keys', + description: + 'All operator keys removed but batches still in queue (stale data)', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 400, + queue: 200, + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 0, // All keys were removed, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 40], + [2, 50], + ], // Priority 0: Stale operator batch + [], + [], + [], // Reserved + [], // Priority 4: Empty + [ + [1, 35], + [3, 75], + ], // Priority 5: More stale operator batches + ], + }, + }, + }, + { + title: '[Stale] Large Batch Sum vs Small Depositable Count', + description: 'Significant difference due to key removals', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 350, + queue: 250, + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 15, // Very small compared to batch sum (120) + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 80], + [2, 60], + ], // Priority 0: Large stale batch + [], + [], + [], // Reserved + [ + [1, 40], + [3, 70], + ], // Priority 4: More stale batches + [], // Priority 5: Empty + ], + }, + }, + }, + { + title: '[Stale] Multiple Operators with Stale Data', + description: + 'Several operators have inconsistent batch vs depositable counts', + data: { + nodeOperatorId: 2, // Focus on operator 2 + shareLimit: { + active: 300, + queue: 400, + capacity: 900, + }, + operatorInfo: { + depositableValidatorsCount: 25, // Much less than batch sum (80) + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 100], + [2, 50], + ], // Priority 0: Op 1 has 100, Op 2 has 50 (stale) + [], + [], + [], // Reserved + [ + [2, 30], + [3, 90], + ], // Priority 4: More stale data for Op 2 + [ + [4, 60], + [5, 70], + ], // Priority 5: Other operators + ], + }, + }, + }, + + // ======================================== + // GROUP E: CAPACITY & LIMIT EDGE CASES + // ======================================== + { + title: '[Edge] Zero Capacity', + description: 'Testing edge case with zero CSM capacity', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 100, + queue: 50, + capacity: 0, // Edge case + }, + operatorInfo: { + depositableValidatorsCount: 30, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[1, 30]], // Priority 0: Over limit + [], + [], + [], + [], // Other priorities + [[2, 20]], // Priority 5: Other operator + ], + }, + }, + }, + { + title: '[Edge] Extremely Low Capacity (2 keys room)', + description: 'Very tight capacity limit with large queue', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 198, + queue: 150, + capacity: 200, // Only 2 keys room left + }, + operatorInfo: { + depositableValidatorsCount: 45, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[2, 50]], // Priority 0: Other operator, over limit + [], + [], + [], // Reserved + [], // Priority 4: Empty + [ + [1, 45], + [3, 55], + ], // Priority 5: All over limit + ], + }, + }, + }, + { + title: '[Edge] Single Key Scenarios', + description: 'Minimum width testing with single validator keys', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 100, + queue: 6, + capacity: 200, + }, + operatorInfo: { + depositableValidatorsCount: 4, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[1, 2]], // Priority 0: 2 keys + [], + [], + [], // Reserved + [[1, 1]], // Priority 4: 1 key + [ + [1, 1], + [2, 2], + ], // Priority 5: Mixed + ], + }, + }, + }, + + // ======================================== + // GROUP F: KEY SUBMISSION SCENARIOS + // ======================================== + { + title: '[Submit] Submitting to Empty Priority 0', + description: 'Priority 0 empty, all 20 submitted keys should go to P0', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 100, + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 0, // No current queue keys + totalDepositedKeys: 10, + enqueuedCount: 0, + }, + formData: { + depositDataLength: 20, // Submitting 20 keys + }, + curveParams: { + priority: 0, + maxDeposits: 50, // Room for 40 more (50 - 10 deposited) + lowestPriority: 5, + }, + depositQueueBatches: { + priorities: [ + [], // Priority 0: Empty, will receive all 20 keys + [], + [], + [], // Reserved + [[2, 40]], // Priority 4: Other operator + [[3, 60]], // Priority 5: Other operator + ], + }, + }, + }, + { + title: '[Submit] Priority 0 Partial, Split Submission', + description: 'P0 partially full, keys split between P0 and P5', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 150, + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 0, + totalDepositedKeys: 25, + enqueuedCount: 10, + }, + formData: { + depositDataLength: 18, // Submitting 18 keys + }, + curveParams: { + priority: 0, + maxDeposits: 40, // Only 5 slots left (40 - 25 deposited - 10 queued) + lowestPriority: 5, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 60], + [3, 40], + ], // Priority 0: Has other operators + [], + [], + [], // Reserved + [], // Priority 4: Empty + [[4, 50]], // Priority 5: Will receive overflow (13 keys) + ], + }, + }, + }, + { + title: '[Submit] Priority 0 at Max, All to P5', + description: 'P0 at maxDeposits limit, all submitted keys go to P5', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 200, + capacity: 700, + }, + operatorInfo: { + depositableValidatorsCount: 0, + totalDepositedKeys: 30, + enqueuedCount: 20, + }, + formData: { + depositDataLength: 15, // Submitting 15 keys + }, + curveParams: { + priority: 0, + maxDeposits: 50, // Already at limit (30 deposited + 20 queued) + lowestPriority: 5, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 80], + [3, 60], + ], // Priority 0: At capacity + [], + [], + [], // Reserved + [], // Priority 4: Empty + [[4, 60]], // Priority 5: Will receive all 15 keys + ], + }, + }, + }, + + { + title: '[Submit] Empty Priority Queue with Keys in General Queue', + description: + 'Active keys present, P0 empty, submitting 10 keys, general queue with 50 keys and operator batch of 5 at end', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 50, // 25 + 20 + 5 = 50 total + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 5, // Current queue keys + totalDepositedKeys: 50, + enqueuedCount: 5, + }, + formData: { + depositDataLength: 10, // Submitting 10 keys + }, + curveParams: { + priority: 0, + maxDeposits: 70, // Room for 15 more (70 - 50 deposited - 5 queued) + lowestPriority: 5, + }, + depositQueueBatches: { + priorities: [ + [], // Priority 0: Empty, will receive all 10 submitted keys + [], + [], + [], // Reserved priorities + [], // Priority 4: Empty + [ + [2, 25], + [3, 20], + [1, 5], + ], // Priority 5: General queue, 50 total with operator at end + ], + }, + }, + }, + + // ======================================== + // GROUP G: FALLBACK SCENARIOS + // ======================================== + { + title: '[Fallback] Undefined Queue Data (Fallback Mode)', + description: 'Queue analysis failed, triggers general queue display', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 180, + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 45, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: undefined, // Triggers fallback + }, + }, + { + title: '[Fallback] Fallback with Queue Over Limit', + description: 'Fallback mode with queue exceeding CSM capacity', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 400, + queue: 350, // Over limit + capacity: 600, + }, + operatorInfo: { + depositableValidatorsCount: 85, + }, + formData: { + depositDataLength: 12, + }, + depositQueueBatches: undefined, // Triggers fallback + }, + }, + { + title: '[Fallback] Fallback with Keys Being Added', + description: 'Fallback mode while operator is submitting new keys', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 200, + capacity: 700, + }, + operatorInfo: { + depositableValidatorsCount: 65, + }, + formData: { + depositDataLength: 25, // Large key submission + }, + depositQueueBatches: undefined, // Triggers fallback + }, + }, + + // ======================================== + // GROUP H: LARGE SCALE & STRESS TESTS + // ======================================== + { + title: '[Stress] High Volume Scenario', + description: 'Large-scale testing with thousands of keys', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 8000, + queue: 4200, // 1900 + 1000 + 1300 = 4200 total + capacity: 15000, + }, + operatorInfo: { + depositableValidatorsCount: 1200, + }, + formData: { + depositDataLength: 100, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 600], + [2, 800], + [3, 500], + ], // Priority 0: 1900 total + [], + [], + [], // Reserved + [ + [1, 400], + [4, 600], + ], // Priority 4: 1000 total + [ + [1, 200], + [5, 700], + [6, 400], + ], // Priority 5: 1300 total + ], + }, + }, + }, + { + title: '[Stress] Maximum Queue Stress Test', + description: 'Extreme scenario testing system limits', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 5000, + queue: 10000, + capacity: 12000, + }, + operatorInfo: { + depositableValidatorsCount: 3000, + }, + formData: { + depositDataLength: 200, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 1000], + [2, 1500], + [3, 1000], + ], // Priority 0: 3500 total + [], + [], + [], // Reserved + [ + [1, 1200], + [4, 800], + [5, 1000], + ], // Priority 4: 3000 total + [ + [1, 800], + [6, 1200], + [7, 1500], + ], // Priority 5: 3500 total + ], + }, + }, + }, + + // ======================================== + // GROUP I: QUEUE COEFFICIENT SCENARIOS + // ======================================== + { + title: '[Coeff] Queue Sum Mismatch (Coefficient Test)', + description: + 'Batch totals differ from shareLimit.queue for coefficient calculation', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 250, // Doesn't match actual batch sum (300) + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 60, // Less than batch sum (80) + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 50], + [2, 60], + ], // Priority 0: 110 total + [], + [], + [], // Reserved + [ + [1, 30], + [3, 70], + ], // Priority 4: 100 total + [[4, 90]], // Priority 5: 90 total + // Total: 300 (doesn't match shareLimit.queue: 250) + ], + }, + }, + }, + + // ======================================== + // GROUP J: RESERVED PRIORITIES SCENARIOS + // ======================================== + { + title: '[Reserved] Keys Only in Reserved Priority 1', + description: + 'Testing reserved priority P1 - minimal usage for future feature testing', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 150, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 50, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [], // Priority 0: Empty + [ + [1, 50], + [2, 60], + [3, 40], + ], // Priority 1: Reserved - testing usage + [], + [], + [], + [], // Other priorities empty + ], + }, + }, + }, + { + title: '[Reserved] Keys Across Reserved Priorities P1-P3', + description: + 'Testing all reserved priorities P1, P2, P3 for future feature compatibility', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 280, + capacity: 700, + }, + operatorInfo: { + depositableValidatorsCount: 90, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [], // Priority 0: Empty + [ + [1, 40], + [2, 30], + ], // Priority 1: Reserved + [ + [1, 30], + [3, 50], + ], // Priority 2: Reserved + [ + [1, 20], + [4, 40], + ], // Priority 3: Reserved + [], // Priority 4: Empty + [[5, 70]], // Priority 5: Other operator + ], + }, + }, + }, + { + title: '[Reserved] Mixed Production and Reserved Priorities', + description: + 'Operator has keys in both production (P0, P5) and reserved (P2) priorities', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 320, + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 100, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 50], + [2, 40], + ], // Priority 0: Production priority + [], // Priority 1: Empty + [ + [1, 30], + [3, 60], + ], // Priority 2: Reserved priority with operator + [], // Priority 3: Empty + [[4, 70]], // Priority 4: Other operator + [ + [1, 20], + [5, 50], + ], // Priority 5: Production priority + ], + }, + }, + }, + { + title: '[Reserved] Reserved Priority Over Capacity Limit', + description: 'Reserved priority P2 extends beyond CSM capacity limit', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 450, + queue: 200, + capacity: 500, // Only 50 capacity left + }, + operatorInfo: { + depositableValidatorsCount: 80, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[2, 30]], // Priority 0: Under limit (30 keys) + [], // Priority 1: Empty + [ + [1, 80], + [3, 90], + ], // Priority 2: Reserved, crosses and exceeds limit + [], + [], + [], // Other priorities empty + ], + }, + }, + }, + + // ======================================== + // GROUP K: ALL PRIORITIES SCENARIOS + // ======================================== + { + title: '[All Priorities] Comprehensive Queue with All 6 Priorities', + description: 'All priorities (P0-P5) have keys - comprehensive queue state', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 300, + queue: 580, // 100 + 80 + 90 + 70 + 110 + 130 = 580 total + capacity: 1200, + }, + operatorInfo: { + depositableValidatorsCount: 105, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 60], + [1, 40], + ], // Priority 0: 100 total + [ + [3, 50], + [4, 30], + ], // Priority 1: 80 total + [ + [1, 35], + [5, 55], + ], // Priority 2: 90 total + [ + [6, 45], + [7, 25], + ], // Priority 3: 70 total + [ + [1, 30], + [8, 80], + ], // Priority 4: 110 total + [ + [9, 70], + [10, 40], + [11, 20], + ], // Priority 5: 130 total + ], + }, + }, + }, + { + title: '[All Priorities] Operator Distributed Across All 6 Priorities', + description: 'Operator has keys in every priority queue (P0-P5)', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 420, // 90 + 60 + 80 + 50 + 70 + 70 = 420 total + capacity: 800, + }, + operatorInfo: { + depositableValidatorsCount: 125, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 30], + [2, 60], + ], // Priority 0: Operator first, 90 total + [ + [3, 40], + [1, 20], + ], // Priority 1: Operator second, 60 total + [ + [1, 25], + [4, 55], + ], // Priority 2: Operator first, 80 total + [ + [5, 35], + [1, 15], + ], // Priority 3: Operator last, 50 total + [ + [1, 20], + [6, 50], + ], // Priority 4: Operator first, 70 total + [ + [7, 35], + [1, 15], + [8, 20], + ], // Priority 5: Operator middle, 70 total + ], + }, + }, + }, + { + title: '[All Priorities] All Priorities Over Capacity Limit', + description: + 'Every priority extends beyond CSM capacity - extreme over-limit', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 480, + queue: 650, // 120 + 100 + 110 + 90 + 120 + 110 = 650 total + capacity: 500, // Only 20 capacity left - all priorities over limit + }, + operatorInfo: { + depositableValidatorsCount: 95, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 70], + [1, 50], + ], // Priority 0: 120 total (over limit) + [ + [3, 60], + [4, 40], + ], // Priority 1: 100 total (over limit) + [ + [1, 25], + [5, 85], + ], // Priority 2: 110 total (over limit) + [ + [6, 50], + [7, 40], + ], // Priority 3: 90 total (over limit) + [ + [1, 20], + [8, 100], + ], // Priority 4: 120 total (over limit) + [ + [9, 70], + [10, 40], + ], // Priority 5: 110 total (over limit) + ], + }, + }, + }, + { + title: '[All Priorities] All Priorities Active - No Current Operator', + description: + 'All priorities (P0-P5) have keys but current operator has none', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 480, // 80 + 70 + 90 + 60 + 100 + 80 = 480 total + capacity: 1000, + }, + operatorInfo: { + depositableValidatorsCount: 0, // No keys in queue + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 50], + [3, 30], + ], // Priority 0: 80 total, no operator 1 + [ + [4, 40], + [5, 30], + ], // Priority 1: 70 total, no operator 1 + [ + [6, 55], + [7, 35], + ], // Priority 2: 90 total, no operator 1 + [ + [8, 35], + [9, 25], + ], // Priority 3: 60 total, no operator 1 + [ + [10, 60], + [11, 40], + ], // Priority 4: 100 total, no operator 1 + [ + [12, 50], + [13, 30], + ], // Priority 5: 80 total, no operator 1 + ], + }, + }, + }, + { + title: '[All Priorities] All Priorities Active - Little Submitted Keys', + description: + 'All priorities (P0-P5) have keys with current operator having few keys at the end', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 483, // 80 + 70 + 90 + 60 + 100 + 83 = 483 total (3 extra keys from operator 1) + capacity: 1000, + }, + operatorInfo: { + depositableValidatorsCount: 3, // Small number of keys + }, + formData: { + depositDataLength: 3, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 50], + [3, 30], + ], // Priority 0: 80 total, no operator 1 + [ + [4, 40], + [5, 30], + ], // Priority 1: 70 total, no operator 1 + [ + [6, 55], + [7, 35], + ], // Priority 2: 90 total, no operator 1 + [ + [8, 35], + [9, 25], + ], // Priority 3: 60 total, no operator 1 + [ + [10, 60], + [11, 40], + ], // Priority 4: 100 total, no operator 1 + [ + [12, 50], + [13, 30], + [1, 3], + ], // Priority 5: 83 total, operator 1 at the end with 3 keys + ], + }, + }, + }, + + // ======================================== + // GROUP L: METADATA MERGING & COMBINING + // ======================================== + { + title: '[Merge] Consecutive Batches Same Priority', + description: + 'Two consecutive operator batches in same priority should merge metadata', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 200, + queue: 60, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 60, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 25], + [1, 35], + ], // Priority 0: Consecutive operator batches (positions 0-25, 25-60) + [], + [], + [], + [], + [], + ], + }, + }, + }, + { + title: '[Merge] Non-Consecutive Batches Same Priority', + description: + 'Operator batches with gap between them should NOT merge metadata', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 150, + queue: 70, + capacity: 400, + }, + operatorInfo: { + depositableValidatorsCount: 60, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [1, 25], + [2, 10], + [1, 35], + ], // Priority 0: Operator batches with gap (positions 0-25, 35-60) + [], + [], + [], + [], + [], + ], + }, + }, + }, + { + title: '[Merge] Consecutive Batches Different Priorities', + description: + 'Consecutive operator batches across different priorities should NOT merge', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 250, + queue: 60, + capacity: 500, + }, + operatorInfo: { + depositableValidatorsCount: 60, + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [[1, 30]], // Priority 0: Operator batch + [], + [], + [], + [[1, 30]], // Priority 4: Operator batch (different priority array) + [], + ], + }, + }, + }, + { + title: '[Combine] Four Metadata Items', + description: + 'Four metadata items in clustered batches should combine with combined flag (> MAX_TOOLTIP_ITEMS)', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 500, + queue: 2000, // Large queue for 0.5% = 10 keys tolerance + capacity: 3000, + }, + operatorInfo: { + depositableValidatorsCount: 90, // 20 + 25 + 15 + 30 = 90 + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 500], + [1, 20], + [3, 3], + [1, 25], + [4, 400], + [1, 15], + [5, 3], + [1, 30], + [6, 4], + ], // Priority 0: Operator batches clustered in 2 groups (500-548, 948-996) + [], + [], + [], + [], + [[7, 1000]], // Priority 5: Large other operator batch + ], + }, + }, + }, + { + title: '[Combine] Five Plus Metadata Items', + description: + 'Five metadata items in multiple clusters should combine with combined flag', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 800, + queue: 3000, // Large queue for 0.5% = 15 keys tolerance + capacity: 4500, + }, + operatorInfo: { + depositableValidatorsCount: 130, // 25 + 30 + 20 + 30 + 25 = 130 + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 800], + [1, 25], + [3, 5], + [1, 30], + [4, 5], + [1, 20], + [5, 115], + ], // Priority 0: 3 operator batches clustered at 800-885 (gaps of 5 keys) + [], + [], + [], + [ + [6, 400], + [1, 30], + [7, 5], + [1, 25], + [8, 140], + ], // Priority 4: 2 operator batches clustered at 400-460 (gap of 5 keys) + [[9, 1400]], // Priority 5: Large other operator batch + ], + }, + }, + }, + { + title: '[Combine] Exactly Three Metadata Items', + description: + 'Boundary case: Exactly 3 metadata items in one cluster should NOT combine (≤ MAX_TOOLTIP_ITEMS)', + data: { + nodeOperatorId: 1, + shareLimit: { + active: 500, + queue: 2000, // Large queue for 0.5% = 10 keys tolerance + capacity: 3000, + }, + operatorInfo: { + depositableValidatorsCount: 75, // 30 + 25 + 20 = 75 + }, + formData: { + depositDataLength: 0, + }, + depositQueueBatches: { + priorities: [ + [ + [2, 800], + [1, 30], + [3, 5], + [1, 25], + [4, 5], + [1, 20], + [5, 115], + ], // Priority 0: 3 operator batches clustered at 800-885 (gaps of 5 keys) + [], + [], + [], + [], + [[6, 1000]], // Priority 5: Large other operator batch + ], + }, + }, + }, +]; diff --git a/mock/rewards/data.ts b/mock/rewards/data.ts new file mode 100644 index 00000000..5d16f4c7 --- /dev/null +++ b/mock/rewards/data.ts @@ -0,0 +1,69662 @@ +export const data = [ + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.0012698412698412698, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.0012698412698412698, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.0012698412698412698, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.0019047619047619048, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.0012698412698412698, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.0012698412698412698, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.0005911330049261084, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.001773399014778325, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.0006349206349206349, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1712871n, + refSlot: 1842399n, + frame: [56000, 57574], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0, + threshold: 0.9070561498332749, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1763717400, + endTimestamp: 1764321816, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.8457142857142858, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.8457142857142858, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.8457142857142858, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.8457142857142858, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.8457142857142858, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.8450793650793651, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.8482539682539683, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.8450793650793651, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.8476190476190476, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.846984126984127, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1665433n, + refSlot: 1791999n, + frame: [54425, 55999], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.8463492063492063, + threshold: 0.8958714685009193, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1763112600, + endTimestamp: 1763717016, + receivedRewards: 0n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9976354679802956, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 9, + validatorIndex: '1208844', + performance: 1, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 1017064882280122n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 1032299635191559n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 17, + validatorIndex: '1208852', + performance: 1, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9994088669950739, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 27, + validatorIndex: '1208862', + performance: 1, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9988177339901477, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 32, + validatorIndex: '1208867', + performance: 1, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 42, + validatorIndex: '1208877', + performance: 1, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9993650793650793, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 46, + validatorIndex: '1208881', + performance: 1, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9974603174603175, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9980952380952381, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1618521n, + refSlot: 1741599n, + frame: [52850, 54424], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9987301587301587, + threshold: 0.8866196549913157, + slashed: false, + receivedShares: 593449286866941n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1762507800, + endTimestamp: 1763112216, + receivedRewards: 602338644280027n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 1, + validatorIndex: '1208836', + performance: 1, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 5, + validatorIndex: '1208840', + performance: 1, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9974603174603175, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 11, + validatorIndex: '1208846', + performance: 1, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 1358651683573976n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 1379003111543403n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9974603174603175, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9988177339901477, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9980952380952381, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9974603174603175, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9988177339901477, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9987301587301587, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9993650793650793, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 48, + validatorIndex: '1208883', + performance: 1, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1572159n, + refSlot: 1691199n, + frame: [51275, 52849], + indexInReport: 49, + validatorIndex: '1208884', + performance: 1, + threshold: 0.9041567429297159, + slashed: false, + receivedShares: 792762474415545n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1761903000, + endTimestamp: 1762507416, + receivedRewards: 804637371116436n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9168253968253969, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9149206349206348, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9142857142857141, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9149206349206348, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9155555555555556, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9187301587301587, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 2960941440395666n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 3005293784101148n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9225615763546798, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 2960941440395666n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 3005293784101148n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9187301587301587, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 2960941440395666n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 3005293784101148n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9149206349206348, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.918095238095238, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 2960941440395666n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 3005293784101148n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9168253968253969, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.918095238095238, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9155555555555556, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9187301587301587, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9168253968253969, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.918095238095238, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9142857142857141, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9130158730158731, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9168253968253969, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.918095238095238, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9187301587301587, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.918095238095238, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.918423645320197, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9155555555555556, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9168253968253969, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.918095238095238, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9161904761904762, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9155555555555556, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9225615763546798, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.923743842364532, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9213793103448276, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9155555555555556, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9188302095031561, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9187301587301587, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9193650793650794, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 1727685830935630n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 1753565071485051n, + }, + { + blockNumber: 1524861n, + refSlot: 1640799n, + frame: [49700, 51274], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9174603174603173, + threshold: 0.9176923237837359, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1761298200, + endTimestamp: 1761902616, + receivedRewards: 0n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9911111111111112, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9904761904761905, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9923809523809524, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9898412698412699, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9923809523809524, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9885714285714285, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9949206349206349, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9904761904761905, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9898412698412699, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9904761904761905, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9898412698412699, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9892063492063492, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.993015873015873, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9949206349206349, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9961904761904762, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9961904761904762, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 1165228169683552n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 1182682280586268n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9917460317460317, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9949206349206349, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9904761904761905, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9911111111111112, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9949206349206349, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9942857142857143, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.993015873015873, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9929064039408867, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9911111111111112, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9873015873015873, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9936507936507937, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9958620689655172, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.993015873015873, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9885714285714285, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9904761904761905, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9917460317460317, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9942857142857143, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9892063492063492, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9917460317460317, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9923809523809524, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9917460317460317, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9885714285714285, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9936507936507937, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9961904761904762, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9923152709359605, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9873015873015873, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9911111111111112, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9961904761904762, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9883308619815038, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9885714285714285, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9923809523809524, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9917460317460317, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9879365079365079, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1478601n, + refSlot: 1590399n, + frame: [48125, 49699], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9936507936507937, + threshold: 0.9188928928826873, + slashed: false, + receivedShares: 679901389167736n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1760693400, + endTimestamp: 1761297816, + receivedRewards: 690085724354781n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9942857142857143, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9923809523809524, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9942857142857143, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9961904761904762, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.993015873015873, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.994088669950739, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 1435293025283508n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 1456792474312445n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9968253968253968, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9917460317460317, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9955555555555555, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9942857142857143, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9936507936507937, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9955555555555555, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9974603174603175, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9961904761904762, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9980952380952381, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9974603174603175, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9923152709359605, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9942857142857143, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9955555555555555, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9917460317460317, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9942857142857143, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9904761904761905, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9961904761904762, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9968253968253968, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9923809523809524, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9942857142857143, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9961904761904762, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9904761904761905, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9898412698412699, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9968253968253968, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.994088669950739, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9968253968253968, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9917460317460317, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1431724n, + refSlot: 1539999n, + frame: [46550, 48124], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9949206349206349, + threshold: 0.8776934372451525, + slashed: false, + receivedShares: 837482089038440n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1760088600, + endTimestamp: 1760693016, + receivedRewards: 850026846916277n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9917460317460317, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9961904761904762, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9911111111111112, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9980952380952381, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9961904761904762, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9961904761904762, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9942857142857143, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9974603174603175, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 1089409926812705n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 1105728345965130n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9911111111111112, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9974603174603175, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9961904761904762, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.993015873015873, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.994679802955665, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9942857142857143, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9923809523809524, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9961904761904762, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9936507936507937, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9974603174603175, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9993650793650793, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9949206349206349, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9942857142857143, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9955555555555555, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9968253968253968, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1384995n, + refSlot: 1489599n, + frame: [44975, 46549], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9942857142857143, + threshold: 0.8667586900075089, + slashed: false, + receivedShares: 635662046184683n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1759483800, + endTimestamp: 1760088216, + receivedRewards: 645183714248859n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9619047619047619, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9580952380952381, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9580952380952381, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9542857142857143, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.954920634920635, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9555555555555556, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.954920634920635, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.96, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 910759601308275n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 924401992987894n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9561904761904761, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.96, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.96, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9593650793650793, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9593650793650793, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9621674876847289, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.954920634920635, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.961576354679803, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9606349206349206, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9587301587301588, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9580952380952381, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9586206896551724, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9542857142857143, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9593650793650793, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9593650793650793, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9574603174603175, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9625396825396826, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.954920634920635, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9568253968253968, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1339103n, + refSlot: 1439199n, + frame: [43400, 44974], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9580952380952381, + threshold: 0.8933141892512583, + slashed: false, + receivedShares: 531420999112574n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1758879000, + endTimestamp: 1759483416, + receivedRewards: 539381226384681n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9892063492063492, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9879365079365079, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9898412698412699, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9955555555555555, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9961904761904762, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9917460317460317, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.993015873015873, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.986031746031746, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9917460317460317, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.993015873015873, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9942857142857143, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9955555555555555, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9917460317460317, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 954444704203379n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 968741460968365n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9961904761904762, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9942857142857143, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9892063492063492, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9949206349206349, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9904761904761905, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9955555555555555, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9942857142857143, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9917460317460317, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9904761904761905, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9911111111111112, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9898412698412699, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.993015873015873, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9917460317460317, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9942857142857143, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.993015873015873, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.986031746031746, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9898412698412699, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9892063492063492, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9885714285714285, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9911111111111112, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9949206349206349, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9885714285714285, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9923809523809524, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1291862n, + refSlot: 1388799n, + frame: [41825, 43399], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9936507936507937, + threshold: 0.8939854806534347, + slashed: false, + receivedShares: 556910909944702n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1758274200, + endTimestamp: 1758878616, + receivedRewards: 565252954050748n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.993015873015873, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9970443349753695, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9980952380952381, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9955555555555555, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9942857142857143, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9942857142857143, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9993650793650793, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9987301587301587, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9942857142857143, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 1156233911110820n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 1173553295793642n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9955555555555555, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9942857142857143, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9974603174603175, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9974603174603175, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9955555555555555, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9980952380952381, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9949206349206349, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9949206349206349, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9955555555555555, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9949206349206349, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9949206349206349, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9974603174603175, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9955555555555555, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.993015873015873, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9955555555555555, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9974603174603175, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9974603174603175, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9980952380952381, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9961904761904762, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9968253968253968, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9942857142857143, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9987301587301587, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9936507936507937, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9936507936507937, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9974603174603175, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1244138n, + refSlot: 1338399n, + frame: [40250, 41824], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9980952380952381, + threshold: 0.8866556657660963, + slashed: false, + receivedShares: 674653310673551n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1757669400, + endTimestamp: 1758273816, + receivedRewards: 684759034180543n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9955555555555555, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9955555555555555, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.99690566602443, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9993650793650793, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9970443349753695, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 949574207630139n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 963798008565913n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9968253968253968, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9993650793650793, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9961904761904762, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9961904761904762, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9968253968253968, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9949206349206349, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 30, + validatorIndex: '1208865', + performance: 1, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9955555555555555, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9955555555555555, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9968253968253968, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9961904761904762, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9993650793650793, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9955555555555555, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9968253968253968, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9980952380952381, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9968253968253968, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9987301587301587, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9949206349206349, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1196669n, + refSlot: 1287999n, + frame: [38675, 40249], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9974603174603175, + threshold: 0.8754885952595604, + slashed: false, + receivedShares: 554069013848951n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1757064600, + endTimestamp: 1757669016, + receivedRewards: 562368488807666n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9988177339901477, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 3, + validatorIndex: '1208838', + performance: 1, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9987301587301587, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 6, + validatorIndex: '1208841', + performance: 1, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9993650793650793, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 1331633955846282n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 1351580681605131n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9968253968253968, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9955555555555555, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9993650793650793, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9987301587301587, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9976354679802956, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 31, + validatorIndex: '1208866', + performance: 1, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9994088669950739, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9987301587301587, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9994088669950739, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9993650793650793, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9961904761904762, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9987301587301587, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9968253968253968, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9987301587301587, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9974603174603175, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9980952380952381, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9993650793650793, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1149935n, + refSlot: 1237599n, + frame: [37100, 38674], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9987301587301587, + threshold: 0.8843533408547883, + slashed: false, + receivedShares: 776997844712846n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1756459800, + endTimestamp: 1757064216, + receivedRewards: 788636600885787n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.9987301587301587, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9987301587301587, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9942857142857143, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9993650793650793, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9987301587301587, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 1365362365816994n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 1385814314006538n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9955555555555555, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9993650793650793, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9993650793650793, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9955555555555555, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9955555555555555, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9993650793650793, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9974603174603175, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9961904761904762, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.9955555555555555, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9987301587301587, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9987301587301587, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9980952380952381, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9955555555555555, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1103716n, + refSlot: 1187199n, + frame: [35525, 37099], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9968253968253968, + threshold: 0.8814908205270398, + slashed: false, + receivedShares: 796678104244964n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1755855000, + endTimestamp: 1756459416, + receivedRewards: 808611653696513n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 0, + validatorIndex: '1208835', + performance: 0.9869130100076983, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 745360238297212n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x96b50ceb53f7c7ff417b02a605c811ffe9cfba3d0e4f0183e79144f00c32958fbea88d23afd7fe9b67b50a2a36ea590b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 756525090469682n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 1, + validatorIndex: '1208836', + performance: 0.985373364126251, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 745360238297212n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2e70be2acbb553ebadd271734967c65c3208600d8639fe4fa6c79e27b62c07c04b23d7a73e90a9b90d29b42c445831b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 756525090469682n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 2, + validatorIndex: '1208837', + performance: 0.9869130100076983, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 745360238297212n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa60b7d36c1bfb0375530de7953a4f8ae9e7be7e784ea87b4c2c92d128bbf3d23362ebe4e7fbb869d149a38a039bacc02', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 756525090469682n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 3, + validatorIndex: '1208838', + performance: 0.9869130100076983, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 745360238297212n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa251beba8d4374629e322829a42a24be1028ebdbd98585bd29700bf9460a817d3689d528cfaf0fc24db9840e187f170b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 756525090469682n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 4, + validatorIndex: '1208839', + performance: 0.984937038414537, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89b02b07c17f3a59bec3bb894bf178bfa8526137ffcfdc0a83500c97242bba9f61213720e9ee7937d99e18071b021743', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 5, + validatorIndex: '1208840', + performance: 0.9838212634822804, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb76198b2a7fbd01b46c90686a087e4e6dd9f7acd2b632fce1a60e5d4dca53840a212564f2c51f2ed15ad3796f1d005f7', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 6, + validatorIndex: '1208841', + performance: 0.9838212634822804, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x912b63602d7b45a4c61218b569b5514a9f835a04fe39acad56b79a268778e22821af17103f01d612f70117056589a852', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 7, + validatorIndex: '1208842', + performance: 0.9884437596302003, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9962daae1d4386f25e1c2834d5a6a75a11a616cedde1751c5137deca3d4f99dc3151b3e96fa7e9ff6407f705a7164654', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 8, + validatorIndex: '1208843', + performance: 0.9845916795069337, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x910b5d124c3e7b87c89339bc455f7aec7f5df6129a9597027cd2fa61d9fa92b2b310b0a9fa05365b8941258ded673907', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 9, + validatorIndex: '1208844', + performance: 0.9870888900696031, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ebd216c87a584b55531e6a2aa94067e1cc60b58aa6bee32356d901e1b73701b4df7cc5c67e824cf2fe0bf102bb3fd37', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 10, + validatorIndex: '1208845', + performance: 0.9869029275808937, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8343fd66edac0647585dbb476b32664c586e2cd27af432577ab62f7e6fb2163bb8d83eb7622d67d8e779dbbd7dd8e4d5', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 11, + validatorIndex: '1208846', + performance: 0.9876733436055471, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744786442886668n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7e276918d1a63ccf910e71c3b3c13a897e493703fd4a3691a2a7f870f4a283cba81fcff6b5893f3a7b9054fcc9276f1', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755942700099806n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 12, + validatorIndex: '1208847', + performance: 0.9868928296067849, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744212647476123n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x93fb914d0e4569281db8fb4a1dd5ade5f7e20e466c063e383cb7d925ba027328edec85a370c9c730e0579d3b99c51d75', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755360309729928n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 13, + validatorIndex: '1208848', + performance: 0.9845797995373938, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744212647476123n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa44c875cadb87eddb33f9c0be0ee0f854791fd6cde2f8e3f2660fb743108e208ef00e254f606a5fa04851d292cbfeb5e', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755360309729928n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 14, + validatorIndex: '1208849', + performance: 0.9856432616382633, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744212647476123n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x901da150ea14e7ce633ce96310acdcf65f9bc04450bd1a01dc1f605c67db1a56e87d3fcb3ddafc7393af295e28e675b2', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755360309729928n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 15, + validatorIndex: '1208850', + performance: 0.9863610985563501, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 744212647476123n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9542fac145d8d57c2e191a345099198c0e82e6aff76f43cf9bd770643a75d743fba146a2733a70a46a558fae70f49552', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 755360309729928n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 16, + validatorIndex: '1208851', + performance: 0.9849254247201765, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x899dee9bc3f7f61cf1c29e732a1ec3ab7e9fea4889331d8c738f72a839d5f18569a8c273c2f1a78cf5cb27f244d64cc3', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 17, + validatorIndex: '1208852', + performance: 0.9868928296067849, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7ccd697df7e8ffc3686512d43d12ff345ab8d868637696934122879e35a55c9c788d7fc1405ad2a2d992d58060c32d6', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 18, + validatorIndex: '1208853', + performance: 0.9876638396299152, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaeb35d864b393373b4d8f93e9f5dc5560e069f35318344cdf7126c5429c899593630fb53e22896d5e59166739d5090f8', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 19, + validatorIndex: '1208854', + performance: 0.9853508095605242, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3237f1b818b922422c4a4e622cadf64e66c35247c714eac975ac84db72a33687ae966277587401c55d0f548084e5e28', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 20, + validatorIndex: '1208855', + performance: 0.9845679012345679, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91833a85a3bae261d4ef2ea28a6c0cc6fa342c38ed50c3c3b9da810a085328732e658c22be0635480f78845f9d688d7c', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 21, + validatorIndex: '1208856', + performance: 0.9853395061728395, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa1e419c18c161ef094c82170b3e62d8331a6e5970a9530b7a69e6ca21b1bd59d95ca62c61d60cdc5d2beb5b1fa32de54', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 22, + validatorIndex: '1208857', + performance: 0.9868827160493827, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f79cee46b66bf3810e31dd048cc1ec643d05d9c26340e5f1e3e1a8e57ffe0ff203788f98a197ce46b13d221bd39018c', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 23, + validatorIndex: '1208858', + performance: 0.9861111111111112, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x83ebf76e5a085180c34690b0315056e2b01a5a557a12e52c2bb5a7b6618f384a7faab2b8b4fce701a998e2750b531b6e', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 24, + validatorIndex: '1208859', + performance: 0.9861111111111112, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5f0f009b98d21564e545bbeb25b61022b52982e6328c0794797cf470599013ef841073857b8886818a1511a1a6f5092', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 25, + validatorIndex: '1208860', + performance: 0.9868827160493827, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9b7630a464c0f74b25f8a8c95a43906fb6bbb4e05661ae171828d60e1aa337f17fc81257fdf7daeace2549fee10494e', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 26, + validatorIndex: '1208861', + performance: 0.9837962962962963, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa453ffd40f306d9ad57e7f65a96f5e9070f0579524d9175ccfc6e7f7bd4e5635772f41a86d47e8c71847730b7d08b97c', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 27, + validatorIndex: '1208862', + performance: 0.9885057471264367, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 434363125782132n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xab5ac2f98c2dfecfe344c2c7ef05ab7f99933d8c05afc13914ccd6f514ea78557b31f4faab62a13af0a92dde8cd6823a', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440869509996573n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 28, + validatorIndex: '1208863', + performance: 0.9884169884169884, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8bc280c0c93e5411907e10b072fb2ecedcd71fd14d87af7a361ad9d01c85846063e384eb8c5ace0a7374459d0698a6e5', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 29, + validatorIndex: '1208864', + performance: 0.9891891891891892, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb54adcc2fe57ef81d3a1d6417850ac1653a63c0cecc50515ea236e4a269bb585dc497aa36aef8f144a5edde7a040f019', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 30, + validatorIndex: '1208865', + performance: 0.9876447876447877, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9456f57d3066290e9f72502ff862d510a945f810d8fee8e7a1cad435e08f8a848eed1eac093bb5bedf6aeec7a89ede0', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 31, + validatorIndex: '1208866', + performance: 0.9861003861003861, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb87371c94cc6e034b4ad807fe51dbfa057bdeb94a08df5f7cd36f8aa19e1c771b56319e18aa06f0540cef65f1a9d553b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 32, + validatorIndex: '1208867', + performance: 0.9861003861003861, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8269b2a2a236a33a8c9434c3ff9e463f0fc64b750cfeeaa3b2b891b5dfb3a3dca22d9bd1877ce3abc3e09a4affd5e9c5', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 33, + validatorIndex: '1208868', + performance: 0.9853281853281852, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x90243dcacd6af03bf0f73d969f3db38368af68cbd13e95edda97af3e2409412a5757c0c8e6c8860b0c8fb32cc2e83382', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 34, + validatorIndex: '1208869', + performance: 0.9876447876447877, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87c2097c5b6eca870d003098989b70ee4187a44c4be4945bc7ca05848f72ab23c3c73e28c6a6d6d64e70c551acfb5cb1', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 35, + validatorIndex: '1208870', + performance: 0.9868725868725868, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433789330371587n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85f6aee1e89b148c995b81dc3eb3bb5c29cc403874d783f1ae46e0c09cb70d29a5879b472fe02d21e7164285f1fd4d3a', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 440287119626696n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 36, + validatorIndex: '1208871', + performance: 0.9876352395672334, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaaae01c4af488638635329f50af355045754e6c0b50b9ae9c8cde1396629a7f19d5e1a2883cd7df56b006612b30fe07b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 37, + validatorIndex: '1208872', + performance: 0.9853168469860897, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x896e49d476399977670ae9e65e330f0da78aab8d496d3b91ec01ed9ace196989e260ef10e9da76d268356acd957185fc', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 38, + validatorIndex: '1208873', + performance: 0.9868624420401854, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb70b9d747f226fc2a74e3da9fcf3ee240edb1d926b7d00dbe4b87442391a74b8e85a4653dd44fc6fdfb0f7a187d9ec52', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 39, + validatorIndex: '1208874', + performance: 0.9876352395672334, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa5f3038042f8a957b71dcdc3c6870a0635523fdbd9634d5c72d30cc9cefebae3f95e96056cc450e5dd569bd474e40d41', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 40, + validatorIndex: '1208875', + performance: 0.9868624420401854, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x85084c60e15ffae0fd5eb9b8635857153fae89ff8e122a288e04c33916e45737db53f3d86d5f4b85b1705685691ab04e', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 41, + validatorIndex: '1208876', + performance: 0.9876352395672334, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb88bb8704f830ed44bf210696f2e97025c6f2c80514c0e1c18313e5737646fa5fe33b94efb58831de1de250c5df1b6ee', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 42, + validatorIndex: '1208877', + performance: 0.982225656877898, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb81aec2fb71f79bd705c195be85132122ffdf39bccf791652159c4fe58c6651fa0f26d2a65602fb24ef43da32f65505d', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 43, + validatorIndex: '1208878', + performance: 0.9868624420401854, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x92f78443f4e2bdb161389be093e8c1056d24b2957ab7ad33fe800ab26b8db9b21b9051a481c7a9ff0c912f960fe6934b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 44, + validatorIndex: '1208879', + performance: 0.9860788863109049, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb5ccffcd15fdd75a098922d37155c7426ae85f35d9c2f1a52fc5fd7b1b2b5746084bdae3c753363a0941d1708e2a7a6b', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 45, + validatorIndex: '1208880', + performance: 0.9877590207216577, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8e825d2fcf9db0a1fefa218ab9de1de9ad5af39be4e99dd80e82e0548937b75690e5cf7293f1023204937252dcfebcfd', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 46, + validatorIndex: '1208881', + performance: 0.9860788863109049, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8831ad5099146979f4fcd95173b48f806f1914456490e838699c3baf21d5ed7c194a84b279b3fd28c23d62535aca50b9', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 47, + validatorIndex: '1208882', + performance: 0.9853054911059551, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb95a8f51b29a2ddf163c763ccaaa1b95f06b674cd0d2fcdf04a7b2b30d12f393a0571238fa04c3b2d69e36c8355a880f', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 48, + validatorIndex: '1208883', + performance: 0.9868522815158545, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb1cf388ca03cb6086e32337466286d4b89da1987277112a3f9e62010d81f65d2fb972b023984e77e5a495b63ea4c7e2d', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 1057022n, + refSlot: 1136799n, + frame: [33950, 35524], + indexInReport: 49, + validatorIndex: '1208884', + performance: 0.9860788863109049, + threshold: 0.8683770272131761, + slashed: false, + receivedShares: 433215534961043n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x840d25d63fc2d5e66db1e55b63b38ed1736b5642fba94ad600dc04365365deb4ca46d2a2a73fad73980dfc8b7683cafd', + startTimestamp: 1755250200, + endTimestamp: 1755854616, + receivedRewards: 439704729256820n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.9939879759519038, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.996993987975952, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.996993987975952, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.9959879638916749, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.9949899799599199, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.996993987975952, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.996993987975952, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.9939879759519038, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 745953198047151n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 757126932244194n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.9979939819458375, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.995983935742972, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.9969909729187563, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.995983935742972, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.9969909729187563, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9979939819458375, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.9969879518072289, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.9979939819458375, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.9969879518072289, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.9959879638916749, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.9959879638916749, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.998995983935743, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.9979899497487437, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.9991246555357433, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.998995983935743, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.998995983935743, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.998995983935743, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 744673689988752n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 755828258260928n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.9979899497487437, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.9979899497487437, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9939698492462311, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.9959758551307846, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9989939637826962, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.9929577464788731, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.9959758551307846, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.9949748743718593, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.9949698189134809, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.9949698189134809, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.9964986221429729, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 743394181930352n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 754529584277662n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.9989939637826962, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.9969818913480886, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 964733n, + refSlot: 1035999n, + frame: [30800, 32374], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.996491570022415, + threshold: 0.861580548499018, + slashed: false, + receivedShares: 742114673871952n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1754040600, + endTimestamp: 1754645016, + receivedRewards: 753230910294396n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.5853968253968254, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.5815873015873015, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.5834920634920635, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.586031746031746, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.6383410138248848, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.5828571428571429, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.5866666666666667, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.5828571428571429, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.5841269841269842, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.586031746031746, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.5822222222222222, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.5866666666666667, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.5873015873015873, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.5098617511520737, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.5841269841269842, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.5866666666666667, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.5866666666666667, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.587936507936508, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.5847619047619048, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.5828571428571429, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.5847619047619048, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.5815873015873015, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.5841269841269842, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.5873015873015873, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.5828571428571429, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.5828571428571429, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.5841269841269842, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.5796825396825397, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.5873015873015873, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.5873015873015873, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.64, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.5834920634920635, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.587936507936508, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.5866666666666667, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.5828571428571429, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.5853968253968254, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.5873015873015873, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.5841269841269842, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.5841269841269842, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 919718n, + refSlot: 985599n, + frame: [29225, 30799], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.5866666666666667, + threshold: 0.8595734901882666, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1753435800, + endTimestamp: 1754040216, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.7428571428571429, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.7479365079365079, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.7498412698412699, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.7333333333333333, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.753015873015873, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.7619047619047619, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.7346031746031746, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.7473015873015874, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.7453968253968254, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.7485714285714286, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.7631746031746032, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.7523809523809524, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.7441269841269841, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.758095238095238, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.7123809523809522, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.7396825396825397, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.7568253968253968, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.7593650793650794, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.7447619047619047, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.7352380952380952, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.7409523809523809, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.7326984126984127, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.7396825396825397, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.7434920634920635, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.6442396313364055, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.7492063492063492, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.7447619047619047, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.7485714285714286, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.753015873015873, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.7587301587301587, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.7390476190476191, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.7542857142857143, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.7409523809523809, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.7358730158730159, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.7561904761904762, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.7447619047619047, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.7396825396825397, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.7415873015873016, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.7326984126984127, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 874957n, + refSlot: 935199n, + frame: [27650, 29224], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.7536507936507937, + threshold: 0.9004204082047349, + slashed: false, + receivedShares: 0n, + rewardShare: 0.5834, + fee: 350n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1752831000, + endTimestamp: 1753435416, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.7663492063492063, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.7860317460317461, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.7695238095238095, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.7784126984126984, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.7847619047619048, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.7942857142857143, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.7707936507936508, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.7746031746031746, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.7777777777777778, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.7847619047619048, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.7942857142857143, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.7771428571428571, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.7930158730158731, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.7841269841269841, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.7682539682539683, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.7828571428571428, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.7923809523809524, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.7930158730158731, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.7873015873015873, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.8063492063492064, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.7879365079365079, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.7828571428571428, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.7955555555555556, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.7815873015873016, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.7847619047619048, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.7898412698412698, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.7707936507936508, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.7853968253968254, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.7930158730158731, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.7631746031746032, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.7790476190476191, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.7911111111111111, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.7688888888888888, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.7695238095238095, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.7993650793650794, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.7701587301587302, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.8031746031746032, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.7568253968253968, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.780952380952381, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 828055n, + refSlot: 884799n, + frame: [26075, 27649], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.7720634920634921, + slashed: false, + threshold: 0.8750877807223604, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1752226200, + endTimestamp: 1752830616, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.8482539682539683, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.8634920634920635, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.8546031746031746, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.8711111111111111, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.8450793650793651, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.8552380952380952, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.8565079365079366, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.8596825396825397, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.8647619047619047, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.8419047619047619, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.8482539682539683, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.8641269841269841, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.8565079365079366, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.8634920634920635, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.846984126984127, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.8546031746031746, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.8419047619047619, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.8552380952380952, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.8571428571428571, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.8641269841269841, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.8571428571428571, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.846984126984127, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.8476190476190476, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.8501587301587301, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.8641269841269841, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.866031746031746, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.8590476190476191, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.8501587301587301, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.8514285714285714, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.8482539682539683, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.8615873015873016, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.8539682539682539, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.8584126984126984, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.8596825396825397, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.8514285714285714, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.8615873015873016, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.8615873015873016, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 781669n, + refSlot: 834399n, + frame: [24500, 26074], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.889175728680915, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1751621400, + endTimestamp: 1752225816, + receivedRewards: 0n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.9574603174603175, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.9587301587301588, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.9492063492063492, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.9542857142857143, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.9517460317460318, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.9511111111111111, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.9523809523809523, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.953015873015873, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.9574603174603175, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.9447619047619048, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.9580952380952381, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.9517460317460318, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.9542857142857143, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9555555555555556, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.9434920634920635, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.9504761904761905, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.953015873015873, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.9542857142857143, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.9536507936507936, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.9523809523809523, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.9473015873015873, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.9453968253968253, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.9625396825396826, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.9568253968253968, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.9561904761904761, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.947936507936508, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.9561904761904761, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.9542857142857143, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9504761904761905, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.9377777777777778, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9574603174603175, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.9593650793650793, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.9631746031746031, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.953015873015873, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.9511111111111111, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.9466666666666667, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.9511111111111111, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.9587301587301588, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.9498412698412698, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 734459n, + refSlot: 783999n, + frame: [22925, 24499], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.9492063492063492, + slashed: false, + threshold: 0.896760201235149, + receivedShares: 2462530754806021n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1751016600, + endTimestamp: 1751621016, + receivedRewards: 2499417337205936n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.9733333333333334, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.9777777777777777, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.9682539682539683, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.9771428571428571, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.9733333333333334, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.9720634920634921, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.9644444444444444, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.9650793650793651, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.9720634920634921, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.9676190476190476, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.9758730158730159, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.9765079365079365, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.96, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9644444444444444, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.9688888888888889, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.9695238095238096, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.9726984126984127, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.9726984126984127, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.966984126984127, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.9701587301587301, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.9714285714285714, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.9771428571428571, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.9707936507936508, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.9650793650793651, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.9746031746031746, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.979047619047619, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.9726984126984127, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.9701587301587301, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9733333333333334, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.9676190476190476, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9695238095238096, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.9803174603174604, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.9676190476190476, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.9650793650793651, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.9714285714285714, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.9758730158730159, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.9631746031746031, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.9733333333333334, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.966984126984127, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 687265n, + refSlot: 733599n, + frame: [21350, 22924], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.9752380952380952, + slashed: false, + threshold: 0.8846745835037102, + receivedShares: 2697135663094124n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1750411800, + endTimestamp: 1751016216, + receivedRewards: 2737536424256722n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 640719n, + refSlot: 683199n, + frame: [19775, 21349], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.879074545557767, + receivedShares: 2782938543355590n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749807000, + endTimestamp: 1750411416, + receivedRewards: 2824624557507105n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.9822222222222222, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.9822222222222222, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.9822222222222222, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.9822222222222222, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.9822222222222222, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.9866666666666667, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 594012n, + refSlot: 632799n, + frame: [19550, 19774], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.9822222222222222, + slashed: false, + threshold: 0.8875317067211371, + receivedShares: 133926289392718n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749720600, + endTimestamp: 1749806616, + receivedRewards: 135932389458497n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 587262n, + refSlot: 625599n, + frame: [19325, 19549], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8901933161325853, + receivedShares: 149860683245736n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749634200, + endTimestamp: 1749720216, + receivedRewards: 152105466759713n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 580522n, + refSlot: 618399n, + frame: [19100, 19324], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8905730512140176, + receivedShares: 153966144311356n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749547800, + endTimestamp: 1749633816, + receivedRewards: 156272424083843n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 573755n, + refSlot: 611199n, + frame: [18875, 19099], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8767184543255041, + receivedShares: 136045336398940n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749461400, + endTimestamp: 1749547416, + receivedRewards: 138083177957430n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 567067n, + refSlot: 603999n, + frame: [18650, 18874], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8916643257003238, + receivedShares: 125308990763680n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749375000, + endTimestamp: 1749461016, + receivedRewards: 127186011143723n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 560336n, + refSlot: 596799n, + frame: [18425, 18649], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.891682081156182, + receivedShares: 117038158572418n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749288600, + endTimestamp: 1749374616, + receivedRewards: 118791289034520n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 553584n, + refSlot: 589599n, + frame: [18200, 18424], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8665184439964809, + receivedShares: 107707743890546n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749202200, + endTimestamp: 1749288216, + receivedRewards: 109321112804771n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 546967n, + refSlot: 582399n, + frame: [17975, 18199], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8930991708346596, + receivedShares: 412526672641962n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749115800, + endTimestamp: 1749201816, + receivedRewards: 418705965661093n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 540206n, + refSlot: 575199n, + frame: [17750, 17974], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8932230720005178, + receivedShares: 409604258448911n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1749029400, + endTimestamp: 1749115416, + receivedRewards: 415739776229204n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 533421n, + refSlot: 567999n, + frame: [17525, 17749], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8930527038711789, + receivedShares: 414590262635028n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748943000, + endTimestamp: 1749029016, + receivedRewards: 420800466448744n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 526606n, + refSlot: 560799n, + frame: [17300, 17524], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8883777228638527, + receivedShares: 409037215106440n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748856600, + endTimestamp: 1748942616, + receivedRewards: 415164239067545n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 519814n, + refSlot: 553599n, + frame: [17075, 17299], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.879933011417823, + receivedShares: 413363395664534n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748770200, + endTimestamp: 1748856216, + receivedRewards: 419555222071384n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 513094n, + refSlot: 546399n, + frame: [16850, 17074], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8794910021408028, + receivedShares: 418728405475535n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748683800, + endTimestamp: 1748769816, + receivedRewards: 425000595092502n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.8622222222222222, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.8577777777777778, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 506368n, + refSlot: 539199n, + frame: [16625, 16849], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.8533333333333334, + slashed: false, + threshold: 0.878442417250298, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748597400, + endTimestamp: 1748683416, + receivedRewards: 0n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 499629n, + refSlot: 531999n, + frame: [16400, 16624], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8509259349474171, + receivedShares: 126188362422922n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748511000, + endTimestamp: 1748597016, + receivedRewards: 128078555030400n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 493136n, + refSlot: 524799n, + frame: [16175, 16399], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8491236161872734, + receivedShares: 130018002511091n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748424600, + endTimestamp: 1748510616, + receivedRewards: 131965559817223n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 486630n, + refSlot: 517599n, + frame: [15950, 16174], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8743899804766133, + receivedShares: 135914215915462n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748338200, + endTimestamp: 1748424216, + receivedRewards: 137950093402433n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 479928n, + refSlot: 510399n, + frame: [15725, 15949], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8788101027226957, + receivedShares: 131430887734509n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748251800, + endTimestamp: 1748337816, + receivedRewards: 133399608840164n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 473227n, + refSlot: 503199n, + frame: [15500, 15724], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8949525516117758, + receivedShares: 132637618020565n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748165400, + endTimestamp: 1748251416, + receivedRewards: 134624414902957n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 466412n, + refSlot: 495999n, + frame: [15275, 15499], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8938482738722414, + receivedShares: 136836419756441n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1748079000, + endTimestamp: 1748165016, + receivedRewards: 138886111059911n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 459566n, + refSlot: 488799n, + frame: [15050, 15274], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8967540580074835, + receivedShares: 135843207500620n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747992600, + endTimestamp: 1748078616, + receivedRewards: 137878021342908n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 452801n, + refSlot: 481599n, + frame: [14825, 15049], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8940330663580174, + receivedShares: 152268357979869n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747906200, + endTimestamp: 1747992216, + receivedRewards: 154549206380467n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 445964n, + refSlot: 474399n, + frame: [14600, 14824], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8926933368168322, + receivedShares: 210964742258317n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747819800, + endTimestamp: 1747905816, + receivedRewards: 214124811765510n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 439189n, + refSlot: 467199n, + frame: [14375, 14599], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9023006521611854, + receivedShares: 150058361179756n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747733400, + endTimestamp: 1747819416, + receivedRewards: 152306105738336n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 432288n, + refSlot: 459999n, + frame: [14150, 14374], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9146404668659412, + receivedShares: 151023450423416n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747647000, + endTimestamp: 1747733016, + receivedRewards: 153285651184763n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 425360n, + refSlot: 452799n, + frame: [13925, 14149], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9156643992865872, + receivedShares: 188583027899932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747560600, + endTimestamp: 1747646616, + receivedRewards: 191407838670023n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 418381n, + refSlot: 445599n, + frame: [13700, 13924], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9173697806691302, + receivedShares: 140129435915516n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747474200, + endTimestamp: 1747560216, + receivedRewards: 142228453754973n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 411414n, + refSlot: 438399n, + frame: [13475, 13699], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9173451933093008, + receivedShares: 153985088123233n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747387800, + endTimestamp: 1747473816, + receivedRewards: 156291651657649n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 404444n, + refSlot: 431199n, + frame: [13250, 13474], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9097196832883401, + receivedShares: 145179558933314n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747301400, + endTimestamp: 1747387416, + receivedRewards: 147354223250876n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 397469n, + refSlot: 423999n, + frame: [13025, 13249], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8934010568180702, + receivedShares: 146448926513118n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747215000, + endTimestamp: 1747301016, + receivedRewards: 148642604859941n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 390487n, + refSlot: 416799n, + frame: [12800, 13024], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8615889559943731, + receivedShares: 136773701486765n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747128600, + endTimestamp: 1747214616, + receivedRewards: 138822453324762n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 383696n, + refSlot: 409599n, + frame: [12575, 12799], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.909569852295627, + receivedShares: 139550047813824n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1747042200, + endTimestamp: 1747128216, + receivedRewards: 141640386920269n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 376757n, + refSlot: 402399n, + frame: [12350, 12574], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9147859774239707, + receivedShares: 143011314604254n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746955800, + endTimestamp: 1747041816, + receivedRewards: 145153500495729n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 369822n, + refSlot: 395199n, + frame: [12125, 12349], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9124693549394833, + receivedShares: 138921759677306n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746869400, + endTimestamp: 1746955416, + receivedRewards: 141002687570481n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 362906n, + refSlot: 387999n, + frame: [11900, 12124], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.913451488893102, + receivedShares: 150919798716015n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746783000, + endTimestamp: 1746869016, + receivedRewards: 153180446864368n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 356001n, + refSlot: 380799n, + frame: [11675, 11899], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.916013507519767, + receivedShares: 147846424094951n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746696600, + endTimestamp: 1746782616, + receivedRewards: 150061035747726n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 349075n, + refSlot: 373599n, + frame: [11450, 11674], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9282213142017781, + receivedShares: 150918095042932n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746610200, + endTimestamp: 1746696216, + receivedRewards: 153178717671735n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9991111111111111, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 342041n, + refSlot: 366399n, + frame: [10325, 11449], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9108406249034635, + receivedShares: 686671786002361n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746178200, + endTimestamp: 1746609816, + receivedRewards: 696957535882495n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 307905n, + refSlot: 330399n, + frame: [10100, 10324], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8810667077897141, + receivedShares: 134082339556826n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746091800, + endTimestamp: 1746177816, + receivedRewards: 136090777119192n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 301266n, + refSlot: 323199n, + frame: [9875, 10099], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9216368904907527, + receivedShares: 435383673249763n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1746005400, + endTimestamp: 1746091416, + receivedRewards: 441905344383234n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 294369n, + refSlot: 315999n, + frame: [9650, 9874], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9355835293539311, + receivedShares: 150675595068685n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745919000, + endTimestamp: 1746005016, + receivedRewards: 152932585257461n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 3, + validatorIndex: '1062301', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 4, + validatorIndex: '1062302', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 8, + validatorIndex: '1062306', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 11, + validatorIndex: '1062309', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 17, + validatorIndex: '1062315', + performance: 0.5377777777777778, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 18, + validatorIndex: '1062316', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.5377777777777778, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.5377777777777778, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 36, + validatorIndex: '1062772', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 38, + validatorIndex: '1062774', + performance: 0.5466666666666666, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 287382n, + refSlot: 308799n, + frame: [9425, 9649], + indexInReport: 39, + validatorIndex: '1062775', + performance: 0.5422222222222223, + slashed: false, + threshold: 0.9267488802215939, + receivedShares: 0n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745832600, + endTimestamp: 1745918616, + receivedRewards: 0n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 0, + validatorIndex: '1062298', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 25, + validatorIndex: '1062323', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 27, + validatorIndex: '1062325', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 280437n, + refSlot: 301599n, + frame: [9200, 9424], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9096036133950539, + receivedShares: 132294468261822n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745746200, + endTimestamp: 1745832216, + receivedRewards: 134276125057404n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 24, + validatorIndex: '1062322', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 32, + validatorIndex: '1062768', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 273636n, + refSlot: 294399n, + frame: [8975, 9199], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9079475582843584, + receivedShares: 215145123566758n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745659800, + endTimestamp: 1745745816, + receivedRewards: 218367811572947n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 266871n, + refSlot: 287199n, + frame: [8750, 8974], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9147153970331007, + receivedShares: 161335072933603n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745573400, + endTimestamp: 1745659416, + receivedRewards: 163751732888061n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 260020n, + refSlot: 279999n, + frame: [8525, 8749], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9177574075447873, + receivedShares: 159335616377482n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745487000, + endTimestamp: 1745573016, + receivedRewards: 161722326200812n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 253151n, + refSlot: 272799n, + frame: [8300, 8524], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9050955136673701, + receivedShares: 154662344060746n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745400600, + endTimestamp: 1745486616, + receivedRewards: 156979052303770n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 246318n, + refSlot: 265599n, + frame: [8075, 8299], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9284329787823383, + receivedShares: 153124780085012n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745314200, + endTimestamp: 1745400216, + receivedRewards: 155418456948560n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 239378n, + refSlot: 258399n, + frame: [7850, 8074], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9329752884653509, + receivedShares: 138916480212291n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745227800, + endTimestamp: 1745313816, + receivedRewards: 140997329023643n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 232392n, + refSlot: 251199n, + frame: [7625, 7849], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9413300626756951, + receivedShares: 145296523158163n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745141400, + endTimestamp: 1745227416, + receivedRewards: 147472939498724n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 225341n, + refSlot: 243999n, + frame: [7400, 7624], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9457798185225983, + receivedShares: 156063013848372n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1745055000, + endTimestamp: 1745141016, + receivedRewards: 158400702914249n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 218249n, + refSlot: 236799n, + frame: [7175, 7399], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9437046130054199, + receivedShares: 151937455425790n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1744968600, + endTimestamp: 1745054616, + receivedRewards: 154213347192119n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 211199n, + refSlot: 229599n, + frame: [6950, 7174], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9395515385071712, + receivedShares: 146146107906600n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1744882200, + endTimestamp: 1744968216, + receivedRewards: 148335250292416n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 204188n, + refSlot: 222399n, + frame: [6050, 6949], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9158246402368915, + receivedShares: 619459500789606n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1744536600, + endTimestamp: 1744881816, + receivedRewards: 628738468727241n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.9977777777777778, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.9977777777777778, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 35, + validatorIndex: '1062771', + performance: 0.9977777777777778, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 176739n, + refSlot: 193599n, + frame: [5600, 6049], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9141372599324479, + receivedShares: 467201816799821n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1744363800, + endTimestamp: 1744536216, + receivedRewards: 474200096224003n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 1, + validatorIndex: '1062299', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 6, + validatorIndex: '1062304', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 7, + validatorIndex: '1062305', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 9, + validatorIndex: '1062307', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 10, + validatorIndex: '1062308', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 12, + validatorIndex: '1062310', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 15, + validatorIndex: '1062313', + performance: 0.9990123456790123, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 20, + validatorIndex: '1062318', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 21, + validatorIndex: '1062319', + performance: 0.9990123456790123, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 22, + validatorIndex: '1062320', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 23, + validatorIndex: '1062321', + performance: 0.9990123456790123, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 26, + validatorIndex: '1062324', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9990123456790123, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 31, + validatorIndex: '1062767', + performance: 0.9980246913580247, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 33, + validatorIndex: '1062769', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 37, + validatorIndex: '1062773', + performance: 0.9995061728395062, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 163063n, + refSlot: 179199n, + frame: [3575, 5599], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.88051577486505, + receivedShares: 2626719111952182n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743586200, + endTimestamp: 1744363416, + receivedRewards: 2666065094038033n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 104721n, + refSlot: 114399n, + frame: [3350, 3574], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8647037450222799, + receivedShares: 413651787990531n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743499800, + endTimestamp: 1743585816, + receivedRewards: 419847934265173n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 5, + validatorIndex: '1062303', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 30, + validatorIndex: '1062766', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 98220n, + refSlot: 107199n, + frame: [3125, 3349], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8657789559105445, + receivedShares: 433585241114584n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743413400, + endTimestamp: 1743499416, + receivedRewards: 440079973289013n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 14, + validatorIndex: '1062312', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 19, + validatorIndex: '1062317', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 91698n, + refSlot: 99999n, + frame: [2900, 3124], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8182254435174211, + receivedShares: 422215975869459n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743327000, + endTimestamp: 1743413016, + receivedRewards: 428540406276703n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 2, + validatorIndex: '1062300', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 13, + validatorIndex: '1062311', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 16, + validatorIndex: '1062314', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 29, + validatorIndex: '1062765', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 34, + validatorIndex: '1062770', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 85353n, + refSlot: 92799n, + frame: [2675, 2899], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8176981721262923, + receivedShares: 377516626019384n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743240600, + endTimestamp: 1743326616, + receivedRewards: 383171498798464n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 28, + validatorIndex: '1062764', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 79092n, + refSlot: 85599n, + frame: [2450, 2674], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8804917347901333, + receivedShares: 384000142578860n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743154200, + endTimestamp: 1743240216, + receivedRewards: 389752132832451n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 0, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 1, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 2, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 3, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 4, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 5, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 6, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 7, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 8, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 9, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 10, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 11, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 12, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 13, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 14, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 15, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 16, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 17, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 18, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 19, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 20, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 21, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 22, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 23, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 24, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 25, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 26, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 27, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 28, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 29, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 30, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 31, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 32, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 33, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 34, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 35, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 36, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 37, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 38, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 72465n, + refSlot: 78399n, + frame: [2225, 2449], + indexInReport: 39, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8726372417309936, + receivedShares: 1002168957696437n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1743067800, + endTimestamp: 1743153816, + receivedRewards: 1017180582531806n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 0, + validatorIndex: '1062293', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 1, + validatorIndex: '1062294', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 2, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 3, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 4, + validatorIndex: '1062297', + performance: 0.9952380952380953, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 5, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 6, + validatorIndex: '1062299', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 7, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 8, + validatorIndex: '1062301', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 9, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 10, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 11, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 12, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 13, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 14, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 15, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 16, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 17, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 18, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 19, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 20, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 21, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 22, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 23, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 24, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 25, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 26, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 27, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 28, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 29, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 30, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 31, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 32, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 33, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 34, + validatorIndex: '1062765', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 35, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 36, + validatorIndex: '1062767', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 37, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 38, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 39, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 40, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 41, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 42, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 43, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 65855n, + refSlot: 71199n, + frame: [2000, 2224], + indexInReport: 44, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9121596662423873, + receivedShares: 281231377990979n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742981400, + endTimestamp: 1743067416, + receivedRewards: 285443980971656n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 0, + validatorIndex: '1062293', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 1, + validatorIndex: '1062294', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 2, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 3, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 4, + validatorIndex: '1062297', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 5, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 6, + validatorIndex: '1062299', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 7, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 8, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 9, + validatorIndex: '1062302', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 10, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 11, + validatorIndex: '1062304', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 12, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 13, + validatorIndex: '1062306', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 14, + validatorIndex: '1062307', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 15, + validatorIndex: '1062308', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 16, + validatorIndex: '1062309', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 17, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 18, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 19, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 20, + validatorIndex: '1062313', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 21, + validatorIndex: '1062314', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 22, + validatorIndex: '1062315', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 23, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 24, + validatorIndex: '1062317', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 25, + validatorIndex: '1062318', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 26, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 27, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 28, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 29, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 30, + validatorIndex: '1062323', + performance: 0.9911111111111112, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 31, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 32, + validatorIndex: '1062325', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 33, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 34, + validatorIndex: '1062765', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 35, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 36, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 37, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 38, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 39, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 40, + validatorIndex: '1062771', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 41, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 42, + validatorIndex: '1062773', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 43, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 58916n, + refSlot: 63999n, + frame: [1775, 1999], + indexInReport: 44, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8921619563206921, + receivedShares: 243744710170097n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742895000, + endTimestamp: 1742981016, + receivedRewards: 247395795265657n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 0, + validatorIndex: '1062293', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 1, + validatorIndex: '1062294', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 2, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 3, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 4, + validatorIndex: '1062297', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 5, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 6, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 7, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 8, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 9, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 10, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 11, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 12, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 13, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 14, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 15, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 16, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 17, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 18, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 19, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 20, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 21, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 22, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 23, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 24, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 25, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 26, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 27, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 28, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 29, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 30, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 31, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 32, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 33, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 34, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 35, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 36, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 37, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 38, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 39, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 40, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 41, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 42, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 43, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 52183n, + refSlot: 56799n, + frame: [1550, 1774], + indexInReport: 44, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8278093667823463, + receivedShares: 114087624957861n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742808600, + endTimestamp: 1742894616, + receivedRewards: 115796558976494n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 0, + validatorIndex: '1062293', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 1, + validatorIndex: '1062294', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 2, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 3, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 4, + validatorIndex: '1062297', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 5, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 6, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 7, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 8, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 9, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 10, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 11, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 12, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 13, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 14, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 15, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 16, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 17, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 18, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 19, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 20, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 21, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 22, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 23, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 24, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 25, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 26, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 27, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 28, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 29, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 30, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 31, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 32, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 33, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 34, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 35, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 36, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 37, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 38, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 39, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 40, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 41, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 42, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 43, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 45916n, + refSlot: 49599n, + frame: [1325, 1549], + indexInReport: 44, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9128529392040997, + receivedShares: 113619984591029n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742722200, + endTimestamp: 1742808216, + receivedRewards: 115321913761137n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 0, + validatorIndex: '1062293', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 1, + validatorIndex: '1062294', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 2, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 3, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 4, + validatorIndex: '1062297', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 5, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 6, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 7, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 8, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 9, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 10, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 11, + validatorIndex: '1062304', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 12, + validatorIndex: '1062305', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 13, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 14, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 15, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 16, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 17, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 18, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 19, + validatorIndex: '1062312', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 20, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 21, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 22, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 23, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 24, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 25, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 26, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 27, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 28, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 29, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 30, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 31, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 32, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 33, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 34, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 35, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 36, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 37, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 38, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 39, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 40, + validatorIndex: '1062771', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 41, + validatorIndex: '1062772', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 42, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 43, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 39008n, + refSlot: 42399n, + frame: [1100, 1324], + indexInReport: 44, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.9160215424655266, + receivedShares: 76889885807893n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742635800, + endTimestamp: 1742721816, + receivedRewards: 78041629843185n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 0, + validatorIndex: '1062293', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 1, + validatorIndex: '1062294', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 2, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 3, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 4, + validatorIndex: '1062297', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 5, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 6, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 7, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 8, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 9, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 10, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 11, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 12, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 13, + validatorIndex: '1062306', + performance: 0.9955555555555555, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 14, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 15, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 16, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 17, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 18, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 19, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 20, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 21, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 22, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 23, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 24, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 25, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 26, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 27, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 28, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 29, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 30, + validatorIndex: '1062323', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 31, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 32, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 33, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 34, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 35, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 36, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 37, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 38, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 39, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 40, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 41, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 42, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 43, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 32087n, + refSlot: 35199n, + frame: [875, 1099], + indexInReport: 44, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8988961100131287, + receivedShares: 68356588564998n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742549400, + endTimestamp: 1742635416, + receivedRewards: 69380511182719n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 0, + validatorIndex: '1062288', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa06926875bcd285e4d6cf2477ae78dc962303f4f4a70c374892f21ad7895cfc2f3986293cbf16d2b98f4b21050f6d6ab', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 1, + validatorIndex: '1062289', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb53e9b5cb95e32e9242f9ba37d8769eaaf6f67d97c9a2a17fd3f39b8b9f75564f178e7a0d392ee94521fa6330049512b', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 2, + validatorIndex: '1062290', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa10d59907e08e09f6bc3d241bedcc0565102ad3c391dd91bb6b4c8c7fbe922156060c14198520b9b20f16ff4783dc5dd', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 3, + validatorIndex: '1062291', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa22dcedbc60859f72e9f7d9211d67bc150ec9b06153ce342f87799b8fd29538c6e95f1c574c9fa2fb629843079ddc41', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 4, + validatorIndex: '1062292', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb2c1346b591bb88f0f3f1bd78ac24e4a28d0d3b4fa116611692da7b41361236b798014ffb911d983828bdcffdbc0cbaf', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 5, + validatorIndex: '1062293', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x90309db94ae68fdf982b84bc25714b5fa00eccbda2273d01ee819e0e339dffd416eb77980fe0b34381fe5b49e5782cd5', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 6, + validatorIndex: '1062294', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa764f56c3a9bf5c74be2f9c399228b85ce74bdaf01389341f2f5ec297f94609952e8f5d857eaa714b2509fbf426074bd', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 7, + validatorIndex: '1062295', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa474aa9ebbc84e6c713bd68405be02ca717eec4996e6102c1a9a79ac8004db8538b5a10439430228079240ec74d8afee', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 8, + validatorIndex: '1062296', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x80c0a5bbdd588fe51b13b40c9a41cb6dd37143ecccf762e049324763f9fd148f26e77acaba96ce51d6220b9db49f2160', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 9, + validatorIndex: '1062297', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8c4ed9ee4ae698ba963384ab5b4f1834d854999522b3b041a10b2f66b7ae399f1615ab90f5a304c30dd035502dc5fd83', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 10, + validatorIndex: '1062298', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x816e44c8db28a716f1aec8e81eb50f8740b9e2812871e66ad971db61e3d35c8b1170b78b470a42453f2f135393bbc0bb', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 11, + validatorIndex: '1062299', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8b68d9b25f66a6fcfdf7f7c0b29d357c9714cd1af18f186c75e219e6dfed5ce491b5345e645c45716ff0b23031e1bc11', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 12, + validatorIndex: '1062300', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb22cd107f040c1a82e4e3fd83963798e08c49a002c566b2a4f3bb4ed69d3b8baa458339fa3d7b50c5716d51c6e414396', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 13, + validatorIndex: '1062301', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa2efaf6d0c34a8ecf1367ceebd3c265b1492120c17dd9bc0b8937edda68bfada3c6b1af42d29c1a26d56f5845eb42551', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 14, + validatorIndex: '1062302', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb9035494702ff161308857dd8a09724611d62b401e148adbac53ce82b9204682a92aeaf0b1529485abde4352ab1ac3a0', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 15, + validatorIndex: '1062303', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8738b092aa0b9990d0f401b390c6e01a9b9a9d55d51e435851e21b90a873ea1ac83e10d25644291df7a1ff0f62baf791', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 16, + validatorIndex: '1062304', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb8f74a31fc1cd3017f6fd38b36113a717119209ede645ee2ab5a025c3c69bf1c56b857ca907395f9972df3d4ea7c6845', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 17, + validatorIndex: '1062305', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95e394279543e6706321259e003a7a68cd33103f0c6854147e49d5ed7717f535abc53003cd9ff98a5790012655788b24', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 18, + validatorIndex: '1062306', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91f11fd5e0f9d6ec1a252cab5bf19f09121a66524d8f28773de0eb93f4c592f7ee146752217b7a6ab96d70115195f4c3', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 19, + validatorIndex: '1062307', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8ed60e4610dbc350eb91543f66e174cf64a6c8232762de7ac473a1effa6bd8089309aba7dc41a8c463af126ee34f6819', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 20, + validatorIndex: '1062308', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaad4773322e9ba50becd34117fee300bdda026bb28c0631508f5ae2299b79eb49070332ad9ea6b71d953f1e5a0662ecf', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 21, + validatorIndex: '1062309', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa6730611e8e28429dd03082bd390d4a6b412a520ef3a0e937eaa2b7ce29e8e45da5f96c502f684af2ca31632984004af', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 22, + validatorIndex: '1062310', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8f3e6876031aff1e6d0534e75d5bc37aab658536d00138fb2433419117019a9c9bab60a768411b8091d59d8df4b636f0', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 23, + validatorIndex: '1062311', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x8eaf96a332ba91e2dd57840b3078bb4865f854bc4c352d86b21e353f604d9767c02230bcc24ac00448c63430e42143de', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 24, + validatorIndex: '1062312', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xafab349fec3f4ca5931a834ca9e2bd9c0cca68febe94d38066969cf5a59be3094659a9644f6b0a4389f656c9c356828e', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 25, + validatorIndex: '1062313', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xae116ebfce4fc7d160c83a9db3eb4a85eabc66fb51c945be7c9d777a0674f8687411fe56aa4ff6d64274fb95618b4ad7', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 26, + validatorIndex: '1062314', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb173f80e8bdcb333ae8877f19b146b8623df114f0ba78f269f38094b1cd2417c7ff2c3dbde8fe9bfb6e913452316497f', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 27, + validatorIndex: '1062315', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb3068d96de398d1b7ec0be2aaf5e8669c059b0ba071ddbcb06e7d2d62f7e4d378cbd9357f16f6276410118fc36524031', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 28, + validatorIndex: '1062316', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb7ec271df38e3bda9357483f26d2f04dcc468e4986be39ce378725223d94ba032474eb340addada435d3aa75736d092a', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 29, + validatorIndex: '1062317', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x89624374831f8d80dbc1cea6499c3ea56c63811001d93ac70da283da7d35ed04ab1a64ab423c46e72e2855dd1dfaa98e', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 30, + validatorIndex: '1062318', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x812a5c628eab51bfb16a470bb2e3724496d7a8c66987e390ef82d5844e415114297c91d27919b7e7e3a947850a6afa45', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 31, + validatorIndex: '1062319', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xacc4ce9cb0bd8146bb8f2d05c810353b140106fa348613c73b17371c62d0f678a34ab0444b9819a7e815c969c7d3fac4', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 32, + validatorIndex: '1062320', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8ac6721cbfbd1fa99a5667fbd2c01c04e222f9b665e50e27719a62758b483f35d9172f0a23c85b2cd039c7c60fd8a05', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 33, + validatorIndex: '1062321', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x86512312bbaac904709b212dceb8857cb3d9ec3a1c6c18b5935e85cdb5f07cf75c2fb3b71372bf924ea3e7abebf2ac99', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 34, + validatorIndex: '1062322', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95a030dde245b814f253276dae716358c900fadc68c12a8b2303e82f5aebea22d27743c33c71c25cbffd2b535317583a', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 35, + validatorIndex: '1062323', + performance: 0.9975062344139651, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x87b5ca34e3ccabf9ceafed26a8d87328151439db2a8aacbc1d2c9b6259843360c14a6f4ad51792e5164c2aad332ef432', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 36, + validatorIndex: '1062324', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaffca34aed22bd79a02d867405bb122c1d501a1a612117a512e821049f0c0554fd5bb38e046653b338a2eb382475cb01', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 37, + validatorIndex: '1062325', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa8014aba231312a685a4ff322ea1a45e196ef4049d29f77649dcddcd68b862fa4131891fd55b8021786c04ebc9a9099c', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 38, + validatorIndex: '1062764', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa7e858c84f5d54ad41fb1f6f823b3813f5d1dc6ae8134abd4f322ae901c1f457301b11e746adaf6fe9eabeb65aec51ae', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 39, + validatorIndex: '1062765', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa4f2628f5363836a7cb4442e5e4909205754b9c7c25197c2248bd8a751fccd0b2500e56b97fcb57f2a8db1771d9a6164', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 40, + validatorIndex: '1062766', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x91e45339877dc96aac0efafe245085cb91fff976f1a3cc8963dd44f75d64753897ba50e757e16e18ac28b82ab0a6ef36', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 41, + validatorIndex: '1062767', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xaa84f2c0fa2ec769201de7f46909da50e4c8e77daff13d916c1af5d7e95ee1c1e88ff53d53e545e17ca5ddf75c293fb0', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 42, + validatorIndex: '1062768', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xb10179d58744507fed63646d7b8e60e5333251d590ce8ca3b647f95dbd33c319852e0bfe5bce8d526020365b4fde0f2e', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 43, + validatorIndex: '1062769', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84ddb10140e7fd7104ff30ba7c0708da86fb347111701aad48425768975c50a2793a691a5b46024e9286b4d66d0a69a0', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 44, + validatorIndex: '1062770', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x84549fd235c39cc45ced8d5a9c0482263db29bf9f624fec93e35081f5f0d52acc299fbf088118a5f211094f4e73fb211', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 45, + validatorIndex: '1062771', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xa50a81b60599b46cdf9653370d0f5d36dc1706730d5fef934c5ab210eba56eb67b831dffc1216d8fa65b1998e697949b', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 46, + validatorIndex: '1062772', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0xac1b7877f5c711fb9350c9cbddf66edfc4e4b6856f0fd2d9f43b59728a8069d82544c72e659f61c8328d5a70e7ec345c', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 47, + validatorIndex: '1062773', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x95f60bce8be3134d5aef93b15a07a7746e822dcacbb26e99be23810c41bcbca090e211d887eef2f67c8fb00b5bd93dc5', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 48, + validatorIndex: '1062774', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x945810ca58f020148e37511d85b93f99af3ffd01f70372bcb4c603aeb75945363e628eca68873a764042a5fc49da12d2', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, + { + blockNumber: 25299n, + refSlot: 27999n, + frame: [200, 874], + indexInReport: 49, + validatorIndex: '1062775', + performance: 1, + slashed: false, + threshold: 0.8632094438723824, + receivedShares: 144810577428744n, + rewardShare: 1, + fee: 600n, + pubkey: + '0x9084299ebfa9fe19d98ab6469735a5053d064537ca4c984910fe1a31847d094ccd4bbd7d0cd023c3b18915695996ef60', + startTimestamp: 1742290200, + endTimestamp: 1742549016, + receivedRewards: 146979714722270n, + }, +]; diff --git a/mock/rewards/mock-data.ts b/mock/rewards/mock-data.ts new file mode 100644 index 00000000..52689062 --- /dev/null +++ b/mock/rewards/mock-data.ts @@ -0,0 +1,12 @@ +import { OperatorRewardsHistory } from '@lidofinance/lido-csm-sdk'; + +export type MockScenarioData = { + nodeOperatorId: number; + rewardsHistory: OperatorRewardsHistory; +}; + +export const createMockRewardsHistory = ( + data: OperatorRewardsHistory, +): OperatorRewardsHistory => { + return data; +}; diff --git a/mock/rewards/mock-providers.tsx b/mock/rewards/mock-providers.tsx new file mode 100644 index 00000000..de7bbf40 --- /dev/null +++ b/mock/rewards/mock-providers.tsx @@ -0,0 +1,53 @@ +import { FC, PropsWithChildren } from 'react'; +import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; +import { createMockRewardsHistory, type MockScenarioData } from './mock-data'; +import { + NodeOperatorContext, + NodeOperatorContextValue, +} from 'modules/web3/operator-provider/node-operator-provider'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { KEY_OPERATOR_REWARDS_HISTORY } from 'modules/web3'; +import { hashKey } from 'utils'; + +export const MockRewardsHistoryProvider: FC< + PropsWithChildren<{ scenario: MockScenarioData }> +> = ({ children, scenario }) => { + const mockRewardsHistory = createMockRewardsHistory(scenario.rewardsHistory); + + // Create a unique QueryClient for this scenario to avoid cache conflicts + const queryClient = new QueryClient({ + defaultOptions: { + queries: { + queryKeyHashFn: hashKey, + retry: false, + ...STRATEGY_IMMUTABLE, + }, + }, + }); + + // Pre-populate the query cache with mock data + queryClient.setQueryData( + [ + ...KEY_OPERATOR_REWARDS_HISTORY, + { nodeOperatorId: BigInt(scenario.nodeOperatorId) }, + ], + mockRewardsHistory, + ); + + // Mock node operator context value + const mockNodeOperatorContextValue: NodeOperatorContextValue = { + isPending: false, + nodeOperator: { + id: BigInt(scenario.nodeOperatorId), + } as any, + switchNodeOperator: () => {}, + }; + + return ( + + + {children} + + + ); +}; diff --git a/mock/rewards/test-scenarios.ts b/mock/rewards/test-scenarios.ts new file mode 100644 index 00000000..fb3d5e5f --- /dev/null +++ b/mock/rewards/test-scenarios.ts @@ -0,0 +1,88 @@ +import { MockScenarioData } from './mock-data'; +import { data as _data } from './data'; +import { OperatorRewardsHistory } from '@lidofinance/lido-csm-sdk'; + +const data = _data as OperatorRewardsHistory; + +export type TestScenario = { + title: string; + description: string; + data: MockScenarioData; +}; + +export const testScenarios: TestScenario[] = [ + { + title: 'Full Dataset', + description: 'All rewards history data from mock', + data: { + nodeOperatorId: 1, + rewardsHistory: data, + }, + }, + { + title: 'Small Dataset (First 10)', + description: 'Limited view with first 10 reward records', + data: { + nodeOperatorId: 1, + rewardsHistory: data.slice(0, 10), + }, + }, + { + title: 'Medium Dataset (First 50)', + description: 'Medium-sized dataset with 50 reward records', + data: { + nodeOperatorId: 1, + rewardsHistory: data.slice(0, 50), + }, + }, + { + title: 'High Performance Only', + description: 'Only validators with performance >= 0.99', + data: { + nodeOperatorId: 1, + rewardsHistory: data.filter((record) => record.performance >= 0.99), + }, + }, + { + title: 'Below Threshold Performance', + description: 'Validators performing below threshold', + data: { + nodeOperatorId: 1, + rewardsHistory: data.filter( + (record) => record.performance < record.threshold, + ), + }, + }, + { + title: 'Single Validator', + description: 'Single validator view', + data: { + nodeOperatorId: 1, + rewardsHistory: data.slice(0, 1), + }, + }, + { + title: 'Empty State', + description: 'No rewards history - empty state', + data: { + nodeOperatorId: 1, + rewardsHistory: [], + }, + }, + { + title: 'Earliest Rewards (Last 20)', + description: 'Most earliest reward records', + data: { + nodeOperatorId: 1, + rewardsHistory: data.slice(-20), + }, + }, + { + title: 'Single Pubkey Filter', + description: 'All records for a single validator pubkey', + data: { + nodeOperatorId: 1, + rewardsHistory: data.filter((record) => record.pubkey === data[0].pubkey), + }, + }, +]; diff --git a/modules/web3/hooks/index.ts b/modules/web3/hooks/index.ts new file mode 100644 index 00000000..f7471cef --- /dev/null +++ b/modules/web3/hooks/index.ts @@ -0,0 +1,44 @@ +export * from './use-balance'; +export * from './use-bond-by-keys-count'; +export * from './use-bond-next-keys-count'; +export * from './use-csm-status'; +export * from './use-curve-parameters'; +export * from './use-dapp-status'; +export * from './use-default-curve-id'; +export * from './use-deposit-queue-batches'; +export * from './use-frame-info'; +export * from './use-has-priority-queue-spots'; +export * from './use-has-report-stealing-role'; +export * from './use-ics-curve-id'; +export * from './use-ics-paused'; +export * from './use-ics-proof'; +export * from './use-invites'; +export * from './use-is-contract'; +export * from './use-key-eject-fee'; +export * from './use-key-removal-fee'; +export * from './use-max-gas-price'; +export * from './use-operator-balance'; +export * from './use-operator-curve-id'; +export * from './use-operator-info'; +export * from './use-operator-is-owner'; +export * from './use-operator-keys-to-migrate'; +export * from './use-operator-keys-with-issues'; +export * from './use-operator-keys-with-status'; +export * from './use-operator-keys-with-strikes'; +export * from './use-operator-keys-with-wrong-fee-recipient'; +export * from './use-operator-last-rewards'; +export * from './use-operator-owner'; +export * from './use-operator-reward'; +export * from './use-operator-rewards-history'; +export * from './use-operator-type'; +export * from './use-operators-count'; +export * from './use-operators-with-locked-bond'; +export * from './use-other-module'; +export * from './use-rewards-last-report-tx-hash'; +export * from './use-share-limit-percentage'; +export * from './use-share-limit-status'; +export * from './use-share-limit'; +export * from './use-stETH-by-wstETH'; +export * from './use-stake-limit'; +export * from './use-tx-confirmation'; +export * from './use-wstETH-by-stETH'; diff --git a/modules/web3/hooks/use-balance.ts b/modules/web3/hooks/use-balance.ts new file mode 100644 index 00000000..70522b15 --- /dev/null +++ b/modules/web3/hooks/use-balance.ts @@ -0,0 +1,249 @@ +/* eslint-disable @typescript-eslint/no-non-null-assertion */ +import { useQuery, useQueryClient, type QueryKey } from '@tanstack/react-query'; +import { useCallback, useEffect, useMemo, useState } from 'react'; +import { + useAccount, + useBalance, + useReadContract, + useWatchContractEvent, +} from 'wagmi'; + +import { config } from 'config'; +import { useDappStatus, useLidoSDK } from 'modules/web3'; + +import { + erc20abi, + type AbstractLidoSDKErc20, +} from '@lidofinance/lido-ethereum-sdk/erc20'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { + getAbiItem, + type Address, + type WatchContractEventOnLogsFn, +} from 'viem'; +import type { GetBalanceData } from 'wagmi/query'; + +const selectBalance = (data: GetBalanceData) => data.value; + +export const useEthereumBalance = () => { + const { address, isAccountActive } = useDappStatus(); + + return useBalance({ + address, + query: { + select: selectBalance, + staleTime: config.PROVIDER_POLLING_INTERVAL, + refetchInterval: config.PROVIDER_POLLING_INTERVAL, + enabled: isAccountActive, + }, + }); +}; + +type TokenContract = Awaited< + ReturnType['getContract']> +>; + +type TokenSubscriptionState = Record< + Address, + { + subscribers: number; + queryKey: QueryKey; + } +>; + +type SubscribeArgs = { + tokenAddress: Address; + queryKey: QueryKey; +}; + +type UseBalanceProps = { + shouldSubscribeToUpdates?: boolean; +}; + +export const Erc20EventsAbi = [ + getAbiItem({ + abi: erc20abi, + name: 'Transfer', + }), +]; + +type OnLogsFn = WatchContractEventOnLogsFn< + typeof Erc20EventsAbi, + 'Transfer', + true +>; + +const onError = (error: unknown) => + console.warn( + '[useTokenTransferSubscription] error while watching events', + error, + ); + +export const useTokenTransferSubscription = () => { + const { address } = useAccount(); + const queryClient = useQueryClient(); + const [subscriptions, setSubscriptions] = useState( + {}, + ); + + const tokens = useMemo( + () => Object.keys(subscriptions) as Address[], + [subscriptions], + ); + + const onLogs: OnLogsFn = useCallback( + (logs) => { + for (const log of logs) { + const subscription = + subscriptions[log.address.toLowerCase() as Address]; + if (!subscription) continue; + // we could optimistically update balance data + // but it's easier to refetch balance after transfer + void queryClient.invalidateQueries( + { + queryKey: subscription.queryKey, + }, + { cancelRefetch: false }, + ); + } + }, + [queryClient, subscriptions], + ); + + const shouldWatch = !!(address && tokens.length > 0); + + useWatchContractEvent({ + abi: Erc20EventsAbi, + eventName: 'Transfer', + batch: true, + poll: true, + args: useMemo( + () => ({ + to: address, + }), + [address], + ), + address: tokens, + enabled: shouldWatch, + onLogs, + onError, + }); + + useWatchContractEvent({ + abi: Erc20EventsAbi, + eventName: 'Transfer', + batch: true, + poll: true, + args: useMemo( + () => ({ + from: address, + }), + [address], + ), + address: tokens, + enabled: shouldWatch, + onLogs, + onError, + }); + + const subscribe = useCallback( + ({ tokenAddress: _tokenAddress, queryKey }: SubscribeArgs) => { + const tokenAddress = _tokenAddress.toLowerCase() as Address; + setSubscriptions((old) => { + const existing = old[tokenAddress]; + return { + ...old, + [tokenAddress]: { + queryKey, + subscribers: existing?.subscribers ?? 0 + 1, + }, + }; + }); + + // returns unsubscribe to be used as useEffect return fn (for unmount) + return () => { + setSubscriptions((old) => { + const existing = old[tokenAddress]; + if (!existing) return old; + if (existing.subscribers > 1) { + return { + ...old, + [tokenAddress]: { + ...existing, + subscribers: existing.subscribers - 1, + }, + }; + } else { + delete old[tokenAddress]; + return { ...old }; + } + }); + }; + }, + [], + ); + + return subscribe; +}; + +// NB: contract can be undefined but for better wagmi typings is casted as NoNNullable +const useTokenBalance = (contract: TokenContract, shouldSubscribe = true) => { + const { isAccountActive, address } = useDappStatus(); + const subscribe = useTokenTransferSubscription(); + + const balanceQuery = useReadContract({ + abi: contract?.abi, + address: contract?.address, + functionName: 'balanceOf', + args: address && [address], + query: { + enabled: isAccountActive, + // because we update on events we can have high staleTime + // this prevents loader when changing pages + // but safes us from laggy user RPCs + staleTime: config.PROVIDER_POLLING_INTERVAL * 2, + refetchInterval: config.PROVIDER_POLLING_INTERVAL * 2, + }, + }); + + useEffect(() => { + if (shouldSubscribe && isAccountActive && contract?.address) { + return subscribe({ + tokenAddress: contract.address, + queryKey: balanceQuery.queryKey, + }); + } + // queryKey causes rerender + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isAccountActive, contract?.address]); + + return balanceQuery; +}; + +export const useStethBalance = ({ + shouldSubscribeToUpdates = true, +}: UseBalanceProps = {}) => { + const { stETH } = useLidoSDK(); + + const { data: contract } = useQuery({ + queryKey: ['steth-contract'], + ...STRATEGY_IMMUTABLE, + queryFn: async () => stETH.getContract(), + }); + + return useTokenBalance(contract!, shouldSubscribeToUpdates); +}; + +export const useWstethBalance = ({ + shouldSubscribeToUpdates = true, +}: UseBalanceProps = {}) => { + const { wstETH } = useLidoSDK(); + + const { data: contract } = useQuery({ + queryKey: ['wsteth-contract'], + ...STRATEGY_IMMUTABLE, + queryFn: () => wstETH.getContract(), + }); + + return useTokenBalance(contract!, shouldSubscribeToUpdates); +}; diff --git a/modules/web3/hooks/use-bond-by-keys-count.ts b/modules/web3/hooks/use-bond-by-keys-count.ts new file mode 100644 index 00000000..52e8cba5 --- /dev/null +++ b/modules/web3/hooks/use-bond-by-keys-count.ts @@ -0,0 +1,33 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { TOKENS } from '@lidofinance/lido-csm-sdk'; +import invariant from 'tiny-invariant'; + +type Props = { + curveId: bigint | undefined; + keysCount?: number; + token?: TOKENS; +}; + +export const useBondByKeysCount = ({ + keysCount = 0, + curveId, + token = TOKENS.steth, +}: Props) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['getBondAmountByKeysCountPerToken', { keysCount, curveId }], + ...STRATEGY_IMMUTABLE, + queryFn: () => { + invariant(curveId !== undefined); + return csm.accounting.getBondAmountByKeysCountPerToken({ + keysCount: BigInt(keysCount), + curveId, + }); + }, + enabled: curveId !== undefined, + select: (data) => data[token], + }); +}; diff --git a/modules/web3/hooks/use-bond-next-keys-count.ts b/modules/web3/hooks/use-bond-next-keys-count.ts new file mode 100644 index 00000000..a7697067 --- /dev/null +++ b/modules/web3/hooks/use-bond-next-keys-count.ts @@ -0,0 +1,33 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { NodeOperatorId, TOKENS } from '@lidofinance/lido-csm-sdk'; +import invariant from 'tiny-invariant'; + +type Props = { + nodeOperatorId: NodeOperatorId | undefined; + token: TOKENS; + keysCount?: number; +}; + +export const useBondNextKeysCount = ({ + nodeOperatorId, + token, + keysCount = 0, +}: Props) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['getBondForNextKeysPerToken', { keysCount, nodeOperatorId }], + ...STRATEGY_IMMUTABLE, + queryFn: () => { + invariant(nodeOperatorId !== undefined); + return csm.accounting.getBondForNextKeysPerToken({ + keysCount: BigInt(keysCount), + nodeOperatorId, + }); + }, + enabled: keysCount > 0 && nodeOperatorId !== undefined, + select: (data) => data[token], + }); +}; diff --git a/modules/web3/hooks/use-csm-status.ts b/modules/web3/hooks/use-csm-status.ts new file mode 100644 index 00000000..59d74df9 --- /dev/null +++ b/modules/web3/hooks/use-csm-status.ts @@ -0,0 +1,27 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useCsmStatus = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['csm-status'], + ...STRATEGY_CONSTANT, + queryFn: () => csm.module.getStatus(), + select: (data) => ({ + ...data, + isPaused: data.isPausedAccounting || data.isPausedModule, + }), + }); +}; + +export const useCsmVersionSupported = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['csm-version'], + ...STRATEGY_CONSTANT, + queryFn: async () => csm.module.isVersionsSupported(), + }); +}; diff --git a/modules/web3/hooks/use-curve-parameters.ts b/modules/web3/hooks/use-curve-parameters.ts new file mode 100644 index 00000000..053a85c7 --- /dev/null +++ b/modules/web3/hooks/use-curve-parameters.ts @@ -0,0 +1,23 @@ +import { CurveParameters } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const useCurveParameters = ( + curveId: bigint | undefined, + select?: (data: CurveParameters) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['curve-parameters', { curveId }], + ...STRATEGY_IMMUTABLE, + queryFn: () => { + invariant(curveId !== undefined); + return csm.parameters.getAll(curveId); + }, + enabled: curveId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-dapp-status.ts b/modules/web3/hooks/use-dapp-status.ts new file mode 100644 index 00000000..be1f61c9 --- /dev/null +++ b/modules/web3/hooks/use-dapp-status.ts @@ -0,0 +1,48 @@ +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; +import { useUserConfig } from 'config/user-config'; +import { Address } from 'viem'; +import { useAccount } from 'wagmi'; + +type Result = { + chainId: CSM_SUPPORTED_CHAINS; + isSupportedChain: boolean; + isAccountActive: boolean; + isWalletConnected: boolean; + address?: Address; +}; + +export const useDappStatus = (): Result => { + const { + address: walletAddress, + chainId: walletChainId, + isConnected: isWalletConnected, + } = useAccount(); + + const { supportedChainIds, defaultChain: defaultChainId } = useUserConfig(); + + const chainId = ( + walletChainId && supportedChainIds.includes(walletChainId) + ? walletChainId + : defaultChainId + ) as CSM_SUPPORTED_CHAINS; + + const isSupportedChain = walletChainId + ? supportedChainIds.includes(walletChainId) + : true; + + const isAccountActive = walletChainId + ? isWalletConnected && isSupportedChain + : false; + + const address = isSupportedChain ? walletAddress : undefined; + + // no useMemo because memoisation is more expensive than boolean flags + // hook is used in many places and every usage would create separate memoisation + return { + chainId, + isSupportedChain, + isAccountActive, + isWalletConnected, + address, + }; +}; diff --git a/modules/web3/hooks/use-default-curve-id.ts b/modules/web3/hooks/use-default-curve-id.ts new file mode 100644 index 00000000..42faa3f0 --- /dev/null +++ b/modules/web3/hooks/use-default-curve-id.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useDefaultCurveId = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['default-curve-id'], + ...STRATEGY_IMMUTABLE, + queryFn: () => csm.permissionlessGate.getCurveId(), + }); +}; diff --git a/modules/web3/hooks/use-deposit-queue-batches.ts b/modules/web3/hooks/use-deposit-queue-batches.ts new file mode 100644 index 00000000..84fed927 --- /dev/null +++ b/modules/web3/hooks/use-deposit-queue-batches.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { DepositQueueBatch } from '@lidofinance/lido-csm-sdk'; + +export const KEY_DEPOSIT_QUEUE_BATCHES = ['deposit-queue-batches']; + +export const useDepositQueueBatches = ( + select?: (data: DepositQueueBatch[][]) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_DEPOSIT_QUEUE_BATCHES], + ...STRATEGY_CONSTANT, + queryFn: () => csm.depositQueue.getAllBatches(), + select, + }); +}; diff --git a/modules/web3/hooks/use-frame-info.ts b/modules/web3/hooks/use-frame-info.ts new file mode 100644 index 00000000..7b981683 --- /dev/null +++ b/modules/web3/hooks/use-frame-info.ts @@ -0,0 +1,17 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { FrameInfo } from '@lidofinance/lido-csm-sdk'; + +export const useFrameInfo = ( + select?: (data: FrameInfo) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['frame-info'], + ...STRATEGY_CONSTANT, + queryFn: () => csm.frame.getInfo(), + select, + }); +}; diff --git a/modules/web3/hooks/use-has-priority-queue-spots.ts b/modules/web3/hooks/use-has-priority-queue-spots.ts new file mode 100644 index 00000000..e9049511 --- /dev/null +++ b/modules/web3/hooks/use-has-priority-queue-spots.ts @@ -0,0 +1,25 @@ +import { CurveParameters } from '@lidofinance/lido-csm-sdk'; +import { useCallback } from 'react'; +import { useCurrentCurveId } from 'shared/hooks'; +import { canAddMorePriorityKeys } from 'utils/curve-parameters'; +import { useNodeOperatorId } from '../operator-provider'; +import { useCurveParameters } from './use-curve-parameters'; +import { useOperatorInfo } from './use-operator-info'; + +export const useHasPriorityQueueSpots = () => { + const nodeOperatorId = useNodeOperatorId(); + const curveId = useCurrentCurveId(); + const { data: operatorInfo } = useOperatorInfo(nodeOperatorId); + + const selectHasPrioritySpots = useCallback( + (curveParameters: CurveParameters) => { + if (nodeOperatorId !== undefined && operatorInfo) { + return canAddMorePriorityKeys(operatorInfo, curveParameters); + } + return curveParameters.queueConfig.maxDeposits > 0; + }, + [nodeOperatorId, operatorInfo], + ); + + return useCurveParameters(curveId, selectHasPrioritySpots); +}; diff --git a/modules/web3/hooks/use-has-report-stealing-role.ts b/modules/web3/hooks/use-has-report-stealing-role.ts new file mode 100644 index 00000000..d6cf675e --- /dev/null +++ b/modules/web3/hooks/use-has-report-stealing-role.ts @@ -0,0 +1,20 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { useDappStatus } from './use-dapp-status'; +import invariant from 'tiny-invariant'; + +export const useHasReportStealingRole = () => { + const { address } = useDappStatus(); + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['has-report-stealing-role', { address }], + ...STRATEGY_IMMUTABLE, + queryFn: () => { + invariant(address); + return csm.stealing.hasReportRole(address); + }, + enabled: !!address, + }); +}; diff --git a/modules/web3/hooks/use-ics-curve-id.ts b/modules/web3/hooks/use-ics-curve-id.ts new file mode 100644 index 00000000..389d7c3b --- /dev/null +++ b/modules/web3/hooks/use-ics-curve-id.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useIcsCurveId = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['ics-curve-id'], + ...STRATEGY_IMMUTABLE, + queryFn: () => csm.icsGate.getCurveId(), + }); +}; diff --git a/modules/web3/hooks/use-ics-paused.ts b/modules/web3/hooks/use-ics-paused.ts new file mode 100644 index 00000000..86b55c36 --- /dev/null +++ b/modules/web3/hooks/use-ics-paused.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useIcsPaused = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['ics-paused'], + ...STRATEGY_CONSTANT, + queryFn: () => csm.icsGate.isPaused(), + }); +}; diff --git a/modules/web3/hooks/use-ics-proof.ts b/modules/web3/hooks/use-ics-proof.ts new file mode 100644 index 00000000..3c938b2c --- /dev/null +++ b/modules/web3/hooks/use-ics-proof.ts @@ -0,0 +1,21 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { Address } from 'viem'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_ICS_PROOF = ['ics-proof']; + +export const useIcsProof = (address: Address | undefined) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_ICS_PROOF, { address }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(address); + return csm.icsGate.getProofAndConsumed(address); + }, + enabled: !!address, + }); +}; diff --git a/modules/web3/hooks/use-invites.ts b/modules/web3/hooks/use-invites.ts new file mode 100644 index 00000000..3595e5d4 --- /dev/null +++ b/modules/web3/hooks/use-invites.ts @@ -0,0 +1,22 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { useDappStatus } from './use-dapp-status'; +import invariant from 'tiny-invariant'; + +export const KEY_INVITES = ['invites']; + +export const useInvites = () => { + const { csm } = useLidoSDK(); + const { address } = useDappStatus(); + + return useQuery({ + queryKey: [...KEY_INVITES, { address }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(address); + return csm.satellite.getNodeOperatorsByProposedAddress(address); + }, + enabled: !!address, + }); +}; diff --git a/modules/web3/hooks/use-is-contract.ts b/modules/web3/hooks/use-is-contract.ts new file mode 100644 index 00000000..290dc184 --- /dev/null +++ b/modules/web3/hooks/use-is-contract.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_IMMUTABLE } from 'consts'; +import { useLidoSDK } from 'modules/web3'; +import invariant from 'tiny-invariant'; +import { Address } from 'viem'; + +export const useIsContract = (address: Address | undefined) => { + const { core } = useLidoSDK(); + + return useQuery({ + queryKey: ['use-is-contract', address], + ...STRATEGY_IMMUTABLE, + queryFn: () => { + invariant(address); + return core.isContract(address); + }, + enabled: !!address, + }); +}; diff --git a/modules/web3/hooks/use-key-eject-fee.ts b/modules/web3/hooks/use-key-eject-fee.ts new file mode 100644 index 00000000..ddc9f7e2 --- /dev/null +++ b/modules/web3/hooks/use-key-eject-fee.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useKeyEjectFee = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['ics-eject-fee'], + queryFn: () => csm.keys.getEjectFeePerKey(), + ...STRATEGY_CONSTANT, + }); +}; diff --git a/modules/web3/hooks/use-key-removal-fee.ts b/modules/web3/hooks/use-key-removal-fee.ts new file mode 100644 index 00000000..f67708d2 --- /dev/null +++ b/modules/web3/hooks/use-key-removal-fee.ts @@ -0,0 +1,5 @@ +import { useCurveParameters } from './use-curve-parameters'; + +export const useKeyRemovalFee = (curveId: bigint | undefined) => { + return useCurveParameters(curveId, (parameters) => parameters.keyRemovalFee); +}; diff --git a/modules/web3/hooks/use-max-gas-price.ts b/modules/web3/hooks/use-max-gas-price.ts new file mode 100644 index 00000000..cc7d67e0 --- /dev/null +++ b/modules/web3/hooks/use-max-gas-price.ts @@ -0,0 +1,53 @@ +import { useFeeHistory } from 'wagmi'; +import type { GetFeeHistoryReturnType } from 'viem'; + +import { useDappStatus } from 'modules/web3'; + +const REWARD_PERCENTILES = [25]; + +const feeHistoryToMaxFee = ({ + reward, + baseFeePerGas, +}: GetFeeHistoryReturnType) => { + const maxPriorityFeePerGas = reward + ? reward?.map((fees) => fees[0]).reduce((sum, fee) => sum + fee) / + BigInt(reward.length) + : 0n; + + const lastBaseFeePerGas = baseFeePerGas[0]; + + // we have to multiply by 2 until we find a reliable way to predict baseFee change + return lastBaseFeePerGas * 2n + maxPriorityFeePerGas; +}; + +export const useMaxGasPrice = (chainId?: number) => { + const { chainId: dappChainId } = useDappStatus(); + + const { data, isLoading, error, isFetching, refetch } = useFeeHistory({ + blockCount: 5, + blockTag: 'pending', + chainId: chainId || dappChainId, + rewardPercentiles: REWARD_PERCENTILES, + query: { + select: feeHistoryToMaxFee, + }, + }); + + return { + get maxGasPrice() { + return data; + }, + get isLoading() { + return isLoading; + }, + get error() { + return error; + }, + get isFetching() { + return isFetching; + }, + update() { + return refetch(); + }, + }; +}; diff --git a/modules/web3/hooks/use-operator-balance.ts b/modules/web3/hooks/use-operator-balance.ts new file mode 100644 index 00000000..90d78126 --- /dev/null +++ b/modules/web3/hooks/use-operator-balance.ts @@ -0,0 +1,25 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { NodeOperatorId, BondBalance } from '@lidofinance/lido-csm-sdk'; +import invariant from 'tiny-invariant'; + +export const KEY_OPERATOR_BALANCE = ['operator-balance']; + +export const useOperatorBalance = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: BondBalance) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_BALANCE, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(nodeOperatorId !== undefined); + return csm.operator.getBondBalance(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-curve-id.ts b/modules/web3/hooks/use-operator-curve-id.ts new file mode 100644 index 00000000..71ccaeda --- /dev/null +++ b/modules/web3/hooks/use-operator-curve-id.ts @@ -0,0 +1,25 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import invariant from 'tiny-invariant'; + +export const KEY_OPERATOR_CURVE_ID = ['operator-curve-id']; + +export const useOperatorCurveId = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: bigint) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_CURVE_ID, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(nodeOperatorId !== undefined); + return csm.operator.getCurveId(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-info.ts b/modules/web3/hooks/use-operator-info.ts new file mode 100644 index 00000000..987f4333 --- /dev/null +++ b/modules/web3/hooks/use-operator-info.ts @@ -0,0 +1,25 @@ +import { NodeOperatorId, NodeOperatorInfo } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_OPERATOR_INFO = ['operator-info']; + +export const useOperatorInfo = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: NodeOperatorInfo) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_INFO, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(nodeOperatorId !== undefined); + return await csm.operator.getInfo(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-is-owner.ts b/modules/web3/hooks/use-operator-is-owner.ts new file mode 100644 index 00000000..eab15ac0 --- /dev/null +++ b/modules/web3/hooks/use-operator-is-owner.ts @@ -0,0 +1,29 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { Address } from 'viem'; +import { useLidoSDK } from '../web3-provider'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; + +export const KEY_OPERATOR_IS_OWNER = ['operator-is-owner']; + +export const useOperatorIsOwner = ({ + address, + nodeOperatorId, +}: { + address: Address | undefined; + nodeOperatorId: NodeOperatorId | undefined; +}) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_IS_OWNER, { address, nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(address); + invariant(nodeOperatorId !== undefined); + return csm.operator.isOwner(nodeOperatorId, address); + }, + enabled: !!address && nodeOperatorId !== undefined, + }); +}; diff --git a/modules/web3/hooks/use-operator-keys-to-migrate.ts b/modules/web3/hooks/use-operator-keys-to-migrate.ts new file mode 100644 index 00000000..50f7f4f1 --- /dev/null +++ b/modules/web3/hooks/use-operator-keys-to-migrate.ts @@ -0,0 +1,23 @@ +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_OPERATOR_KEYS_TO_MIGRATE = ['operator-keys-to-migrate']; + +export const useOperatorKeysToMigrate = ( + nodeOperatorId: NodeOperatorId | undefined, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_KEYS_TO_MIGRATE, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(nodeOperatorId !== undefined); + return csm.operator.getKeysCountToMigrate(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + }); +}; diff --git a/modules/web3/hooks/use-operator-keys-with-issues.ts b/modules/web3/hooks/use-operator-keys-with-issues.ts new file mode 100644 index 00000000..30b5b0e2 --- /dev/null +++ b/modules/web3/hooks/use-operator-keys-with-issues.ts @@ -0,0 +1,25 @@ +import { NodeOperatorId, ValidatorInfoIssues } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_FEE_RECIPIENT_ISSUES = ['fee-recipient-issues']; + +export const useOperatorKeysWithIssues = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: ValidatorInfoIssues[]) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_FEE_RECIPIENT_ISSUES, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(nodeOperatorId !== undefined); + return csm.feesMonitoring.getKeysWithIssues(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-keys-with-status.ts b/modules/web3/hooks/use-operator-keys-with-status.ts new file mode 100644 index 00000000..0adafa8f --- /dev/null +++ b/modules/web3/hooks/use-operator-keys-with-status.ts @@ -0,0 +1,25 @@ +import { KeyWithStatus, NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_OPERATOR_KEYS = ['operator-keys']; + +export const useOperatorKeysWithStatus = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: KeyWithStatus[]) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_KEYS, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(nodeOperatorId !== undefined); + return csm.keysWithStatus.getKeys(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-keys-with-strikes.ts b/modules/web3/hooks/use-operator-keys-with-strikes.ts new file mode 100644 index 00000000..a0e5ac21 --- /dev/null +++ b/modules/web3/hooks/use-operator-keys-with-strikes.ts @@ -0,0 +1,25 @@ +import { KeyWithStrikes, NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_OPERATOR_STRIKES = ['operator-strikes']; + +export const useOperatorKeysWithStrikes = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: KeyWithStrikes[]) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_STRIKES, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(nodeOperatorId !== undefined); + return csm.strikes.getKeysWithStrikes(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-keys-with-wrong-fee-recipient.ts b/modules/web3/hooks/use-operator-keys-with-wrong-fee-recipient.ts new file mode 100644 index 00000000..80ded90d --- /dev/null +++ b/modules/web3/hooks/use-operator-keys-with-wrong-fee-recipient.ts @@ -0,0 +1,39 @@ +import { + KEY_STATUS, + NodeOperatorId, + ValidatorInfoIssues, +} from '@lidofinance/lido-csm-sdk'; +import { useCallback } from 'react'; +import { useOperatorKeysWithStatus } from './use-operator-keys-with-status'; +import { useOperatorKeysWithIssues } from './use-operator-keys-with-issues'; + +const ACTIVE_STATUSES = [ + KEY_STATUS.DEPOSITABLE, + KEY_STATUS.ACTIVATION_PENDING, + KEY_STATUS.ACTIVE, + KEY_STATUS.EXITING, + KEY_STATUS.WITHDRAWAL_PENDING, +]; + +export const useOperatorKeysWithWrongFeeRecipient = ( + nodeOperatorId: NodeOperatorId | undefined, +) => { + const { data: keysWithStatus } = useOperatorKeysWithStatus(nodeOperatorId); + + const isActive = useCallback( + (data: ValidatorInfoIssues[]) => + data + .filter((issue) => issue.status === 'InvalidFeeRecipient') + .filter( + (issue) => + keysWithStatus + ?.find((key) => key.pubkey === issue.pubkey) + ?.statuses.some((status) => ACTIVE_STATUSES.includes(status)) ?? + false, + ) + .map((issue) => issue.pubkey), + [keysWithStatus], + ); + + return useOperatorKeysWithIssues(nodeOperatorId, isActive); +}; diff --git a/modules/web3/hooks/use-operator-last-rewards.ts b/modules/web3/hooks/use-operator-last-rewards.ts new file mode 100644 index 00000000..c8c20db0 --- /dev/null +++ b/modules/web3/hooks/use-operator-last-rewards.ts @@ -0,0 +1,21 @@ +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const useOperatorLastRewards = ( + nodeOperatorId: NodeOperatorId | undefined, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['operator-last-rewards', { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(nodeOperatorId !== undefined); + return csm.rewards.getOperatorRewardsInLastReport(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + }); +}; diff --git a/modules/web3/hooks/use-operator-owner.ts b/modules/web3/hooks/use-operator-owner.ts new file mode 100644 index 00000000..d001fcc1 --- /dev/null +++ b/modules/web3/hooks/use-operator-owner.ts @@ -0,0 +1,19 @@ +import { NodeOperatorId, ROLES } from '@lidofinance/lido-csm-sdk'; +import { useOperatorInfo } from './use-operator-info'; + +export type NodeOperatorOwner = { + role: ROLES; + address: string; +}; + +export const useOperatorOwner = ( + nodeOperatorId: NodeOperatorId | undefined, +) => { + return useOperatorInfo(nodeOperatorId, (info) => { + const isManagerOwner = info.extendedManagerPermissions; + return { + role: isManagerOwner ? ROLES.MANAGER : ROLES.REWARDS, + address: isManagerOwner ? info.managerAddress : info.rewardsAddress, + }; + }); +}; diff --git a/modules/web3/hooks/use-operator-reward.ts b/modules/web3/hooks/use-operator-reward.ts new file mode 100644 index 00000000..b89c2801 --- /dev/null +++ b/modules/web3/hooks/use-operator-reward.ts @@ -0,0 +1,23 @@ +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; +import invariant from 'tiny-invariant'; + +export const KEY_OPERATOR_REWARDS = ['operator-rewards']; + +export const useOperatorRewards = ( + nodeOperatorId: NodeOperatorId | undefined, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_REWARDS, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(nodeOperatorId !== undefined); + return csm.rewards.getRewards(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + }); +}; diff --git a/modules/web3/hooks/use-operator-rewards-history.ts b/modules/web3/hooks/use-operator-rewards-history.ts new file mode 100644 index 00000000..7d0bf4f1 --- /dev/null +++ b/modules/web3/hooks/use-operator-rewards-history.ts @@ -0,0 +1,28 @@ +import { + NodeOperatorId, + OperatorRewardsHistory, +} from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import invariant from 'tiny-invariant'; +import { useLidoSDK } from '../web3-provider'; + +export const KEY_OPERATOR_REWARDS_HISTORY = ['operator-rewards-history']; + +export const useOperatorRewardsHistory = ( + nodeOperatorId: NodeOperatorId | undefined, + select?: (data: OperatorRewardsHistory) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_OPERATOR_REWARDS_HISTORY, { nodeOperatorId }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(nodeOperatorId !== undefined); + return csm.rewards.getOperatorRewardsHistory(nodeOperatorId); + }, + enabled: nodeOperatorId !== undefined, + select, + }); +}; diff --git a/modules/web3/hooks/use-operator-type.ts b/modules/web3/hooks/use-operator-type.ts new file mode 100644 index 00000000..ab40b332 --- /dev/null +++ b/modules/web3/hooks/use-operator-type.ts @@ -0,0 +1,7 @@ +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { getOperatorType } from 'utils'; +import { useOperatorCurveId } from './use-operator-curve-id'; + +export const useOperatorType = (id: NodeOperatorId | undefined) => { + return useOperatorCurveId(id, getOperatorType); +}; diff --git a/modules/web3/hooks/use-operators-count.ts b/modules/web3/hooks/use-operators-count.ts new file mode 100644 index 00000000..f55882ee --- /dev/null +++ b/modules/web3/hooks/use-operators-count.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useOperatorsCount = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['operators-count'], + ...STRATEGY_CONSTANT, + queryFn: () => csm.module.getOperatorsCount(), + }); +}; diff --git a/modules/web3/hooks/use-operators-with-locked-bond.ts b/modules/web3/hooks/use-operators-with-locked-bond.ts new file mode 100644 index 00000000..cc376e10 --- /dev/null +++ b/modules/web3/hooks/use-operators-with-locked-bond.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useOperatorsWithLockedBond = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['operators-with-locked-bond'], + ...STRATEGY_CONSTANT, + queryFn: () => csm.stealing.getOperatorsWithLockedBond(), + }); +}; diff --git a/modules/web3/hooks/use-other-module.ts b/modules/web3/hooks/use-other-module.ts new file mode 100644 index 00000000..7d6ed822 --- /dev/null +++ b/modules/web3/hooks/use-other-module.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from 'modules/web3'; +import invariant from 'tiny-invariant'; +import { Address } from 'viem'; + +export const useOtherModule = (address: Address | undefined) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['other-module', { address }], + ...STRATEGY_CONSTANT, + queryFn: () => { + invariant(address); + return csm.module.getUsedOtherModule(address); + }, + enabled: !!address, + }); +}; diff --git a/modules/web3/hooks/use-rewards-last-report-tx-hash.ts b/modules/web3/hooks/use-rewards-last-report-tx-hash.ts new file mode 100644 index 00000000..ab1ef428 --- /dev/null +++ b/modules/web3/hooks/use-rewards-last-report-tx-hash.ts @@ -0,0 +1,13 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from '../web3-provider'; + +export const useRewardsLastReportTxHash = () => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: ['rewards-last-report-tx-hash'], + ...STRATEGY_CONSTANT, + queryFn: () => csm.rewards.getLastReportTransactionHash(), + }); +}; diff --git a/modules/web3/hooks/use-share-limit-percentage.ts b/modules/web3/hooks/use-share-limit-percentage.ts new file mode 100644 index 00000000..8678d75d --- /dev/null +++ b/modules/web3/hooks/use-share-limit-percentage.ts @@ -0,0 +1,5 @@ +import { useShareLimit } from './use-share-limit'; + +export const useShareLimitPercentage = () => { + return useShareLimit((data) => data.shareLimit); +}; diff --git a/modules/web3/hooks/use-share-limit-status.ts b/modules/web3/hooks/use-share-limit-status.ts new file mode 100644 index 00000000..88dd5cfb --- /dev/null +++ b/modules/web3/hooks/use-share-limit-status.ts @@ -0,0 +1,22 @@ +import { useShareLimit } from './use-share-limit'; + +export const SHARE_LIMIT_STATUS = { + FAR: 'FAR', + APPROACHING: 'APPROACHING', + EXHAUSTED: 'EXHAUSTED', + REACHED: 'REACHED', +} as const; + +export const SHARE_LIMIT_APPROACHING_THRESHOLD = 200n; + +export const useShareLimitStatus = () => { + return useShareLimit((data) => + data.activeLeft <= 0 + ? SHARE_LIMIT_STATUS.REACHED + : data.activeLeft - data.queue < 0 + ? SHARE_LIMIT_STATUS.EXHAUSTED + : data.activeLeft - data.queue < SHARE_LIMIT_APPROACHING_THRESHOLD + ? SHARE_LIMIT_STATUS.APPROACHING + : SHARE_LIMIT_STATUS.FAR, + ); +}; diff --git a/modules/web3/hooks/use-share-limit.ts b/modules/web3/hooks/use-share-limit.ts new file mode 100644 index 00000000..d3193fbf --- /dev/null +++ b/modules/web3/hooks/use-share-limit.ts @@ -0,0 +1,19 @@ +import { ShareLimitInfo } from '@lidofinance/lido-csm-sdk'; +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from 'modules/web3'; + +export const KEY_SHARE_LIMIT = ['share-limit']; + +export const useShareLimit = ( + select?: (data: ShareLimitInfo) => TData, +) => { + const { csm } = useLidoSDK(); + + return useQuery({ + queryKey: [...KEY_SHARE_LIMIT], + ...STRATEGY_CONSTANT, + queryFn: () => csm.module.getShareLimit(), + select, + }); +}; diff --git a/modules/web3/hooks/use-stETH-by-wstETH.ts b/modules/web3/hooks/use-stETH-by-wstETH.ts new file mode 100644 index 00000000..f3841d41 --- /dev/null +++ b/modules/web3/hooks/use-stETH-by-wstETH.ts @@ -0,0 +1,19 @@ +import { useQuery } from '@tanstack/react-query'; +import { useLidoSDK } from 'modules/web3'; +import invariant from 'tiny-invariant'; + +export const useStETHByWstETH = (wsteth: bigint | undefined | null) => { + const { wrap } = useLidoSDK(); + + return useQuery({ + queryKey: ['steth-by-wsteth', wsteth], + enabled: wsteth != null && !!wrap, + staleTime: Infinity, + queryFn: () => { + if (wsteth === 0n) return 0n; + invariant(wsteth); + + return wrap.convertWstethToSteth(wsteth); + }, + }); +}; diff --git a/modules/web3/hooks/use-stake-limit.ts b/modules/web3/hooks/use-stake-limit.ts new file mode 100644 index 00000000..3cafc248 --- /dev/null +++ b/modules/web3/hooks/use-stake-limit.ts @@ -0,0 +1,16 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useLidoSDK } from 'modules/web3'; + +export const KEY_STAKE_LIMIT = ['stake-limit']; + +export const useStakeLimit = () => { + const { stake } = useLidoSDK(); + + return useQuery({ + queryKey: KEY_STAKE_LIMIT, + ...STRATEGY_CONSTANT, + queryFn: () => stake.getStakeLimitInfo(), + select: (data) => (data.isStakingPaused ? 0n : data.currentStakeLimit), + }); +}; diff --git a/modules/web3/hooks/use-tx-confirmation.ts b/modules/web3/hooks/use-tx-confirmation.ts new file mode 100644 index 00000000..2424632e --- /dev/null +++ b/modules/web3/hooks/use-tx-confirmation.ts @@ -0,0 +1,21 @@ +import { useCallback } from 'react'; +import type { Hash } from 'viem'; +import { waitForTransactionReceipt } from 'viem/actions'; +import { useClient } from 'wagmi'; +import { useDappStatus } from 'modules/web3'; + +// helper hook until migration to wagmi is complete +// awaits TX trough wagmi transport to allow sync with balance hooks +export const useTxConfirmation = () => { + const { chainId } = useDappStatus(); + const client = useClient({ chainId }); + return useCallback( + (hash: string) => { + return waitForTransactionReceipt(client as any, { + confirmations: 1, + hash: hash as Hash, + }); + }, + [client], + ); +}; diff --git a/modules/web3/hooks/use-wstETH-by-stETH.ts b/modules/web3/hooks/use-wstETH-by-stETH.ts new file mode 100644 index 00000000..33c35142 --- /dev/null +++ b/modules/web3/hooks/use-wstETH-by-stETH.ts @@ -0,0 +1,19 @@ +import invariant from 'tiny-invariant'; +import { useQuery } from '@tanstack/react-query'; +import { useLidoSDK } from 'modules/web3'; + +export const useWstethBySteth = (steth: bigint | undefined | null) => { + const { wrap } = useLidoSDK(); + + return useQuery({ + queryKey: ['wsteth-by-steth', steth], + enabled: steth != null && !!wrap, + staleTime: Infinity, + queryFn: () => { + if (steth === 0n) return 0n; + invariant(steth); + + return wrap.convertStethToWsteth(steth); + }, + }); +}; diff --git a/modules/web3/index.ts b/modules/web3/index.ts new file mode 100644 index 00000000..1500ce25 --- /dev/null +++ b/modules/web3/index.ts @@ -0,0 +1,4 @@ +export * from './hooks'; +export * from './utils'; +export * from './web3-provider'; +export * from './operator-provider'; diff --git a/modules/web3/operator-provider/index.ts b/modules/web3/operator-provider/index.ts new file mode 100644 index 00000000..e8b1f904 --- /dev/null +++ b/modules/web3/operator-provider/index.ts @@ -0,0 +1,3 @@ +export * from './node-operator-provider'; +export * from './use-available-operators'; +export * from './use-append-operator'; diff --git a/modules/web3/operator-provider/node-operator-provider.tsx b/modules/web3/operator-provider/node-operator-provider.tsx new file mode 100644 index 00000000..b7ae7419 --- /dev/null +++ b/modules/web3/operator-provider/node-operator-provider.tsx @@ -0,0 +1,75 @@ +import { NodeOperator, NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { + createContext, + FC, + PropsWithChildren, + useCallback, + useContext, + useMemo, +} from 'react'; +import invariant from 'tiny-invariant'; +import { useActiveNodeOperator } from './use-active-node-operator'; +import { useAvailableOperators } from './use-available-operators'; + +export type NodeOperatorContextValue = { + isPending: boolean; + nodeOperator: NodeOperator | undefined; + switchNodeOperator: (id: NodeOperatorId) => void; +}; + +export type NodeOperatorDefinedContextValue = NodeOperatorContextValue & { + nodeOperator: NodeOperator; +}; + +export const NodeOperatorContext = + createContext(null); + +export const useNodeOperator = < + TDefined extends boolean = false, +>(): TDefined extends true + ? NodeOperatorDefinedContextValue + : NodeOperatorContextValue => { + const value = useContext(NodeOperatorContext); + invariant( + value, + 'useNodeOperator was used outside the NodeOperatorContext provider', + ); + return value as any; +}; + +export const useNodeOperatorId = < + TDefined extends boolean = false, +>(): TDefined extends true ? NodeOperatorId : NodeOperatorId | undefined => { + const value = useContext(NodeOperatorContext); + invariant( + value, + 'useNodeOperatorId was used outside the NodeOperatorContext provider', + ); + return value.nodeOperator?.id as any; +}; + +export const NodeOperatorPrivider: FC = ({ children }) => { + const { data: list, isPending } = useAvailableOperators(); + const [active, setActive] = useActiveNodeOperator(list); + + const switchNodeOperator = useCallback( + (id: NodeOperatorId) => { + const newActive = list?.find((item) => item.id === id); + if (newActive) { + setActive(newActive); + } + }, + [list, setActive], + ); + + const value = useMemo( + () => ({ isPending, nodeOperator: active, switchNodeOperator }), + [active, isPending, switchNodeOperator], + ); + + return ( + + {children} + + ); +}; diff --git a/modules/web3/operator-provider/use-active-node-operator.ts b/modules/web3/operator-provider/use-active-node-operator.ts new file mode 100644 index 00000000..2ce983f3 --- /dev/null +++ b/modules/web3/operator-provider/use-active-node-operator.ts @@ -0,0 +1,22 @@ +import { useEffect, useState } from 'react'; +import { useCachedId } from './use-cached-id'; +import { NodeOperator } from '@lidofinance/lido-csm-sdk'; + +export const useActiveNodeOperator = (list?: NodeOperator[]) => { + const [active, setActive] = useState(); + const [, setCachedId] = useCachedId(); + + useEffect(() => { + setActive((prev) => { + const updated = list?.find((item) => item.id === prev?.id); + + return updated ?? list?.[0]; + }); + }, [list]); + + useEffect(() => { + active && setCachedId(active.id); + }, [active, setCachedId]); + + return [active ?? list?.[0], setActive] as const; +}; diff --git a/modules/web3/operator-provider/use-append-operator.ts b/modules/web3/operator-provider/use-append-operator.ts new file mode 100644 index 00000000..fb2ec373 --- /dev/null +++ b/modules/web3/operator-provider/use-append-operator.ts @@ -0,0 +1,58 @@ +import { + appendNodeOperator, + getNodeOperatorRoles, + NodeOperatorShortInfo, +} from '@lidofinance/lido-csm-sdk'; +import { NodeOperator, NodeOperatorId } from '@lidofinance/lido-csm-sdk'; +import { useMutation, useQueryClient } from '@tanstack/react-query'; +import { useDappStatus } from '../hooks'; +import { useLidoSDK } from '../web3-provider'; +import { KEY_OPERATORS } from './use-available-operators'; +import { getAddressRoles } from 'shared/node-operator/utils'; + +export const useAppendOperator = () => { + const queryClient = useQueryClient(); + const { address } = useDappStatus(); + + const { mutate } = useMutation({ + mutationFn: async (value: NodeOperatorShortInfo) => ({ + id: value.nodeOperatorId, + roles: getAddressRoles(value, address || '0x0'), + }), + onSuccess: (data) => { + queryClient.setQueryData( + [...KEY_OPERATORS, { address }], + (prev = []) => appendNodeOperator(prev, data), + ); + }, + }); + + return mutate; +}; + +export const useApplyOperator = () => { + const { csm } = useLidoSDK(); + const { address } = useDappStatus(); + const queryClient = useQueryClient(); + + const { mutateAsync } = useMutation({ + mutationFn: async (id: NodeOperatorId) => { + const data = await csm.operator.getInfo(id); + if (!address || !data) return null; + + const roles = getNodeOperatorRoles(data, address); + if (roles.length > 0) null; + + return { id, roles } as NodeOperator; + }, + onSuccess: (data) => { + if (!data) return; + queryClient.setQueryData( + [...KEY_OPERATORS, { address }], + () => appendNodeOperator([], data), + ); + }, + }); + + return mutateAsync; +}; diff --git a/modules/web3/operator-provider/use-available-operators.ts b/modules/web3/operator-provider/use-available-operators.ts new file mode 100644 index 00000000..b28e1e63 --- /dev/null +++ b/modules/web3/operator-provider/use-available-operators.ts @@ -0,0 +1,31 @@ +import { useQuery } from '@tanstack/react-query'; +import { STRATEGY_CONSTANT } from 'consts'; +import { useMemo } from 'react'; +import invariant from 'tiny-invariant'; +import { useDappStatus } from '../hooks'; +import { useLidoSDK } from '../web3-provider'; +import { useCachedNodeOperator } from './use-cached-node-operator'; + +export const KEY_OPERATORS = ['node-operators']; + +export const useAvailableOperators = () => { + const { csm } = useLidoSDK(); + const { address } = useDappStatus(); + + const { data: cached } = useCachedNodeOperator(); + const placeholderData = useMemo( + () => (cached ? [cached] : undefined), + [cached], + ); + + return useQuery({ + queryKey: [...KEY_OPERATORS, { address }], + ...STRATEGY_CONSTANT, + queryFn: async () => { + invariant(address); + return csm.satellite.getNodeOperatorsByAddress(address); + }, + enabled: !!address, + placeholderData, + }); +}; diff --git a/modules/web3/operator-provider/use-cached-id.ts b/modules/web3/operator-provider/use-cached-id.ts new file mode 100644 index 00000000..d756a93b --- /dev/null +++ b/modules/web3/operator-provider/use-cached-id.ts @@ -0,0 +1,13 @@ +import { useLocalStorage } from 'shared/hooks'; +import { useDappStatus } from '../hooks'; +import { NodeOperatorId } from '@lidofinance/lido-csm-sdk'; + +export const useCachedId = () => { + const { address } = useDappStatus(); + + return useLocalStorage( + address ? `csm-no-${address}` : undefined, + undefined, + BigInt, + ); +}; diff --git a/modules/web3/operator-provider/use-cached-node-operator.ts b/modules/web3/operator-provider/use-cached-node-operator.ts new file mode 100644 index 00000000..33240e1b --- /dev/null +++ b/modules/web3/operator-provider/use-cached-node-operator.ts @@ -0,0 +1,30 @@ +import { + getNodeOperatorRoles, + NodeOperatorInfo, +} from '@lidofinance/lido-csm-sdk'; +import { NodeOperator } from '@lidofinance/lido-csm-sdk'; +import { useCallback } from 'react'; +import { useDappStatus, useOperatorInfo } from '../hooks'; +import { useCachedId } from './use-cached-id'; + +export const useCachedNodeOperator = () => { + const { address } = useDappStatus(); + const [cachedId, setCachedId] = useCachedId(); + + const select = useCallback( + (data: NodeOperatorInfo) => { + if (!cachedId || !address) return undefined; + const roles = getNodeOperatorRoles(data, address); + + if (roles.length === 0) { + setCachedId(undefined); + return undefined; + } + + return { id: cachedId, roles } as NodeOperator; + }, + [address, cachedId, setCachedId], + ); + + return useOperatorInfo(cachedId, select); +}; diff --git a/modules/web3/utils/apply-round-up-gas-limit.ts b/modules/web3/utils/apply-round-up-gas-limit.ts new file mode 100644 index 00000000..8fe57aab --- /dev/null +++ b/modules/web3/utils/apply-round-up-gas-limit.ts @@ -0,0 +1,3 @@ +export const applyRoundUpGasLimit = (number: bigint): bigint => + // 94567 -> 94 -> 94000 -> 94999 + (number / 1_000n) * 1_000n + 999n; diff --git a/modules/web3/utils/get-max-balance-token.ts b/modules/web3/utils/get-max-balance-token.ts new file mode 100644 index 00000000..2dd4c2ab --- /dev/null +++ b/modules/web3/utils/get-max-balance-token.ts @@ -0,0 +1,21 @@ +import { PerToken, TOKENS } from '@lidofinance/lido-csm-sdk'; + +type Props = Partial>; + +// TODO: convert wsteth amount + +export const getMaxBalanceToken = (props: Props): TOKENS => { + const balances = [ + { token: TOKENS.steth, balance: props.stETH ?? 0n }, + { token: TOKENS.wsteth, balance: props.wstETH ?? 0n }, + { token: TOKENS.eth, balance: props.ETH ?? 0n }, + ]; + + return balances.reduce( + (max, current) => (max.balance >= current.balance ? max : current), + { + balance: 0n, + token: TOKENS.steth, + }, + ).token; +}; diff --git a/modules/web3/utils/index.ts b/modules/web3/utils/index.ts new file mode 100644 index 00000000..abf8b49f --- /dev/null +++ b/modules/web3/utils/index.ts @@ -0,0 +1,2 @@ +export * from './apply-round-up-gas-limit'; +export * from './get-max-balance-token'; diff --git a/modules/web3/web3-provider/index.ts b/modules/web3/web3-provider/index.ts new file mode 100644 index 00000000..4e5f42cc --- /dev/null +++ b/modules/web3/web3-provider/index.ts @@ -0,0 +1,2 @@ +export { Web3Provider } from './web3-provider'; +export { useLidoSDK } from './lido-sdk'; diff --git a/modules/web3/web3-provider/lido-sdk.tsx b/modules/web3/web3-provider/lido-sdk.tsx new file mode 100644 index 00000000..8a69b5df --- /dev/null +++ b/modules/web3/web3-provider/lido-sdk.tsx @@ -0,0 +1,117 @@ +import { createContext, useContext, useEffect, useMemo } from 'react'; +import invariant from 'tiny-invariant'; +import { + useAccount, + useConfig, + usePublicClient, + useSwitchChain, + useWalletClient, +} from 'wagmi'; + +import { CHAINS, LidoSDKCore } from '@lidofinance/lido-ethereum-sdk/core'; +import { + LidoSDKstETH, + LidoSDKwstETH, +} from '@lidofinance/lido-ethereum-sdk/erc20'; + +import { LidoSDKCsm } from '@lidofinance/lido-csm-sdk'; +import { + LidoSDKStake, + LidoSDKWrap, + LidoSDKWithdraw, +} from '@lidofinance/lido-ethereum-sdk'; +import { config } from 'config'; +import { useClApiUrl } from 'config/rpc/cl'; + +type LidoSDKContextValue = { + chainId: CHAINS; + core: LidoSDKCore; + stake: LidoSDKStake; + stETH: LidoSDKstETH; + wstETH: LidoSDKwstETH; + wrap: LidoSDKWrap; + withdraw: LidoSDKWithdraw; + csm: LidoSDKCsm; +}; + +const chainId = config.defaultChain; + +const LidoSDKContext = createContext(null); +LidoSDKContext.displayName = 'LidoSDKContext'; + +export const useLidoSDK = () => { + const value = useContext(LidoSDKContext); + invariant(value, 'useLidoSDK was used outside of LidoSDKProvider'); + return value; +}; + +export const LidoSDKProvider = ({ children }: React.PropsWithChildren) => { + const { data: walletClient } = useWalletClient({ chainId }); + const publicClient = usePublicClient({ chainId }); + // reset internal wagmi state after disconnect + const { isConnected } = useAccount(); + + const clApiUrl = useClApiUrl(); + + const wagmiConfig = useConfig(); + const { switchChain } = useSwitchChain(); + useEffect(() => { + if (isConnected) { + return () => { + // protecs from side effect double run + if (!wagmiConfig.state.current) { + switchChain({ + chainId: config.defaultChain, + }); + } + }; + } + // eslint-disable-next-line react-hooks/exhaustive-deps + }, [isConnected]); + + const contextValue = useMemo(() => { + const core = new LidoSDKCore( + // @ts-expect-error: typing (viem + LidoSDK) + { + chainId, + // logMode: 'debug', + rpcProvider: publicClient, + web3Provider: walletClient, + }, + 'CSM', + ); + + const stake = new LidoSDKStake({ core }); + const stETH = new LidoSDKstETH({ core }); + const wstETH = new LidoSDKwstETH({ core }); + const wrap = new LidoSDKWrap({ core }); + const withdraw = new LidoSDKWithdraw({ core }); + const csm = new LidoSDKCsm({ + core, + clApiUrl, + maxEventBlocksRange: + chainId === CHAINS.Mainnet + ? undefined + : config.MAX_BLOCK_RANGE_FOR_EVENTS, + skipHistoricalCalls: chainId !== CHAINS.Mainnet, + keysApiUrl: config.keysApiUrl, + feesMonitoringApiUrl: config.feesMonitoringApiUrl, + }); + + return { + chainId: core.chainId, + core, + stake, + stETH, + wstETH, + wrap, + withdraw, + csm, + }; + }, [clApiUrl, publicClient, walletClient]); + return ( + + {children} + + ); +}; diff --git a/modules/web3/web3-provider/use-web3-transport.ts b/modules/web3/web3-provider/use-web3-transport.ts new file mode 100644 index 00000000..68eb92bf --- /dev/null +++ b/modules/web3/web3-provider/use-web3-transport.ts @@ -0,0 +1,189 @@ +/* eslint-disable @typescript-eslint/no-unused-vars */ +import { config } from 'config'; +import { useMemo, useCallback } from 'react'; +import { + type Transport, + fallback, + createTransport, + http, + EIP1193Provider, + custom, + Chain, + UnsupportedProviderMethodError, + InvalidParamsRpcError, +} from 'viem'; + +import type { OnResponseFn } from 'viem/_types/clients/transports/fallback'; +import type { Connection } from 'wagmi'; + +// We disable those methods so wagmi uses getLogs instead to watch events +// Filters are not suitable for public rpc and break when changing between fallbacks +const DISABLED_METHODS = new Set([ + 'eth_newFilter', + 'eth_getFilterChanges', + 'eth_uninstallFilter', +]); + +// Viem transport wrapper that allows runtime changes via setter +const runtimeMutableTransport = ( + mainTransports: Transport[], +): [Transport, (t: Transport | null) => void] => { + let withInjectedTransport: Transport | null = null; + + // tuple [RuntimeMutableTransport(), injectedTransporterSetter()] + return [ + (params) => { + const defaultTransport = fallback(mainTransports)(params); + let externalOnResponse: OnResponseFn; + + const onResponse: OnResponseFn = (params) => { + if (params.status === 'error' && !(params as any).skipLog) { + console.warn( + `[runtimeMutableTransport] error in RuntimeMutableTransport(using injected: ${!!withInjectedTransport})`, + params, + ); + } + externalOnResponse?.(params); + }; + + return createTransport( + { + key: 'RuntimeMutableTransport', + name: 'RuntimeMutableTransport', + //@ts-expect-error invalid typings + async request(requestParams, options) { + const transport = withInjectedTransport + ? withInjectedTransport(params) + : defaultTransport; + + if (DISABLED_METHODS.has(requestParams.method)) { + const error = new UnsupportedProviderMethodError( + new Error(`Method ${requestParams.method} is not supported`), + ); + onResponse({ + error, + method: requestParams.method, + params: params as unknown[], + transport, + status: 'error', + // skip logging because we expect wagmi to try those + skipLog: true, + } as any); + throw error; + } + + if ( + requestParams.method === 'eth_getLogs' && + Array.isArray(requestParams?.params) && + // works for empty array, empty string and all falsish values + !requestParams.params[0]?.address?.length + ) { + const error = new InvalidParamsRpcError( + new Error(`Empty address for eth_getLogs is not supported`), + ); + onResponse({ + error, + method: requestParams.method, + params: params as unknown[], + transport, + status: 'error', + }); + throw error; + } + + transport.value?.onResponse(onResponse); + return transport.request(requestParams, options); + }, + // crucial cause we quack like a fallback transport and some connectors(WC) rely on this + type: 'fallback', + }, + // transport.value contents + { + // this is fallbackTransport specific field, used by WC connectors to extract rpc Urls + // we can use defaultTransport because no injected transport + transports: defaultTransport.value?.transports, + // providers that use this transport, use this to set onResponse callback for transport, + onResponse: (fn: OnResponseFn) => (externalOnResponse = fn), + }, + ); + }, + (injectedTransport: Transport | null) => { + if (injectedTransport) { + withInjectedTransport = fallback([ + injectedTransport, + ...mainTransports, + ]); + } else { + withInjectedTransport = null; + } + }, + ]; +}; + +// returns Viem transport map that uses browser wallet RPC provider when available fallbacked by our RPC and default RPCs +export const useWeb3Transport = ( + supportedChains: Chain[], + backendRpcMap: Record, + useWalletRpc = false, +) => { + const { transportMap, setTransportMap } = useMemo(() => { + const batchConfig = { + wait: config.PROVIDER_BATCH_TIME, + batchSize: config.PROVIDER_MAX_BATCH, + }; + + return supportedChains.reduce( + ({ transportMap, setTransportMap }, chain) => { + const [transport, setTransport] = runtimeMutableTransport([ + // api/rpc + http(backendRpcMap[chain.id], { + batch: batchConfig, + name: backendRpcMap[chain.id], + }), + // fallback rpc from wagmi.chains like cloudfare-eth + // http(undefined, { + // batch: batchConfig, + // name: 'default HTTP RPC', + // }), + ]); + return { + transportMap: { + ...transportMap, + [chain.id]: transport, + }, + setTransportMap: { + ...setTransportMap, + [chain.id]: setTransport, + }, + }; + }, + { + transportMap: {} as Record, + setTransportMap: {} as Record void>, + }, + ); + }, [backendRpcMap, supportedChains]); + + const onActiveConnection = useCallback( + async (activeConnection: Connection | null) => { + for (const chain of supportedChains) { + const setTransport = setTransportMap[chain.id]; + if ( + useWalletRpc && + activeConnection && + chain.id === activeConnection.chainId && + activeConnection.connector.type === 'injected' + ) { + const provider = (await activeConnection.connector?.getProvider?.({ + chainId: chain.id, + })) as EIP1193Provider | undefined; + setTransport(provider ? custom(provider) : null); + } else setTransport(null); + } + }, + // eslint-disable-next-line react-hooks/exhaustive-deps + [setTransportMap, supportedChains, useWalletRpc], + ); + + return { transportMap, onActiveConnection }; +}; diff --git a/modules/web3/web3-provider/web3-provider.tsx b/modules/web3/web3-provider/web3-provider.tsx new file mode 100644 index 00000000..ac829c10 --- /dev/null +++ b/modules/web3/web3-provider/web3-provider.tsx @@ -0,0 +1,208 @@ +import { + createContext, + FC, + PropsWithChildren, + useContext, + useEffect, + useMemo, +} from 'react'; +import { + Config, + WagmiProvider, + createConfig, + fallback, + useConnections, + usePublicClient, +} from 'wagmi'; +import * as wagmiChains from 'wagmi/chains'; + +import { + ReefKnotWalletsModal, + getDefaultWalletsModalConfig, +} from 'reef-knot/connect-wallet-modal'; +import { ReefKnotProvider, getDefaultConfig } from 'reef-knot/core-react'; +import { WalletIdsEthereum, WalletsListEthereum } from 'reef-knot/wallets'; + +import { useThemeToggle } from '@lidofinance/lido-ui'; + +import { config } from 'config'; +import { useGetRpcUrlByChainId } from 'config/rpc'; +import { useUserConfig } from 'config/user-config'; +import { useFeatureFlags } from 'config/feature-flags'; +import { USE_WALLET_RPC } from 'config/feature-flags/types'; +import { walletMetricProps } from 'consts/matomo-wallets-events'; + +import { useWeb3Transport } from './use-web3-transport'; +import { LidoSDKProvider } from './lido-sdk'; +import { http, PublicClient } from 'viem'; +import invariant from 'tiny-invariant'; +import { CHAINS } from '@lidofinance/lido-ethereum-sdk'; +import { CSM_SUPPORTED_CHAINS } from '@lidofinance/lido-csm-sdk'; + +type ChainsList = [wagmiChains.Chain, ...wagmiChains.Chain[]]; + +const WALLETS_PINNED: WalletIdsEthereum[] = [ + 'browserExtension', + 'walletConnect', +]; + +export const wagmiChainMap = Object.values(wagmiChains).reduce( + (acc, chain) => { + acc[chain.id] = chain; + return acc; + }, + {} as Record, +); + +type Web3ProviderContextValue = { + mainnetConfig: Config; + publicClientMainnet: PublicClient; +}; + +const Web3ProviderContext = createContext( + null, +); +Web3ProviderContext.displayName = 'Web3ProviderContext'; + +export const useMainnetOnlyWagmi = () => { + const value = useContext(Web3ProviderContext); + invariant(value, 'useMainnetOnlyWagmi was used outside of Web3Provider'); + return value; +}; + +export const Web3Provider: FC = ({ children }) => { + const { + defaultChain: defaultChainId, + supportedChainIds, + walletconnectProjectId, + isWalletConnectionAllowed, + } = useUserConfig(); + const { themeName } = useThemeToggle(); + const featureFlags = useFeatureFlags(); + const useWalletRpc = featureFlags?.[USE_WALLET_RPC] ?? false; + + const { supportedChains, defaultChain } = useMemo(() => { + // must preserve order of supportedChainIds + const supportedChains = supportedChainIds + .map((id) => wagmiChainMap[id]) + .filter((chain) => chain) as ChainsList; + + const defaultChain = wagmiChainMap[defaultChainId] || supportedChains[0]; + return { + supportedChains, + defaultChain, + }; + }, [defaultChainId, supportedChainIds]); + + const getRpcUrlByChainId = useGetRpcUrlByChainId(); + + const backendRPC: Record = useMemo( + () => + supportedChainIds.reduce( + (res, curr) => ({ + ...res, + [curr]: getRpcUrlByChainId(curr as CSM_SUPPORTED_CHAINS), + }), + {}, + ), + [supportedChainIds, getRpcUrlByChainId], + ); + const { transportMap, onActiveConnection } = useWeb3Transport( + supportedChains, + backendRPC, + useWalletRpc, + ); + + const mainnetConfig = useMemo(() => { + const batchConfig = { + wait: config.PROVIDER_BATCH_TIME, + batchSize: config.PROVIDER_MAX_BATCH, + }; + + const rpcUrlMainnet = getRpcUrlByChainId(CHAINS.Mainnet); + + return createConfig({ + chains: [wagmiChains.mainnet], + ssr: true, + connectors: [], + batch: { + multicall: false, + }, + pollingInterval: config.PROVIDER_POLLING_INTERVAL, + transports: { + [wagmiChains.mainnet.id]: fallback([ + // api/rpc + http(rpcUrlMainnet, { + batch: batchConfig, + name: rpcUrlMainnet, + }), + // fallback rpc from wagmi.chains like cloudfare-eth + http(undefined, { + batch: batchConfig, + name: 'default public RPC URL', + }), + ]), + }, + }); + }, [getRpcUrlByChainId]); + + const publicClientMainnet = usePublicClient({ + config: mainnetConfig, + }); + + const { wagmiConfig, reefKnotConfig, walletsModalConfig } = useMemo(() => { + return getDefaultConfig({ + // Reef-Knot config args + rpc: backendRPC, + defaultChain: defaultChain, + walletconnectProjectId, + walletsList: WalletsListEthereum, + + // Wagmi config args + transports: transportMap, + chains: supportedChains, + autoConnect: isWalletConnectionAllowed, + ssr: true, + pollingInterval: config.PROVIDER_POLLING_INTERVAL, + batch: { + multicall: false, + }, + + // Wallets config args + ...getDefaultWalletsModalConfig(), + ...walletMetricProps, + walletsPinned: WALLETS_PINNED, + }); + }, [ + backendRPC, + supportedChains, + defaultChain, + walletconnectProjectId, + isWalletConnectionAllowed, + transportMap, + ]); + + const [activeConnection] = useConnections({ config: wagmiConfig }); + + useEffect(() => { + void onActiveConnection(activeConnection ?? null); + }, [activeConnection, onActiveConnection]); + + return ( + + {/* default wagmi autoConnect, MUST be false in our case, because we use custom autoConnect from Reef Knot */} + + + + + {children} + + + + ); +}; diff --git a/next.config.mjs b/next.config.mjs index 1a5f7f32..c2bb5a39 100644 --- a/next.config.mjs +++ b/next.config.mjs @@ -1,9 +1,19 @@ +// eslint-disable-next-line import/no-extraneous-dependencies import NextBundleAnalyzer from '@next/bundle-analyzer'; import buildDynamics from './scripts/build-dynamics.mjs'; import generateBuildId from './scripts/generate-build-id.mjs'; +import { logEnvironmentVariables } from './scripts/log-environment-variables.mjs'; +import { startupCheckRPCs } from './scripts/startup-checks/rpc.mjs'; +import { startupCheckValidationFile } from './scripts/startup-checks/validation-file.mjs'; +logEnvironmentVariables(); buildDynamics(); +if (process.env.RUN_STARTUP_CHECKS === 'true') { + void startupCheckRPCs(); + void startupCheckValidationFile(); +} + // https://nextjs.org/docs/pages/api-reference/next-config-js/basePath const basePath = process.env.BASE_PATH; @@ -161,28 +171,26 @@ export default withBundleAnalyzer({ maintenance, defaultChain: process.env.DEFAULT_CHAIN, + rpcUrls_1: process.env.EL_RPC_URLS_1, rpcUrls_17000: process.env.EL_RPC_URLS_17000, - ethplorerApiKey: process.env.ETHPLORER_API_KEY, + rpcUrls_560048: process.env.EL_RPC_URLS_560048, + clApiUrls_1: process.env.CL_API_URLS_1, clApiUrls_17000: process.env.CL_API_URLS_17000, + clApiUrls_560048: process.env.CL_API_URLS_560048, - oneInchApiKey: process.env.ONE_INCH_API_KEY, + migalabsApiUrl: process.env.ETHSEER_API_URL, + migalabsApiToken: process.env.ETHSEER_API_TOKEN, cspTrustedHosts: process.env.CSP_TRUSTED_HOSTS, cspReportUri: process.env.CSP_REPORT_URI, cspReportOnly: process.env.CSP_REPORT_ONLY, - subgraphMainnet: process.env.SUBGRAPH_MAINNET, - subgraphGoerli: process.env.SUBGRAPH_GOERLI, - subgraphHolesky: process.env.SUBGRAPH_HOLESKY, - subgraphRequestTimeout: process.env.SUBGRAPH_REQUEST_TIMEOUT, - rateLimit: process.env.RATE_LIMIT, rateLimitTimeFrame: process.env.RATE_LIMIT_TIME_FRAME, - - ethAPIBasePath: process.env.ETH_API_BASE_PATH, - rewardsBackendAPI: process.env.REWARDS_BACKEND, + validationAPI: process.env.VALIDATION_SERVICE_BASE_PATH, + validationFilePath: process.env.VALIDATION_FILE_PATH, }, // ATTENTION: If you add a new variable you should declare it in `global.d.ts` diff --git a/package.json b/package.json index 95877de4..60a9c1ab 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "lido-csm-widget", - "version": "1.2.2", + "version": "2.0.0", "private": true, "type": "module", "license": "GPL-3.0-or-later", @@ -12,32 +12,22 @@ "lint": "eslint --ext ts,tsx,js,mjs .", "lint:fix": "yarn lint --fix", "types": "tsc --noEmit", - "typechain": "typechain --target=ethers-v5 --out-dir ./generated ./abi/*.json", - "postinstall": "husky install && yarn typechain || true", - "test": "yarn test:e2e", + "postinstall": "husky install || true", "test:unit": "jest", + "test:setup": "npx playwright install chromium && ./tests/scripts/set_up_keys_generator.sh && yarn test:setup:fork", + "test:setup:fork": "./tests/scripts/install_foundry.sh", "test:e2e": "playwright test" }, "dependencies": { - "@ethersproject/bignumber": "^5.7.0", - "@ethersproject/bytes": "^5.7.0", - "@ethersproject/constants": "^5.7.0", - "@ethersproject/contracts": "^5.7.0", - "@ethersproject/providers": "^5.7.0", - "@ethersproject/units": "^5.7.0", - "@lido-sdk/constants": "^3.2.1", - "@lido-sdk/contracts": "^3.0.4", - "@lido-sdk/fetch": "^2.1.12", - "@lido-sdk/helpers": "^1.5.1", - "@lido-sdk/providers": "^1.4.14", - "@lido-sdk/react": "^2.0.5", "@lidofinance/address": "^1.4.0", - "@lidofinance/analytics-matomo": "^0.51.0", + "@lidofinance/analytics-matomo": "^0.56.0", "@lidofinance/api-logger": "^0.47.0", "@lidofinance/api-metrics": "^0.47.0", "@lidofinance/api-rpc": "^0.47.0", "@lidofinance/eth-api-providers": "^0.47.0", "@lidofinance/eth-providers": "^0.47.0", + "@lidofinance/lido-csm-sdk": "^1.9.0", + "@lidofinance/lido-ethereum-sdk": "^4.5.1", "@lidofinance/lido-ui": "^3.26.0", "@lidofinance/next-api-wrapper": "^0.47.0", "@lidofinance/next-ip-rate-limit": "^0.47.0", @@ -45,14 +35,11 @@ "@lidofinance/rpc": "^0.47.0", "@lidofinance/satanizer": "^0.47.0", "@openzeppelin/merkle-tree": "^1.0.7", - "bignumber.js": "9.1.2", + "@tanstack/react-query": "^5.66.0", "copy-to-clipboard": "^3.3.1", "cors": "^2.8.5", "date-fns": "2.29.2", - "ethers": "^5.7.2", "fs-extra": "^11.2.0", - "gray-matter": "^4.0.3", - "js-cookie": "^3.0.1", "lodash": "^4.17.21", "memory-cache": "^0.2.0", "ms": "^2.1.3", @@ -63,36 +50,35 @@ "prom-client": "^14.0.1", "raw-loader": "^4.0.2", "react": "^18.2.0", - "react-device-detect": "^2.2.2", + "react-canvas-confetti": "^2.0.7", "react-dom": "^18.2.0", "react-dropzone": "^14.2.3", - "react-hook-form": "^7.52.1", - "react-is": "^18.3.1", - "react-transition-group": "^4.4.2", - "reef-knot": "^4.2.0", - "remark": "^13.0.0", - "remark-external-links": "^8.0.0", - "remark-html": "^13.0.1", + "react-hook-form": "^7.60.0", + "reef-knot": "^7.5.0", "siwe": "^3.0.0", "styled-components": "^5.3.5", - "swr": "^2.2.5", - "tiny-async-pool": "^2.1.0", "tiny-invariant": "^1.1.0", "uuid": "^8.3.2", - "wagmi": "0.12.19" + "viem": "^2.31.4", + "wagmi": "^2.15.4" }, "devDependencies": { "@commitlint/cli": "^17.4.4", "@commitlint/config-conventional": "^17.4.4", "@commitlint/prompt": "^17.4.4", + "@lidofinance/browser-service": "1.6.4", + "@lidofinance/discord-reporter": "1.7.0", "@lidofinance/eslint-config": "^0.43.0", + "@lidofinance/wallets-testing-extensions": "1.3.1", + "@lidofinance/wallets-testing-wallets": "1.39.0", + "@lidofinance/wallets-testing-nodes": "1.7.0", + "@lidofinance/pg-reporter": "1.2.0", + "@nestjs/common": "^10.4.16", "@next/bundle-analyzer": "^13.2.4", "@next/eslint-plugin-next": "^13.4.13", - "@playwright/test": "^1.29.2", + "@playwright/test": "1.56.1", "@svgr/webpack": "8.1.0", - "@typechain/ethers-v5": "^11.1.2", "@types/jest": "28.1.6", - "@types/js-cookie": "^3.0.0", "@types/lodash": "^4.14.186", "@types/memory-cache": "0.2.2", "@types/ms": "^0.7.31", @@ -122,17 +108,21 @@ "jest": "^29.5.0", "jsonschema": "^1.4.1", "lint-staged": "^13.2.3", - "playwright": "^1.29.2", + "playwright-qase-reporter": "^2.1.6", "prettier": "^3.3.3", + "qase-javascript-commons": "^2.4.9", + "qaseio": "^2.4.3", "ts-jest": "^29.1.0", "typechain": "^8.1.1", "typescript": "^5.4.5", "url-loader": "^4.1.1", - "webpack-preprocessor-loader": "^1.3.0" + "webpack-preprocessor-loader": "^1.3.0", + "zod": "^4.1.12" }, "resolutions": { "postcss": "^8.4.31", - "crypto-js": "^4.2.0" + "crypto-js": "^4.2.0", + "wrap-ansi": "7.0.0" }, "lint-staged": { "./**/*.{ts,tsx}": [ diff --git a/pages/404.tsx b/pages/404.tsx index f39ae91d..fbcc575d 100644 --- a/pages/404.tsx +++ b/pages/404.tsx @@ -1,5 +1,4 @@ import { ServicePage } from '@lidofinance/lido-ui'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { GetStaticProps } from 'next'; import Head from 'next/head'; import { FC } from 'react'; @@ -12,7 +11,7 @@ const StyledServicePage = styled(ServicePage)` `; const Page404: FC = () => ( - + Lido | Page Not Found diff --git a/pages/500.tsx b/pages/500.tsx index 2fb8c1d9..03bb2279 100644 --- a/pages/500.tsx +++ b/pages/500.tsx @@ -1,12 +1,11 @@ import { ServicePage } from '@lidofinance/lido-ui'; -import { MATOMO_CLICK_EVENTS_TYPES } from 'consts/matomo-click-events'; import { GetStaticProps } from 'next'; import Head from 'next/head'; import { FC } from 'react'; import { Layout } from 'shared/layout'; const Page500: FC = () => ( - + Lido | Internal Server Error diff --git a/pages/_app.tsx b/pages/_app.tsx index 1b12e12b..98664932 100644 --- a/pages/_app.tsx +++ b/pages/_app.tsx @@ -3,15 +3,14 @@ import Head from 'next/head'; import 'nprogress/nprogress.css'; import { memo } from 'react'; -import { CookiesTooltip, ToastContainer } from '@lidofinance/lido-ui'; +import { ToastContainer } from '@lidofinance/lido-ui'; import { config, SecretConfigType } from 'config'; import { withCsp } from 'config/csp'; -import { FaqItem } from 'lib/getFaq'; import { Providers } from 'providers'; -import { FaqContext } from 'providers/faq-provider'; -import { BackgroundGradient } from 'shared/components'; +import { BackgroundGradient, SecurityStatusBanner } from 'shared/components'; import { nprogress } from 'utils'; +import { AddressValidationFile } from 'utils'; // Visualize route changes nprogress(); @@ -25,39 +24,38 @@ const App = (props: AppProps) => { const MemoApp = memo(App); type AppParams = Partial> & { + validationFile?: AddressValidationFile; isError?: boolean; - faqList?: FaqItem[]; }; const AppWrapper = (props: AppProps): JSX.Element => { const { ...rest } = props; return ( - - - {/* see https://nextjs.org/docs/messages/no-document-viewport-meta */} - - - CSM | Lido - - + {/* see https://nextjs.org/docs/messages/no-document-viewport-meta */} + + - - - - - + CSM | Lido + + + + + + ); }; diff --git a/pages/_document.tsx b/pages/_document.tsx index c104b21a..fba3ab7f 100644 --- a/pages/_document.tsx +++ b/pages/_document.tsx @@ -12,6 +12,7 @@ import { Fonts, LidoUIHead } from '@lidofinance/lido-ui'; import { config } from 'config'; import { contentSecurityPolicy } from 'config/csp'; +import { FiraCodeFont } from 'styles'; let host = 'https://csm.lido.fi'; @@ -127,6 +128,7 @@ export default class MyDocument extends Document { + {/* eslint-disable-next-line @next/next/no-sync-scripts */}